[HN Gopher] GitHub Copilot available for JetBrains and Neovim
       ___________________________________________________________________
        
       GitHub Copilot available for JetBrains and Neovim
        
       Author : orph
       Score  : 375 points
       Date   : 2021-10-27 17:42 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | soledades wrote:
       | So it looks like for neovim there is not yet the option to cycle
       | through suggestions?
       | 
       | Looks like for VSCode the shortcut on Linux is Alt-], see:
       | https://github.com/github/copilot-docs/blob/main/docs/visual...
       | 
       | But for neovim, it doesn't mention anything about it in the docs:
       | https://github.com/github/copilot.vim/blob/release/doc/copil...
       | 
       | And, nothing happens when pressing Alt-].
        
       | alexellisuk wrote:
       | So who knows what all that WASM is for in the Neovim plugin? Is
       | there source for it?
       | https://github.com/github/copilot.vim/tree/release/copilot/d...
        
         | wilde wrote:
         | A web search suggests that it's this: https://github.com/nvim-
         | treesitter/nvim-treesitter
        
         | kevincox wrote:
         | Presumably they are tree-sitter grammars for those languages. I
         | think these grammars are open source so should be available
         | (assuming they were unmodified).
        
       | qanstr wrote:
       | We should put up a huge amount of Oracle open source code on
       | GitHub, get CoPlagiarizer to quote it and let Oracle deal with
       | the situation.
       | 
       | The plebs should also play a little divide and conquer now and
       | then.
        
       | mewse wrote:
       | I've never understood the value proposition for Copilot.
       | 
       | In terms of difficulty, writing code is maybe on average a two
       | out of ten.
       | 
       | On average, maintaining code you wrote recently is probably a
       | three out of ten in terms of difficulty, and maintaining code
       | somebody else wrote or code from a long time ago probably rises
       | to around a five out of ten.
       | 
       | Debugging misbehaving code is probably a seven out of ten or
       | higher.
       | 
       | GitHub Copilot is optimising the part of the process that was
       | already the easiest, and makes the other parts harder because it
       | moves you from the "I wrote this" path to the "somebody else
       | wrote this" path.
       | 
       | Even during the initial write, it changes the writing process
       | from programming (which is easy) to understanding somebody else's
       | code to ensure that it's right before accepting the suggestion
       | (which is much less easy). I just don't understand how this is a
       | net time/energy savings?
        
       | MayeulC wrote:
       | Does it relies on a Microsoft-provided API? If it's not offline,
       | the same gotchas as other SaaS apply.
        
       | marstall wrote:
       | Any1 get it working WebStorm yet?
        
       | wara23arish wrote:
       | I have a few questions about copilot. I haven't gotten a chance
       | to use it yet.
       | 
       | Is it irrational that this makes me a little anxious about job
       | security over the longterm? Idk why but this was my initial
       | reaction when learning about this.
       | 
       | Given the scenario where copilot and its likes becomes used in a
       | widespread manner. Can it be argued that this might improve
       | productivity but stifle innovation?
       | 
       | Im pretty early in my career but the rate things are capable of
       | changing soon doesn't sit too well with me.
        
         | api wrote:
         | I wouldn't worry about job security. Programming is a story of
         | steady gradual automation and all that's done is increased its
         | reach and multiplied the number of niches where there is demand
         | for software.
         | 
         | Future developers might be more like architects guiding AIs and
         | then occasionally jumping in to hand-hold or correct the
         | result.
        
         | abecedarius wrote:
         | It's reasonable to worry.
         | 
         | - Copilot is qualitatively different from the kinds of
         | automation of programming we've seen before.
         | 
         | - It's barely version 1.0 of this kind of thing. Deep learning
         | has been advancing incredibly for a decade and doesn't seem to
         | be slowing down. Researchers also work on things like
         | mathematical problem-solving, which would tie in to "real work"
         | and not just the boilerplate.
         | 
         | - In past examples of AI going from subhuman to superhuman,
         | e.g. chess and go, the practitioners did not expect to be
         | overtaken just a few years after it had not even felt like real
         | competition. You'd read quotes from them about the ineffability
         | of human thought.
         | 
         | What to do personally, I don't know. Stay flexible?
        
         | ericbarrett wrote:
         | > Is it irrational that this makes me a little anxious about
         | job security over the longterm? Idk why but this was my initial
         | reaction when learning about this.
         | 
         | I've been programming since the '80s. It's my opinion that the
         | age of humans writing code is coming to a close. Perhaps
         | another 20 years or so, with the peak in ~10; but I'm less
         | certain about the timeline than the destination. There will
         | still be a long tail, but most of the human work will shift to
         | design and wrangling algorithms. The remnant will be hobbyist,
         | such as Commodore 64 programmers today.
        
         | fungiblecog wrote:
         | You should only be worried if you just copy and paste
         | boilerplate between files. If you're actually able to solve
         | problems and design things there's nothing to be worried about
        
         | d13 wrote:
         | It's nothing more than an enhanced autocomplete that's 1 part
         | dangerous and two parts hillarious. You'll have your job for
         | life.
        
         | objclxt wrote:
         | > Is it irrational that this makes me a little anxious about
         | job security over the longterm?
         | 
         | In the 50s, we programmed computers with punch cards. Who does
         | now? How many web developers today could tell the difference
         | between `malloc` and `calloc`? Probably not that many.
         | 
         | For a lot of developers, programming today bears very little
         | relation to programming decades ago. Copilot is like any other
         | innovation - it obsoletes some skills, and it introduces new
         | ones.
         | 
         | I doubt copilot will _reduce_ the need for engineers: but it
         | may change the work they do. But that 's no different to any
         | other industry.
        
           | eloisius wrote:
           | I don't like this narrative. Going from punch cards, to
           | Assembly, to C and to dynamic languages all empowered the
           | programmer with more expressive languages. I don't believe
           | going from Python to programming via code comments is the
           | same deal.
           | 
           | It would be more like we still write asm but we have editors
           | that let you write a little C code and then it spits out a
           | paragraph of 'reasonable' asm that still has to be
           | maintained.
        
             | tikhonj wrote:
             | That's roughly how I've seen experienced people work on
             | high-performance code. I mean, they rarely maintain the
             | generated assembly _directly_ , but they _do_ write code
             | with the assembly it would generate in mind, and keeping
             | the code generating comparable assembly over time is part
             | of maintaining the performance-critical parts of the
             | codebase.
        
       | ipnon wrote:
       | Can any users give their opinion on how it's helping their
       | productivity? What problems are they finding, if any?
        
         | ridiculous_fish wrote:
         | There's a risk of it turning into a worse StackOverflow, by
         | suggesting plausible-looking but subtly incorrect code. Here's
         | two examples I found:
         | 
         | https://twitter.com/ridiculous_fish/status/14527512360594513...
        
         | kall wrote:
         | If I have an if else case, a switch statement or something
         | similar, it can often predict the next branch exactly how I
         | would write it. That's probably 80% of the suggestions I
         | accept, the rest is single line autocompletes. I have never
         | accepted a whole function implementation, and they are actually
         | rather annoying because they make the document jump.
         | 
         | It's useful enough for me, as a magic autocomplete.
        
         | etaioinshrdlu wrote:
         | I only played around with it on OpenAI but it's the same model
         | as far as I know. It's pretty good at regurgitating algorithms
         | it's seen before. It's not good at all at coming up with new
         | algorithms.
         | 
         | It's very good at translating between programming languages,
         | including pseudocode.
         | 
         | It can write a lot more valid code much quicker than any human,
         | and in a whole slew of languages.
         | 
         | I haven't had the urge to use it much after playing around with
         | it constantly for a few days, but it was pretty mind-blowing.
        
           | yepthatsreality wrote:
           | Your response makes me wonder if poisoning the well is
           | possible by submitting code to Github with multiple languages
           | and coding styles. A single file with a function signature
           | written in Javascript and the body written in Python + Ruby.
           | Enough code would surely break the AI model behind it. Unless
           | Copilot has some sort of ingestion validation which wouldn't
           | surprise.
        
             | ctoth wrote:
             | I don't know if this is true, but I would assume that the
             | tokenizers they used for Codex use actual language parsers
             | which would drop invalid files like this and make this
             | attack infeasible.
             | 
             | When I was playing around a couple years ago with the
             | Fastai courses in language modeling I used the Python
             | tokenize module to feed my model, and with excellent parser
             | libraries like Lark[0] out there it wouldn't take that long
             | to build real quality parsers.
             | 
             | Of course I could be totally wrong and they might just be
             | dumping pure text in, shutter.
             | 
             | [0]: https://github.com/lark-parser/lark
        
             | Grimm1 wrote:
             | In any training with code I've done, we've written a parser
             | that validates against tree sitter grammars to make sure
             | it's at least syntactically valid against some known subset
             | of languages we're training on.
        
               | yepthatsreality wrote:
               | I'm which case shifting strategies toward code that looks
               | correct but isn't using shared syntax between languages
               | as well as language specific gotchas.
        
               | Grimm1 wrote:
               | Yeah but if malicious intent is a concern you can just
               | spin up a sandboxed instance to run the code to check
               | first.
               | 
               | Really the thing is there's not way to ascribe
               | correctness to a piece of code right, like humans fail at
               | this even. The only "correct" code is like rote
               | algorithmic code that has a well defined method of
               | operation. And there's likely a lot more correct examples
               | of that, like way more than you'd ever be able to poison.
               | 
               | You may be able to be misleading though by using names
               | that say one thing but do another, but again you'd be
               | fighting against the tide of correctly named things.
        
             | stu2b50 wrote:
             | Probably but you would have to submit an absurdly large
             | amount of code to make a dent. Practically unreasonable
             | considering their training corpus is also increasing per
             | lines of public code submitted on github.
             | 
             | So not only would you have to submit a insanely large
             | amount of code but you're also racing against literally
             | millions of users writing legitimate code at any period of
             | time.
        
               | yepthatsreality wrote:
               | Why not just use AI to generate the code, and automate
               | submission via APIs?
        
               | [deleted]
        
               | josefx wrote:
               | > Probably but you would have to submit an absurdly large
               | amount of code to make a dent.
               | 
               | So how about an already poisoned well. How up to date is
               | the average Github project on encryption standards?
        
         | the42thdoctor wrote:
         | I was working on some internationalization stuff, translating
         | some phrases from english to portuguese and Copilot just did it
         | for me, does not seem like much but for me that is amazing.
         | 
         | I was able to write {"Settings":...} and Copilot completed with
         | {"Settings": "Configuracoes"} that tool is simply amazing.
        
         | dreyfan wrote:
         | It's a dream come true for the script kiddies.
        
         | rawtxapp wrote:
         | It's truly amazing, almost felt magical the first few
         | autocomplete results I got.
         | 
         | There's the benefits that a lot of people mentioned, but to me
         | the biggest benefit is I can avoid procrastination. Usually
         | when I'm blocked on something I'll run a search in the browser,
         | but very quickly I end up going off the trail and just browsing
         | the web and losing a lot of time. Now when I'm blocked I simply
         | type the comment of what I'm trying to do and the autocomplete
         | suggestion is pretty damn good and unblocks me very quickly.
         | More surprising of all, it somehow understands my code style by
         | looking at the context.
        
         | karmasimida wrote:
         | Useful to say, write a python script, doing some mandane
         | things, like generate all the argparse lines for you, read the
         | files, etc.
         | 
         | In a way, it does the dirty pipes surprisingly well. But when
         | it comes to implement the core of the algorithm, it is not
         | there yet, but the potential is huge.
        
         | ed_elliott_asc wrote:
         | It is massively improving my productivity, things I couldn't be
         | bothered to write it does for me.
         | 
         | The thing I find really good is it can predict what I will do
         | next. Say if I have a list of columns in some text somewhere in
         | the project when I write one "df =
         | df.withColumn("OneItemInList")"
         | 
         | Copilot will then add the same for all the other items - is
         | really nice
        
         | dgunay wrote:
         | It can generate the body of test cases well, especially in BDD
         | frameworks where you write the high-level scenario first to
         | prime it with context. Less tedium encourages me to write more
         | tests.
         | 
         | More verbose languages like C++ become less obnoxious to write
         | in. I know RSI has been mentioned and any tool which cuts down
         | on excessive typing will help with that.
         | 
         | It sometimes reveals bits of the standard library I wasn't
         | aware of in unfamiliar languages. I can write my intent as a
         | comment and then it may pull out a one-liner to replace what I
         | would have normally done using a for loop.
         | 
         | The main downside I've observed is that if I'm not trying to
         | reign it in, it can result in a lot of WET code since it can
         | pattern match other areas of the surrounding code but can't
         | actually rewrite anything that has already been written. It is
         | important to go back and refactor the stuff it produces to
         | avoid this.
        
         | abidlabs wrote:
         | What I like most about Copilot is seeing different programming
         | styles suggested to me
         | 
         | For example, I didn't know about self.fail() in unittests and
         | had never used it, but Copilot suggested it and it produced the
         | most readable version of the unit test
        
         | baby wrote:
         | As other pointed out, it makes boring or repetitive tasks a
         | breeze.
         | 
         | Also, it's like a more clever auto complete most of the time,
         | even when it's wrong in calling a function you can use it as
         | foundation code to go faster.
         | 
         | And you don't need to think too much about it, it really keeps
         | you in the flow.
        
         | trothamel wrote:
         | I find it works well when my intent is clear. For example, I
         | might want to log a value I just computed for debugging
         | purposes. I type LOG, wait a second, and it completes a zephyr
         | logging macro, complete with a sensible message and the value I
         | just computed.
         | 
         | It sort of feels like pair programming with an undergraduate,
         | except copilot never learns. That isn't to say it's bad, more
         | that it is just a tool you can hand simple stuff off to, except
         | the handoff is zero-effort.
         | 
         | EDIT: I will say that there are times when it makes up fantasy
         | constants or variable names, that seem plausible but don't
         | exist. An eventual version of Copilot that includes more normal
         | autocompletion information, so it only suggests symbols that
         | exist, will be a stronger tool.
        
         | JoshCole wrote:
         | I've actually found it helpful as an API autocomplete, but...
         | also not helpful at the same time.
         | 
         | So for example I was working with processing an image to
         | extract features and a few variants of docstrings for the
         | method got me a pretty close to working function which
         | converted the image to gray scale, detected edges, and computed
         | the result I wanted.
         | 
         | The helpful thing here was that there were certain APIs that
         | were useful as a part of doing this that it knew but which I
         | would have to do look up. I had to go through and modify the
         | proposed solution: it got the conditional in the right place,
         | but I wanted a broader classification so switched from a (255,
         | 255, 255) check to a nearBlack(pixel) function which it then
         | autocompleted successfully. I also had to modify the cropping.
         | 
         | When doing a similar task in the past I spent a lot more time
         | on it, because I went down a route in which I was doing color
         | classification based on the k nearest neighbors. Later I found
         | that the AI I was working on was learning to exploit the
         | opacity of the section of the screen I was extracting a feature
         | from in order to maximize its reward, because it kept finding
         | edge cases in the color classifier. I ended up switching to a
         | different color space to make color difference distance
         | functions more meaningful, but it wasn't good enough to beat
         | the RL agent that was trying to exploit mistakes in the
         | classifier.
         | 
         | Anyway, what I'm getting at here is that it is pretty easy to
         | spend a lot of time doing similar things to what I'm doing and
         | not get a great solution at the end. In this case though it
         | only took a few minutes to get a working solution. CoPilot
         | didn't code the solution for me, but it helped me get the
         | coding done faster because it knew the APIs and the basic
         | structure of what I needed to do. To be clear, its solutions
         | were all broken in a ton of ways, but it didn't matter it still
         | saved me time.
         | 
         | To give another example let's say you have a keyboard key event
         | press and you weren't sure about how to translate that into the
         | key that was pressed. key.char? key.key? str(key)? key.symbol?
         | A former method of figuring out what the right key might be is
         | looking up the code, but with CoPilot you type '# Get the key
         | associated with the key press' then hit tab and it gives you
         | code that is broken but looks perfect and you gain a false
         | sense of confidence that you actually know the API. You later
         | realize after being amazed that it knew the API so well that
         | you didn't have to look it up that actually the key press event
         | handles symbols differently and so it errors on anything that
         | is used as a modifier key.
         | 
         | My general impression is something like: Wow, this is amazing.
         | It understood exactly what I wanted and it knew the APIs and
         | coded up the solution... Wait, no. Hold on a second. This and
         | that are wrong.
        
           | karmasimida wrote:
           | Right
           | 
           | I am in the same boat with you. I am simultaneously wowed and
           | underwhelmed to some degree.
           | 
           | Yes it is amazing when it gets right, it feels like cheating.
           | But at the same time, it many times, does ... too much? To
           | read a huge chuck of code and figuring out where it goes
           | wrong is not a thing for me. Also Copilot doesn't really know
           | the API, so yes, the amount of mental tax isn't less to make
           | sure your program really behaves.
           | 
           | But again, I see the idea of Copilot is already huge win. I
           | hate writing those manual scripts just offer people an
           | entrance to some utility behind. Copilot does those things,
           | surprisingly well and with accuracy.
           | 
           | Let it improve in the future, and we will see changes that
           | quite fundamental to the idea of programming itself.
        
         | capableweb wrote:
         | Tried it out for a while, and it's clear that it's trying to
         | get people to be faster at writing boilerplate, not get people
         | to write better code.
         | 
         | I'm a bit scared for what this means as I don't think being
         | able to faster write boilerplate is something worthwhile. The
         | example ed_elliott_asc made is one of those examples where
         | instead of fixing things so you don't have to repeat yourself,
         | copilot makes it easy to just live with the boilerplate
         | instead.
        
           | csee wrote:
           | It's going to be great for exploratory data science. You
           | don't really need stellar, maintainable or extensible code
           | for that, the early stage is largely about iteration speed.
        
             | manquer wrote:
             | Iteration speed also depends on code being well written and
             | performance code, you need to get results faster to iterate
             | faster.
             | 
             | Also if your don't fully understand your code( when
             | generated or copied from SO) as not uncommon with junior
             | developers and data science practitioners, then they
             | struggle to make even small change for the next iteration,
             | because they don't fully understand what their code is
             | doing and how.
             | 
             | When your code is composable or modifiable easily then
             | iterations become faster because you understand what you
             | have written. One of the reasons why analysts prefer Excel
             | if data size is within limits.
        
           | aranchelk wrote:
           | Boilerplate is exclusively what I use AI-powered code
           | completion for (currently Tabnine).
           | 
           | In a perfect world we'd all have excellent comprehensive
           | metaprogramming facilities in our programming languages and
           | no incidence of RSI (e.g. carpal tunnel syndrome). Code
           | completion is a good tool to deal with these realities.
        
           | airstrike wrote:
           | _> I don 't think being able to faster write boilerplate is
           | something worthwhile_
           | 
           | But do you believe people being _slower_ at writing
           | boilerplate is undesirable?
        
             | kyleee wrote:
             | It may be desirable for boilerplate to be maximally painful
             | if it forces our collective hands to cut down on
             | boilerplate and innovate it away
        
               | kevingadd wrote:
               | Who is realistically going to innovate the boilerplate
               | out of Java if they're stuck using it at work?
        
               | stelcodes wrote:
               | I mean, Clojure kinda does that
        
               | kevingadd wrote:
               | So the solution to the problems that Copilot tries to
               | solve is "migrate your workplace to Clojure"? Ordinary
               | devs can't do that.
        
               | gridspy wrote:
               | That, or any job where you're not permitted to make the
               | sweeping changes required to resolve boilerplate. Many of
               | my jobs had such restrictions.
        
               | closeparen wrote:
               | That's a good plan if your language isn't Go. For us I
               | think tools to wrangle boilerplate are a lot more
               | feasible than actually eliminating it.
        
               | zomglings wrote:
               | if commentErr != nil {             hn.Upvote("https://new
               | s.ycombinator.com/item?id=29017491")         }
        
               | verve_rat wrote:
               | In my experience whenever someone tries to "innovate"
               | away boilerplate they end up creating shitty abstractions
               | that are inflexible, poorly documented, and unmaintained.
               | 
               | Boilerplate generally exists for a reason, and it's not
               | because the creator likes typing.
        
             | chrsig wrote:
             | Possibly yes, if you're only contrasting it with being able
             | to be faster.
             | 
             | I mean, it's sort of a false dichotomy -- it's omitting a
             | "default speed" for writing boilerplate that is neither
             | enhanced nor impeded.
             | 
             | the potential issue with an enhanced speed for writing
             | boilerplate is that it means that there'll just be more and
             | more boilerplate to maintain over time, and it's not clear
             | what that cost over time will be.
             | 
             | How much more effort will be expended to replace things in
             | multiple places? It exacerbates existing issues of "these
             | two things look almost the same, but someone manually
             | modified one copy...should that change be propagated?"
             | 
             | Meaning, it's essentially an ad-hoc code generator. Code
             | generation can be a very useful technique (see protobufs),
             | but without the ability to re-generate from a source?
             | 
             | Perhaps a possible enhancement might be for copilot to keep
             | track of all blurbs it generated and propose
             | refactoring/modifying all copies?
        
               | airstrike wrote:
               | _> I mean, it 's sort of a false dichotomy -- it's
               | omitting a "default speed" for writing boilerplate that
               | is neither enhanced nor impeded._
               | 
               | I'm not sure. I think that understanding is omitting a
               | "default amount" of boilerplate that will have to be
               | written regardless of one's individual preference that is
               | really a function of the language / framework of choice,
               | the existing codebase and the problem at hand.
               | 
               | Removing that boilerplate would be ideal but is not
               | always possible given limited resources, time constraints
               | and the usual inability to make sweeping changes to the
               | codebase
               | 
               | So we settle for the second best solution which is to
               | automate away that tedious process (or short of that
               | provide developers with tools to get it out of the way
               | faster) so we can all focus on "real work"
        
           | pc86 wrote:
           | Writing a slightly abstracted library to handle populating a
           | list isn't necessarily "fixing" something. It might be, for
           | sure, but is going to be very use case dependent, and there
           | are a _lot_ of instances where it 's better to have 5, 10, or
           | yes even 15-20+ nearly-identical lines and be done in a
           | minute or two (or 5 seconds with Copilot IME) than spend half
           | a day tweaking test coverage on your one-off library.
        
             | capableweb wrote:
             | > Writing a slightly abstracted library to handle
             | populating a list
             | 
             | > than spend half a day tweaking test coverage on your one-
             | off library
             | 
             | If you need to write a library and spend half a day to
             | populate a list, you have bigger problems than boilerplate.
             | 
             | Nothing wrong with having duplicate lines. The problem
             | becomes when writing those lines become automated so you
             | start spewing those all over the place.
        
         | nemo1618 wrote:
         | I wrote a test recently for a simple "echo"-style server:
         | clients writes a name to a socket, server replies with "Hello,
         | " + name. Nothing crazy.
         | 
         | In the test body, I wrote "foo" to the socket. Copilot
         | immediately filled in the rest of the test: read from the
         | socket, check that the result is "Hello, foo", and fail the
         | test with a descriptive error otherwise.
         | 
         | wtf? How did it figure out that the correct result was "Hello,
         | foo"? I changed "Hello" to "Flarbnax", and sure enough, Copilot
         | suggested "Flarbnax, foo". I added a "!" to the end, and it
         | suggested that too. After pushing a bit further, the
         | suggestions started to lose accuracy: it would check for "???"
         | instead of "??" for example, or it would check for a newline
         | where there was none. But overall I came away very impressed.
        
         | speedgoose wrote:
         | It does the boring code for me.
         | 
         | If I want to throw an exception if an object is null or
         | undefined, Co-pilot will do the if and the exception throw
         | using the right error class, and a more meaningful error
         | message that what I usually came up with.
         | 
         | If want to map some random technical data table to something
         | useful in my programming language, I can copy paste the data
         | from the documentation in pdf or html into a comment block,
         | give an example, and co-pilot will write everything in the
         | format I want.
         | 
         | If I want to slightly refactor some code, I can do it once or
         | twice and co-pilot can help me a lot to refactor the remaining.
         | 
         | If I want to have a quick http server in nodejs, I don't have
         | to Google anything.
         | 
         | It's a lot of tiny things like this.
        
           | TaupeRanger wrote:
           | This is the kind of thing I would need to see in real time,
           | because I simply can't believe that it does any of these
           | things in a way that is reliable and doesn't involve having
           | to search through and make sure it hasn't made any mistakes,
           | taking just as much time as if you did it by hand.
        
             | gfosco wrote:
             | Likewise skeptical, but I have been super impressed with
             | it. I just got in to the technical preview, and worked
             | through a specific task I needed to do (involving mongoose,
             | a mongo aggregate query, a few loops, some date functions)
             | and started by adding a comment above each line. It helped
             | a lot actually, felt like a collab.
             | 
             | I'll reproduce a generic example I sent a friend.
             | 
             | Prompt:                   const redis = require('redis');
             | // Create a redis client
             | 
             | Copilot suggested:                   const client =
             | redis.createClient();
             | 
             | I accepted it and moved 2 lines down, prompt:
             | // Get the current count from redis
             | 
             | Copilot suggested a start to the operation:
             | client.get('count', (err, count) => {
             | 
             | I accepted it, and Copilot continued:
             | if (err) {             console.log(err);
             | return;           }                // If there is no count,
             | set it to 0           if (!count) {             count = 0;
             | }                // Increment the count           count++;
             | // Set the new count in redis           client.set('count',
             | count);                  // Log the new count
             | console.log(count);         }
        
               | foepys wrote:
               | Redis has the INCR command that does this in redis
               | without the additional round-trips (and race conditions).
               | It also sets the value to 0 if the key doesn't exist.
               | 
               | So, I actually consider this to be exactly the bad
               | behavior that people accuse Copilot of.
        
               | speedgoose wrote:
               | Yes it's not very shinning there. I would also throw the
               | error instead of printing the error to the console and
               | returning undefined.
        
               | ponyous wrote:
               | You are in a callback there. Goodbye your error!
        
               | gfosco wrote:
               | This was just one of its suggestions, but you're right of
               | course.. it's all based on the training data and idioms
               | used there. If it doesn't weight more modern code higher,
               | if it's not aware of new versions and methods, it isn't
               | going to be super intelligent.. but it can still give you
               | some ideas.
        
               | matsemann wrote:
               | // Create a redis client
               | 
               | Writing that probably takes a longer time than just doing
               | it with the IDE help in jetbrains, though?
               | 
               | Press "r", press "." to autocomplete so it now says
               | "redis.", then write "cC" and it suggests createClient
               | (or write "create" or "client" if you're not sure what
               | you're looking for). Now it says "redis.createClient()".
               | Press ctrl+alt+v to extract a variable or write ".const"
               | and press tab to apply the const live template. Ending up
               | with your result in two seconds.
        
               | aaaaaaaaaaab wrote:
               | Why does it increment the count?
        
               | gfosco wrote:
               | I assume that in its training, incrementing a counter in
               | redis is common.
        
             | baby wrote:
             | I was really skeptical at first, but after using it for a
             | while omg it is just insane.
        
             | Polycryptus wrote:
             | It's _very_ good at "learn by example" with some twists. It
             | _does_ make mistakes, and I do double check it, but it
             | still definitely saves time. I used it to write the bulk of
             | a new implementation of a new audio backend for a game
             | engine yesterday - it filled out a lot of the "boilerplate"
             | integration work (e.g. generating all the functions like
             | "set volume/pan/3D audio position" that map over 1:1 to
             | functions in the other library).
             | 
             | I will say, though, that it's also good at making up code
             | that looks very believably real but doesn't actually work.
             | 
             | The ethics involved in Copilot are a bit strange, and I'm
             | not sure I'll keep using it for those reasons, but it does
             | a good job.
        
       | meijer wrote:
       | I wonder when it will become generally available. Feels like it
       | has been around for quite a while now.
        
       | eikenberry wrote:
       | Any word on if they will ever make Copilot free software? It
       | sounds interesting, but I avoid using proprietary software in my
       | development stack. Plus it looks like it be fun to play with.
        
       | jkelleyrtp wrote:
       | I actually really like Copilot.
       | 
       | There tends to be a lot of repetitive code in the world. I
       | primarily write JS, Py, and Rust. Sometimes, I might declare
       | something like a function table, and Copilot will automatically
       | fill in the class definition with everything I defined.
       | 
       | I'm not using Copilot to write new algorithms or solve library-
       | specific problems, but it sure is next-level in picking up
       | patterns in a file and predicting where you want to go next.
       | Obviously, good code is succinct (not repetitive), but it sure is
       | helpful when in that early prototyping stage. I admire it's
       | ability to infer a correct assertion when writing Unit Tests - it
       | made it much easier for me to write tests recently and helped me
       | recognize a few bugs.
        
       | threatofrain wrote:
       | I've been getting a lot more misses than hits with Github
       | Copilot, even when writing elementary math or utility functions;
       | but despite its error I am nevertheless astonished at its
       | approximation of intent.
       | 
       | Very eager to see Github Copilot catchup to some bright line of
       | signal v noise.
        
         | baby wrote:
         | I would say the reverse, I'm getting so many hits that I'm
         | mindblown. And when it missed, I can generally still use that
         | and fix the suggestion, as it's faster.
        
           | f38zf5vdt wrote:
           | It's a glorified autocomplete to me. It seems like it feeds
           | me mostly things I'd get from searching Stack Overflow. The
           | first day was pretty interesting but the novelty wore off
           | quickly. You still need to grok what it spews out and see if
           | it's correct.
           | 
           | And the worst thing about that is that you don't get the
           | context of the Stack Overflow threads, where people discuss
           | the impact of the given solution and alternatives. So after a
           | week, off it went for me.
        
       | mistrial9 wrote:
       | this has been "inevitable" for three decades now. The difference
       | is, walled gardens making participation non-optional; commercial
       | intent over "fairness"; elevating the trivial for the pleasure of
       | management .. what could go wrong?!
       | 
       | overall, a new forms generator with a somewhat terrifying amount
       | of horsepower.. zero trust of microsoft here, basically
        
       | baby wrote:
       | I've been using this for weeks and it blooooows my mind. It comes
       | up with crazy recommendations, just yesterday I wrote this big
       | ass logic to do something, then I wanted to move that code to a
       | function so I wrote the function name and I kid you not copilot
       | suggested a one-liner that worked... the thing is so useful and
       | I'm not writing simple code (writing cryptographic code). And
       | when it's not doing that at the very least it provides auto-
       | completion to lists where a counter has to increase and things
       | like that. It's just baffling, I don't think I'm that directly
       | impacted by AI, or at least this is the first time where I'm like
       | "wow, AI really is changing the world RIGHT NOW". Half-joking:
       | can't wait for it to just write my code.
       | 
       | Also if this feature would be paid tomorrow, I think I would pay
       | for it. It's really noticeable when I don't have copilot enabled
       | now.
       | 
       | Oh and, autocompletion doesn't work with markdown files because
       | of markdown plugins I think? But this is another level of
       | insanity: when I'm writing english it figures a lot of the
       | sentences I want to write. Makes me question if I'm just a
       | deterministic individual with no choice.
        
       | luckyorlame wrote:
       | can it do my cs homework?
        
       | netcyrax wrote:
       | Why are people not bothered by privacy concerns in this case?
        
         | jmnicolas wrote:
         | I suppose this thing upload your code to Microsoft servers then
         | run some deep learning algos on it and get back to you with
         | suggestions? It also probably keep your code to feed it to the
         | algos.
         | 
         | If big tech was trustworthy I would use this with glee. But
         | when I see how the world is turning, I'll continue to type
         | boilerplate by hand (as long I'm allowed).
        
         | bogwog wrote:
         | Because the generation that grew up without any privacy is
         | growing up and getting jobs in tech.
        
         | lvass wrote:
         | They're good kids who won't have to worry about their social
         | credit.
        
       | truculent wrote:
       | The comments are so full of praise that I will have to give this
       | an earnest try. But is _writing_ code really the part of software
       | that people are struggling with?
        
       | f38zf5vdt wrote:
       | I used it for about a week but found I could type faster than it
       | could suggest, even if it suggested the right thing. I have been
       | coding for about 25 years but maybe it will help people new to
       | whatever language they are using.
        
       | yunji wrote:
       | How does this compared with tabnine? could these 2 plugins be
       | used together?
        
       | aimor wrote:
       | I'm very interested in this as a learning tool: instant feedback
       | about what could come next, compared to the status quo of
       | searching the internet or searching the language documentation. A
       | lot of the time I learn _a_ way to do something, then sometime
       | later stumble across a _better_ way to do the same thing. My hope
       | is that Copilot can be a shortcut for that discoverability.
        
       | pugets wrote:
       | Copilot is crazy. The other day, I was writing a Python function
       | that would call a Wikipedia API. I pulled from the internet an
       | example of a GET request, and pasted it as a comment in my code.
       | # sample call: https://en.wikipedia.org/w/api.php?action=query&fo
       | rmat=json&list=geosearch&gscoord=37.7891838%7C-122.4033522&gsradi
       | us=10000&gslimit=100
       | 
       | Then I defined a variable,                 base_url =
       | "https://en.wikipedia.org/w/api.php?"
       | 
       | Then, like magic, Copilot suggested all the remaining keys that
       | would go in the query params. It even knew which params were to
       | be kept as-is, and which ones would come from my previous code:
       | action = "query"  # action=query       format = "json"  # or xml
       | lat = str(latitude.value)  # 37.7891838       lon =
       | str(longitude.value)  # -122.4033522       gscoord = lat + "%7C"
       | + lon       ...       api_path = base_url + "action=" + action +
       | "&format=" + format + ... + "&gscoord=" + gscoord
       | 
       | As a guy who gets easily distracted while programming, Copilot
       | saves me a lot of time and keeps me engaged with my work. I can
       | only imagine what it'll look like 10 years from now.
        
         | c7DJTLrn wrote:
         | Bit of a dodgy way to form query parameters though. Other than
         | for a quick script.
        
           | sillysaurusx wrote:
           | Speaking as a former pentester, this is a fine way to form
           | query params in this specific case, _if_ lat and long are
           | floats.
           | 
           | They're the only data you can control, and unless they're
           | strings, it's useless for exploitation. Even denormal floats
           | / INF / NAN won't help achieve an objective.
           | 
           | I broadly agree with you, but people are pummeling Copilot
           | for writing code that I saw hundreds of times. Yes, sometimes
           | I was able to exploit some of that code. But the details
           | matter.
        
             | boredtofears wrote:
             | If the example code is everything that Copilot generated,
             | there's no guarantee that lat or long are floats and that
             | seems to be an implementation detail left to the user.
             | 
             | Isn't that a pretty big risk though? Specifically, that
             | people will use co-pilot recommendations "as-is" and give
             | little thought to the actual workings of the
             | recommendation?
             | 
             | After all, if you have to intimately understand the code
             | it's recommending are you really saving that much time over
             | vetting a Googled solution yourself?
        
           | Matthias1 wrote:
           | I'm not against "copying" code. I just looked up "python
           | build url query" The first link describes the `urllib.parse.
           | urlencode` function which takes a dict.
           | 
           | So I would build the query like so:                   from
           | urllib.parse import urlencode         urlencode({
           | "action": "query",             "format": "json",
           | ...             "gscoord":
           | f"{str(latitude.value)}|{str(longitude.value)}",         })
           | 
           | I think this is orders of magnitude clearer code. But that's
           | a parameter that's subjective that CoPilot can't adjust for
           | (although it can be better).
        
             | lambdaba wrote:
             | This. Code should be optimized for reading, I think this
             | kind of code is OK for exploratory stuff, but needs to be
             | rewritten later.
        
               | snicker7 wrote:
               | Well. Code should be optimized first for correctness, and
               | simple string concatenation will not work for URL params.
        
             | e0a74c wrote:
             | I'm surprised no one has suggested using `requests`
             | considering how easy, safe and readable it is:
             | >>> import requests, pprint         >>>          >>>
             | >>> url = "https://en.wikipedia.org/w/api.php"         >>>
             | resp = requests.get(         ...     url,          ...
             | params=dict(         ...         action="query",
             | ...         list="geosearch",         ...
             | format="json",         ...         gsradius=10000,
             | ...         gscoord=f"{latitude.value}|{longitude.value}"
             | ...     )         ... )         >>>          >>>
             | pprint.pprint(resp.json())         {'batchcomplete': '',
             | 'query': {'geosearch': [{'dist': 26.2,
             | 'lat': 37.7868194444444,
             | 'lon': -122.399905555556,
             | 'ns': 0,         ...
        
           | jtsiskin wrote:
           | Even for a quick script this worries me about copilot; if it
           | suggests this, then more people use it and think this is
           | right, commit it, and then copilot suggests this more -
           | that's a bad feedback loop. At least in StackOverflow you get
           | someone commenting why it's bad and showing how to use a
           | dictionary instead
        
           | ljm wrote:
           | Copilot may be the first of many computer dictionaries and
           | thesauruses.
           | 
           | Oxford English Dictionary, for example, is a human version of
           | defining language and a thesaurus is a completion engine.
           | 
           | Human language didn't suffer by having a dictionary and
           | thesaurus. Computer language doesn't suffer either.
        
           | pugets wrote:
           | It probably does suck! I'm not very experienced, and I was
           | just whipping up something quick to test if my random
           | MSFS2020 mod idea could work.
        
           | relativeadv wrote:
           | How so?
        
             | foepys wrote:
             | It has no escape logic. Okay for scripts, as GP stated,
             | very bad for production code.
        
             | Jon_Lowtek wrote:
             | code lacks context sensitive escaping
             | api_path = base_url + urllib.parse.urlencode({
             | 'action': action,         'format': letThisBeVariable,
             | ...         'gscoord': str(latitude.value) + '|' +
             | str(longitude.value)       })
             | 
             | see: https://docs.python.org/3/library/urllib.parse.html#ur
             | llib.p...
             | 
             | Mantra: when inserting data into a context (like an url)
             | escape the data for that context.
        
             | firebaze wrote:
             | Concatenating strings for example. As shown, it's the query
             | string equivalent of sql injection.
             | 
             | Use something like URLBuilder, or URIParams, or whatever
             | your platform supports. Don't use string concatenation
             | ever, if at all possible, and if not possible (wtf?), then
             | at least escape strings.
        
             | dastbe wrote:
             | the "nice" way of doing this would would be to create a
             | list of your stringified arguments, mapped urlencoding over
             | them, and then join them with the parameter separator. this
             | ends up being resilient to someone adding something that
             | ends up being incorrect, and makes explicit in the code
             | what you're trying to do.
        
             | cmckn wrote:
             | I usually try to avoid working with URLs as bare strings
             | like this, both for readability and correctness (URL
             | encoding is tricky). With 'requests' you can do something
             | like pass a dictionary of your query params and it takes
             | care of forming the actual request URL.
             | 
             | https://docs.python-
             | requests.org/en/latest/user/quickstart/#...
        
             | [deleted]
        
             | gen220 wrote:
             | It's much safer (i.e. fewer degrees of freedom for bugs to
             | appear) to use f-strings in situations like this one.
             | 
             | One correlated but ancillary benefit, is that there are
             | fewer variables to simulate the state for in your brain,
             | while you're reading the code. You don't have to wonder if
             | a variable is going to change on you, in-between when it is
             | initialized and when it is used.
             | 
             | It's safer still to use a library (e.g. urllib3) that does
             | encoding for you (allowing you to omit magic strings like
             | `"%7C"` from the logic of this function alltogther).
             | 
             | Like GP said, very handy for one-off scripts or areas of
             | your codebase where quality is "less important". I may be
             | pedantic, but I wouldn't give this a pass on code review.
        
             | [deleted]
        
             | [deleted]
        
           | lijogdfljk wrote:
           | How so? I'd prefer a proper structured library, is that what
           | you mean? If so, the Copilot code actually seems not dodgy -
           | because the author _started_ with `base = ...` , indicating
           | that they were string formatting the params.
           | 
           | Or did you mean something else?
        
         | janto wrote:
         | For me APIs are actually one of the places it performs the
         | worst. Copilot is like having an inexperienced yet annoyingly
         | optimistic pair programmer. The code it generates appears
         | conceivable in some hypothetical universe. No guarantee it's
         | this one though.
         | 
         | Remember it doesn't actually know an API or how it should be
         | used: it's putting things together to look like typical code.
         | For me that has meant difficult to spot bugs like linking up
         | incorrect variables from the rest of my code.
         | 
         | I wish it could integrate the first SO answer to a generated
         | question, because I _always_ end up there anyway having to fix
         | things.
        
         | ctoth wrote:
         | The next version of Copilot will submit its answers to HN and
         | return the highest-voted comment that compiles, after stripping
         | out the well actually spurious tokens. Just look how well it
         | worked this time?
        
         | RheingoldRiver wrote:
         | btw the `mwclient` library makes querying the Wikipedia API a
         | breeze!
        
         | dec0dedab0de wrote:
         | Now we just need to train it to make a dictionary for that info
         | instead of forming a long url. But if it has to use a long url
         | to use urljoin and/or string formatting.
        
       | bluelu wrote:
       | It say on the github page that "GitHub Copilot will attempt to
       | match your code's context and style. You can edit the suggested
       | code as you choose.". Does this mean that the plugin will
       | transmit my code to github servers?
        
         | moyix wrote:
         | Yes. The machine learning model runs on GitHub's servers (it's
         | too big/expensive to run locally), so it has to submit the
         | context of what you're working on to GitHub.
        
       | premek wrote:
       | will the plugin steal my employer's code and give it to a
       | competition?
        
       | josebalius wrote:
       | Here is a demo of it with Neovim & Codespaces:
       | https://twitter.com/josebalius/status/1453413543232090118
        
       | ahupp wrote:
       | I've been using Copilot in VS Code and it's been surprisingly
       | useful. It makes suggestions pretty rarely, but when it does I
       | accept about 50% of them. Generally these are few-line functions
       | and it just gives me what I would have written after thinking
       | about it a moment.
        
       | ghoward wrote:
       | I have many thoughts about Copilot, but here are two.
       | 
       | First, as much as I don't like the idea of Copilot, it seems to
       | be good for boilerplate code. However, the fact that boilerplate
       | code exists is not because of some natural limitation of code; it
       | exists because our programming languages are subpar at making
       | good abstractions.
       | 
       | Here's an example: in Go, there is a lot of `if err == nil`
       | error-handling boilerplate. Rust decided to make a better
       | abstraction and shortened it to `?`.
       | 
       | (I could have gotten details wrong, but I think the point still
       | stands.)
       | 
       | So I think a better way to solve the problem that Copilot solves
       | is with _better programming languages_ that help us have better
       | abstractions.
       | 
       | Second, I personally think the legal justifications for Copilot
       | are dubious at best and downright deception at worst, to say
       | nothing of the ramifications of it. I wrote a whitepaper about
       | the ramifications and refuting the justifications. [1]
       | 
       | (Note: the whitepaper was written quickly, to hit a deadline, so
       | it's not the best. Intro blog post at [2].)
       | 
       | I'm also working on licenses to clarify the legal arguments
       | against Copilot. [3]
       | 
       | I also hope that one of them [4] is a better license than the
       | AGPL, without the virality and applicable to more cases.
       | 
       | Edit: Do NOT use any of those licenses yet! I have not had a
       | lawyer check and fix them. I plan to do so soon.
       | 
       | [1]: https://gavinhoward.com/uploads/copilot.pdf
       | 
       | [2]: https://gavinhoward.com/2021/10/my-whitepaper-about-
       | github-c...
       | 
       | [3]: https://yzena.com/licenses/
       | 
       | [4]: https://yzena.com/yzena-network-license/
        
       | miller_joe wrote:
       | I've been using TabNine for several years and love it. I'd be
       | interested in hearing a comparison between TabNine and GH Copilot
       | from anyone who has used both.
        
       | jimmaswell wrote:
       | How could they support these two random IDEs before Visual Studio
       | proper?
        
         | jmnicolas wrote:
         | A few months ago at work I had some suggestions in VS to allow
         | for a better intellisense with the help of AI. I think it was
         | probably this.
         | 
         | I didn't allow it since I think it implied uploading my code to
         | their servers.
        
       | lionkor wrote:
       | Good, I was getting really tired of subtly plagiarizing by hand.
        
         | chefandy wrote:
         | Yesterday, I was disgusted to see framers putting up a house
         | that clearly plagiarized the entire internal structure of my
         | own. Same joint interfaces, same structural idioms when dealing
         | with things like staircases, windows, and rafters, same
         | fasteners, same adhesives, even the building materials! Aside
         | from the most general aspects of the layout, it was exactly the
         | same right down to the inch! People have no professional
         | integrity these days.
        
           | bogwog wrote:
           | That analogy only works if you designed/architected your own
           | house.
        
             | sterlind wrote:
             | copilot's won't suggest anything worth calling plagiarism,
             | just mundane plumbing and maybe textbook algorithm
             | implementations. have you seen it generate anything more
             | glorified than StackOverflow-esque code snippets?
        
               | danuker wrote:
               | It's dicey according to the GPL FAQ [1]. It goes against
               | what GPL authors want: their work being used in
               | proprietary projects.
               | 
               | This could have been prevented very simply: GitHub
               | avoiding training Copilot on GPL code.
               | 
               | What they can still do is offer a new model excluding GPL
               | code for people who care about it.
               | 
               | [1] - https://www.gnu.org/licenses/gpl-
               | faq.en.html#SourceCodeInDoc...
        
               | smitop wrote:
               | They would also have to exclude virtually _all_ code that
               | isn 't public domain, too. MIT and Apache-2.0 and BSD all
               | require that the copyright notice and license text is
               | preserved in downstream use.
        
             | aziaziazi wrote:
             | It may work if you design/architect houses for clients.
        
             | chefandy wrote:
             | Plagiarism can only be spotted by people who wrote the
             | original work?
        
         | standardUser wrote:
         | I just call that "programming".
        
         | fouc wrote:
         | As the saying goes, "A good programmer copies, but a great
         | programmer steals outright."
        
       | snvzz wrote:
       | Still no way to opt your code out of this.
       | 
       | Disgusting.
        
         | sergiomattei wrote:
         | Don't open source your code then.
        
           | bogwog wrote:
           | Microsoft: 1 Open Source: 0
        
             | drran wrote:
             | Find a torrent with sources of M$ Windows and copilot them:
             | M$: 1, Open Source: 1.
        
           | kadoban wrote:
           | Open Source has licenses that must be followed. Copilot
           | strips those off and ignores them.
        
             | IshKebab wrote:
             | What if I - a human - read your code, learn from it, and
             | then use that knowledge to write my own code? Am I
             | stripping your license off and ignoring it?
             | 
             | Clearly it's not as simple as you imagine.
        
               | kadoban wrote:
               | It depends how much you "learn from it" and then write
               | your own code vs how much you copy/paste.
               | 
               | Copilot is pretty commonly just copy/pasting. You can get
               | it to spit out exact copied code, including comments.
               | 
               | p.s. "it's not as simple as you imagine" is pretty
               | dickish. Why include that?
        
               | ghoward wrote:
               | It is. Machines are running algorithms, which, by
               | definition, are not creative.
               | 
               | Of course, people may argue that people are not creative,
               | but considering that for a recent court case, it was
               | decided that AI cannot be an inventor, it _does_ matter
               | to _that_ court at least.
        
         | rectang wrote:
         | Legally, it needs to be _opt-in_ in order to protect downstream
         | consumers of code written by Copilot.
         | 
         | Copilot sometimes reproduces code verbatim. You can't use open
         | source code except under the terms of the license. Authors
         | whose code may be reproduced by Copilot need to grant a license
         | to downstream consumers, and republishers of Copilot-generated
         | code need to adhere to the terms of that license.
         | 
         | Copilot is inserting ticking time-bombs into its users'
         | codebases.
        
           | miohtama wrote:
           | Only if the threshold of originality is passed. I feel many
           | of Copilot snippets are so tiny that this threshold is not
           | reached. But not a judge here.
           | 
           | https://en.wikipedia.org/wiki/Threshold_of_originality
        
             | rectang wrote:
             | The threshold of originality is clearly being reached some
             | of the time:
             | 
             | > Copilot regurgitating Quake code, including sweary
             | comments (twitter.com/mitsuhiko)
             | 
             | https://news.ycombinator.com/item?id=27710287
        
             | dragonwriter wrote:
             | If it is relevant at all, the threshold of originality
             | applies to the allegedly-copyrighted source consumed by
             | Copilot (as regards bare infringement, not _wilfull_
             | infringement). If _that_ doesn 't meet the threshold, it is
             | not copyrightable. If it is, unauthorized copying not
             | within a copyright exception (e.g., fair use) is
             | infringement.
             | 
             | I can't see any case where originality of the _snippet
             | presented by Copilit_ matters (if Copilot were a person, it
             | would matter to determining if the snippet _on its own_ was
             | copyrightable by Copilot, but still wouldn 't be relevant
             | to whether to original copyright was violated.)
        
           | meetups323 wrote:
           | Nope. Copilot _users_ are inserting  "ticking time-bombs"
           | into _their own_ codebases.
           | 
           | The buck stops with the user, when they use code from _any
           | source at all_ , whether it's their head, the internet, some
           | internal library, lecture notes, a coworker, a random dude of
           | the street, or who knows what else, it _their own
           | responsibility_ to ensure the code they 're using has been
           | released under a license they can use. They don't get to go
           | back and point fingers just because they didn't do their own
           | due-diligence.
           | 
           | The exception would be if a vendor provides code under a
           | legal contract providing liability and an agreed license,
           | that has not happened in this case so there's no reason to
           | expect any legal protections.
        
             | rectang wrote:
             | We agree that downstream users who redistribute copyrighted
             | code regurgitated by Copilot are in violation of copyright.
             | 
             | It doesn't seem to me as though the distinction between
             | "Copilot reproduced the code and the engineer
             | copy/pasted/saved it" versus "Copilot inserted the code" is
             | crucial.
             | 
             | There's a separate question about Microsoft's own
             | liability. When Copilot reproduces open source code without
             | adhering to the terms of the license, that's redistribution
             | and thus copyright infringement. A copyright owner might
             | not be able to get substantial monetary damages, but they
             | ought to be able to get a copyright injunction.
             | 
             | I wonder what happens to Copilot should a Github user
             | secure injunctive relief, forcing Microsoft to exclude
             | their code from Copilot.
        
               | meetups323 wrote:
               | > It doesn't seem to me as though the distinction between
               | "Copilot reproduced the code and the engineer
               | copy/pasted/saved it" versus "Copilot inserted the code"
               | is crucial.
               | 
               | Yes, the only thing that matters is who authorized the
               | code to be published, which is never Copilot (an
               | automated system that takes tickets, has copilot craft
               | patches from them, then publishes them with no human
               | review would be a) very cool and b) an incomprehensibly
               | terrible idea; but even then there is still a human
               | authorizing the code to be published, just residing a
               | level of abstraction removed from the process itself)
        
         | baby wrote:
         | This reaction is why we can't have nice things :( after trying
         | copilot I'm convinced that this kind of feature is going to
         | bring the world to a next phase. Open source was part 1, this
         | is part 2.
        
           | snvzz wrote:
           | I understand a lot of people are ok with this and that's
           | fine.
           | 
           | There's still no good reason I cannot opt my code out of it.
        
             | rectang wrote:
             | I would seriously consider opting in so long as my
             | authorship was acknowledged and my license was upheld. FWIW
             | I tend to release things under permissive licenses
             | (although I think if I was copyleft-inclined I might feel
             | the same way: just match my license).
             | 
             | But stripping my copyright, copying my work _without_ my
             | permission and presenting it to users on terms I did not
             | agree to, all of that is unacceptable.
        
           | boredtofears wrote:
           | I legit cant tell if the github fanboyism is this real or if
           | this is just a typical product launch astroturfed comment
           | thread
        
         | belter wrote:
         | A friend of a friend, told me he is furiously adding code to
         | Github, with subtle security bugs. He can't wait for it to show
         | up in the proper places...Courtesy of Copilot ;-)
        
           | threatofrain wrote:
           | But people already naturally exhibit subtle bugs in the
           | course of ordinary programming. Your acquaintance will just
           | be another drop in the ocean.
        
             | jmnicolas wrote:
             | Except he knows what to look for and how to exploit it.
             | Could lead to easy bug bounty money.
        
               | benburleson wrote:
               | Seems like an exceptionally risky attempt to make money
               | using programming skills. Why not directly add value to
               | the software world?
        
               | jmnicolas wrote:
               | I'm not endorsing it. FWIW I won't use Copilot and won't
               | add (voluntarily that is ;) bugs in my code to sabotage
               | it.
        
           | jeroenhd wrote:
           | I wonder if that could be a nice money maker. Introduce a lot
           | of generic functions with common names, add security bugs.
           | Maybe add a README entry telling people to not trust the code
           | because you're using it to demonstrate what insecure code
           | looks like, and then wait for some big company with a bug
           | bounty to introduce it to their code base. License your code
           | proprietary of AGPL to make sure the company is the one who
           | gets in trouble if they admit the code comes from you.
           | 
           | With enough nearly-working functions spread across multiple
           | projects in every language known to man, you could
           | practically automate your way into a steady stream of hacker
           | bounties.
           | 
           | People would probably call it unethical, but if Copilot's
           | massive IP violations are okay then who cares. As long as the
           | project's security flaws are recognisable by humans it
           | doesn't matter IMO.
        
             | [deleted]
        
           | moyix wrote:
           | This attack has been studied!
           | 
           | https://arxiv.org/abs/2007.02220
           | 
           | Although our own work shows Copilot is pretty good at adding
           | security flaws on its own:
           | 
           | https://arxiv.org/abs/2108.09293
        
         | WillPostForFood wrote:
         | Yes there is, make your repo private.
        
       | unpipable wrote:
       | Copilot has been super fun! Here is a small website I generated
       | via only comments - in the HTML and JS. The CSS needed a bit more
       | massaging but it also auto generated.
       | 
       | https://spencer0.github.io/copilot-tests/
        
         | lelandfe wrote:
         | <!-- Details on the fall of rome -->                  <p>The
         | fall of rome was a great event for the people of rome.
        
           | leodriesch wrote:
           | AI comedy gold
        
       | petepete wrote:
       | Wait, they got Tim Pope on the case for the Neovim plugin?
       | Amazing, I'm positive it'll work beautifully.
       | 
       | For those who don't know, he's essentially the godfather of vim
       | plugins - I even have an entire 'tpope section' in my init.vim
        
         | fouc wrote:
         | Haha, I mean, tpope has been working on vim plugins since
         | 2005/2006 from my IRC memories, but there were vim plugins
         | before that too.
        
       | parhamn wrote:
       | I tried it on IntelliJ recently. The examples I tested blew my
       | mind. Yet, I think there are two things that need to improve to
       | get me to use it regularly (it will get there!):
       | 
       | - less than perfect import/types/var suggestions that LSP in
       | typed languages would've made perfect suggestions for (e.g named
       | import in go would use the package name instead).
       | 
       | - latency feels a bit high and my thoughts would get interrupted
       | waiting for a suggestion to come.
       | 
       | For the former, I wonder hard feasible it would be to give
       | structured suggestions to the LSPs that it would swap for correct
       | var names and imports and such. Or test each suggestion with the
       | LSP for error counts and offer the least erroring suggestion.
        
         | sillysaurusx wrote:
         | > latency feels a bit high and my thoughts would get
         | interrupted waiting for a suggestion to come.
         | 
         | How high? That's interesting.
        
       | truly wrote:
       | This will lead IMO to an interesting problem, although the
       | technology and the idea is certainly cool.
       | 
       | Currently many programmers do not take the time to really
       | understand how/why their code works -- programming without
       | understanding 1.0. Essentially make library calls and fuzz around
       | with the arguments until it appears to work. [Not
       | wanting/suggesting to go back to the world before libraries/code
       | completion, just stating where we are now.]
       | 
       | This will enable programming without understanding 2.0 -- not
       | only will you not know how/why a particular function call works,
       | you will now fail to understand why you want a sequence of
       | functions in a particular order.
        
       | kesslern wrote:
       | Is anyone able to install the plugin yet? I'm not seeing it when
       | I search the plugin marketplace in Rider.
        
         | thrower123 wrote:
         | Saw a review the JetBrains page that Rider isn't officially
         | supported, but they got it to work anyway, although they don't
         | say how
         | 
         | https://plugins.jetbrains.com/plugin/17718-github-copilot/re...
        
           | kesslern wrote:
           | Looks like I can download it from the plugin page and
           | manually install the zip file. Thanks!
           | 
           | https://plugins.jetbrains.com/plugin/17718-github-
           | copilot/ve...
           | 
           | EDIT: Hmm, it installed but it refuses to run.
           | 
           | EDIT2: Looks like you can force the plugin to work by editing
           | the plugin.xml contained in github-copilot-intellij-1.0.1.jar
           | within the plugin archive. Just remove the line that includes
           | Rider as incompatible. The same should work for CLion.
        
       | ausbah wrote:
       | the fact that most of Co-Pilot's usefulness comes from repeating
       | common snippets of code makes me think there has to be a much
       | simpler way to reduce the boilerplate of "common tasks"
        
         | AnthonBerg wrote:
         | In my opinion, dependent type systems are that way.
         | 
         | A dependent type is a type that depends on a value. What
         | something is depends on something else; What something _is_ is
         | derived from something else - with computation. What dependent
         | types _are_ are _calculations of type structure_.
         | 
         | Unbounded, this becomes intractable like all unbounded
         | computational expressivity. So that's what modern dependent
         | type systems need to solve--and they do. There exist formal
         | results that frame the computational expressivity of dependent
         | type systems and make perfectly feasible and tractable the task
         | of deriving significantly complex types. Automatically.
         | 
         | The Idris language is a great example of where we're heading.
         | 
         | The reason I'm more interested in this sort of thing rather
         | than Copilot is that dependent type systems are based on
         | formally rigorous methods. You end up with formally verified
         | programs, by way of the same mechanisms that allow you to
         | derive them automatically. They're also easier to compose, for
         | the same reasons.
         | 
         | Edwin Brady's Idris demonstratons on Youtube show a bit of
         | what's possible. In one, the compiler automatically writes a
         | formally-correct type-directed matrix multiplication function.
         | In another, run-length encoding and decoding functions are
         | generated from a type definition.
         | 
         | The book Type-Driven Development with Idris is a great read.
         | Mind-expanding.
         | 
         | Programming is automation. The automation of automation is...
         | dependent types.
        
           | api wrote:
           | Formally rigorous methods have almost always lost out in the
           | market against slop like JavaScript.
           | 
           | I think the reasons are completely pragmatic and boil down to
           | two things.
           | 
           | The first is that rigorous systems usually take longer to
           | build and meanwhile the slop ships first and gains mindshare.
           | 
           | The second is that rigorous systems are usually built by
           | academics or specialists in some specific vertical and lack
           | the easy installation, easy onboarding, and integration with
           | other platforms that more pragmatic sloppy platforms tend to
           | prioritize first. Those things get prioritized first because
           | sloppy languages and systems tend to evolve from makeshift
           | "shop jigs" used to get stuff done, not from research.
        
         | IshKebab wrote:
         | Why? I haven't used it but it seems like the only reason it is
         | good at repeating common snippets of code is because it is so
         | clever. I don't think a simpler solution would be possible
         | because it isn't _exactly_ repeating code (except in contrived
         | examples). It 's adapting it to the context.
        
         | cultofmetatron wrote:
         | common lisp's macros are the most powerful abstraction. that
         | said, its a VERY sharp tool
        
       | tdiggity wrote:
       | Anyone know how long the waitlist is?
        
         | mikeywazowski wrote:
         | I joined the waitlist at the end of June and got an invite
         | yesterday. So 4 months?
         | 
         | However, I imagine a lot of people signed up just before me, so
         | I was probably at the end of a long list. The wait wouldn't be
         | this long if you sign up today, I reckon. I'm just guessing
         | though.
        
           | giuseppeciuni wrote:
           | I signed up copilot on june... still received nothing
           | unfortunately!!!
        
       | dgdosen wrote:
       | I just tried installing for neovim - but got an error running
       | vim-plug's `:PlugInstall`
       | 
       | I added an issue.
       | https://github.com/github/feedback/discussions/6847
       | 
       | Anyone else install in neovim?
        
         | urmish wrote:
         | The copilot docs say you need a prerelease version of neovim.
         | Maybe that's the reason? homebrew might get you 0.5.2. The
         | nigthly gives you 0.6.xx
        
       | Thorentis wrote:
       | In my opinion, Copilot is going to become one of those "perceived
       | authorities" that have just enough legitimacy to be blindly
       | trusted by the inexperienced, but not enough to actually be
       | useful to the experts.
       | 
       | This is like social media (or even the Internet as a whole) and
       | say, our parents' generation. Countless times I receive links to
       | Facebook posts or random articles that somebody thinks must be
       | true, simply because The Oracle (i.e. their smartphone) showed it
       | to them. For much of the older generation, smartphones are these
       | all-knowing repositories of wisdom, and anything they come across
       | while using them is likely to be true. This is why I think
       | misinformation has spread so easily.
       | 
       | I imagine Copilot going down a similar path. The next generation
       | of programmers who didn't grow up with knowing how to sift
       | through API docs or SO answers for the right bit of code, or
       | who's attention spans have been fizzled away, will love the idea
       | of Copilot. Instant gratification in the firm of a tool that can
       | seemingly do your work for you. This will be dire consequences
       | for their ability to code and think for themselves.
        
       | shanebrunette wrote:
       | Emacs please
        
         | da39a3ee wrote:
         | It does seem a bit controversial to develop a relationship with
         | neovim without approaching emacs. I wonder if they even asked
         | on emacs-devel, I'm sure they'll have got a friendly response
         | ...oh hang on...
        
       | synergy20 wrote:
       | I hope it will work for the 'standard' vim, so far it reports
       | 'vim version too old', while I'm using the newest vim.
       | 
       | it's said because vim lacks 'virtualtext' feature.
        
       | Spinnaker_ wrote:
       | How well can copilot write unit tests? This seems like an area
       | where it could be really useful and actually improve software
       | development practices.
        
         | kqr wrote:
         | If you're looking for test case generation there are already
         | mature tools for that. I doubt anything generic could improve
         | on those.
        
           | ericlewis wrote:
           | any suggestions for said tools?
        
             | svieira wrote:
             | QuickcCheck-type tools (generators for tests that know
             | about the edge cases of a domain - e. g. for the domain of
             | numbers considering things like 0, the infinities, various
             | almost-and-just-over powers of two, NaN and mantissas for
             | floats, etc.):
             | 
             | * QuickCheck:
             | https://hackage.haskell.org/package/QuickCheck
             | 
             | * Hypothesis: https://hypothesis.readthedocs.io/en/latest/
             | 
             | * JUnit QuickCheck: https://github.com/pholser/junit-
             | quickcheck
             | 
             | Fuzz testing tools (tools which mutate the inputs to a
             | program in order to find interesting / failing states in
             | that program). Generally paired with code coverage:
             | 
             | * American Fuzzy Lop (AFL): https://github.com/google/AFL
             | 
             | * JQF: https://github.com/rohanpadhye/JQF
             | 
             | Mutation / Fault based test tools (review your existing
             | unit coverage and try to introduce changes to your
             | _production_ code that none of your tests catch)
             | 
             | * PITest: https://pitest.org/
        
             | prionassembly wrote:
             | Hypothesis for Python.
             | 
             | Schemathesis builds on Hypothesis and generates tests from
             | OpenAPI specs.
        
         | sixstringtheory wrote:
         | I think replies mentioning automatic unit test generation miss
         | the point.
         | 
         | To me, the value of copilot helping to write tests is that we,
         | the engineers, come up with the test cases, and copilot helps
         | write the code for that case.
         | 
         | I think humans will still be more imaginative in the test cases
         | they can dream up (although I've never used an automatic
         | generator, maybe they're better than I think), but almost all
         | test code is boilerplate, either in the setup or the
         | assertions.
         | 
         | If I don't have to write that repetitious, yet slightly
         | different boilerplate for each test case, that frees me up to
         | design other interesting test cases (as opposed to getting
         | tired of the activity by the time I cover the happy path) or
         | move on to the next bug/feature work.
        
         | manquer wrote:
         | Writing tests for the sake of coverage is already practically
         | useless which is what a lot of orgs do, This could maybe
         | generate such tests. However it doesn't materially impact
         | quality now, so not much difference if automated.
         | 
         | One of the main value props for writing meaningful unit tests,
         | is it helps the developer think differently about the code he
         | is writing tests for, and that improves quality of the code
         | composition.
        
           | Graffur wrote:
           | Why is that useless? Codebases I have worked on that had high
           | code coverage requirements had very little bugs.
           | 
           | * It promotes actually looking at the code before considering
           | it done
           | 
           | * It promotes refactoring
           | 
           | * It helps to prevent breaking changes for stuff that wasn't
           | supposed to change
        
             | manquer wrote:
             | The example i usually give [1] in javascript is say you
             | have function                   (x,y) => x + y
             | 
             | Orgs targeting code coverage write a test for 1,2 => 3 and
             | get 100% coverage and then _stop_ as there is no incentive
             | to go further. They don 't write tests for say
             | (1,null)        (null,null)        ('x',1)         (NaN,
             | Infinity)
             | 
             | and so on.. these additional tests will improve coverage of
             | scenarios and code coverage will not move.
             | 
             | I have seen projects where a test will have sequence of
             | steps which trigger the code but the assertion is
             | effectively true === true, or they will replicate the same
             | function in the test instead of generating proper mock data
             | or myriad different absurd testing approaches. This comes
             | from twin pressure of showing coverage and having tests
             | pass.
             | 
             | Coverage is also a challenge in code which uses AI/ML
             | libraries or that use third party services. These really
             | need statistical testing with large volume of diverse well
             | maintained samples and results need statistical analysis
             | for error rates not different from how manufacturing does
             | it, I don't see that often. For code using face detection
             | for example a single face getting detected or not is hardly
             | an adequate test.
             | 
             | Finally, it is easier to improve coverage by testing
             | simpler code than improve coverage/ refactor a function
             | which has say 10 nested branches, so it is not uncommon to
             | see 90% coverage and 10% of the most used / most error
             | prone code poorly or not tested at all.
             | 
             | There are some methods to address these like mutation
             | testing, do retros for failure of tests to capture
             | production bugs, it is not easy to measure and coverage
             | driven orgs will not see their metrics moving by doing
             | these.
             | 
             | Well written test suites will also have good coverage, but
             | not necessarily other way around. Developers who care and
             | understand what they are doing and why they are doing it,
             | will use coverage as only the _first step_ to see where
             | there are gaps in their tests.
             | 
             | Tests are also code that need peer reviewed and maintained,
             | if the tests depend on implementation and constantly break
             | or contains improper mocks or assert poorly. A lot of not
             | well written tests is hindrance to development than aid it.
             | 
             | [1] Yes, most of these are not applicable in a strongly
             | typed language, but it is far easier as a illustration .
        
               | Graffur wrote:
               | So one argument against code coverage requirements is
               | that poor engineers won't test correctly. Without the
               | code coverage requirements you're in the same situation.
        
               | crysin wrote:
               | Problem is with 100% code coverage of badly guarded /
               | implemented code you'll have a fall sense of security if
               | you're just looking at coverage as the metric of quality.
               | Anytime I've worked with a company who had a required
               | code coverage percent, they never actually cared what the
               | code being covered looked like only that it was covered
               | in some test.
        
               | jmnicolas wrote:
               | I don't think there's Infinity in my language, what do
               | you use it for except maths?
        
               | eloisius wrote:
               | If you are seeking a minimum value within some
               | complicated iteration, it's easier to start your min
               | accumulator as Inf than null with extra null checks.
        
               | dpryden wrote:
               | If you are using floating point numbers implemented in
               | hardware, then infinity is absolutely a valid value and
               | one that your code will encounter. This is true
               | regardless of language, as long as the language requires
               | or allows IEEE-754 semantics.
               | 
               | I am not aware of any language (outside of intentionally-
               | minimalist esolangs) that doesn't support floating point
               | numbers. In some languages (like JavaScript) that's the
               | only kind of number you get.
        
             | matsemann wrote:
             | I feel the opposite of codebases where having high coverage
             | has been a priority:
             | 
             | * The tests doesn't actually test functionality, edge cases
             | etc, just that things doesn't crash in a happy-path.
             | 
             | * Any changes to an implementation breaks a test
             | needlessly, because the test tests specifics of the
             | implementation, not correctness. Thus it makes refactoring
             | actually harder, since your test said you broke something,
             | but you probably didn't, and now you have to double the
             | work of writing a new test.
             | 
             | * In codebases for dynamic languages, most of what these
             | tests end up catching is stuff a compiler would catch in a
             | statically typed language.
        
               | drran wrote:
               | > The tests doesn't actually test functionality, edge
               | cases etc, just that things doesn't crash in a happy-
               | path.
               | 
               | This is low coverage.
               | 
               | > Any changes to an implementation breaks a test
               | needlessly, because the test tests specifics of the
               | implementation, not correctness.
               | 
               | This is bad design.
               | 
               | > In codebases for dynamic languages, most of what these
               | tests end up catching is stuff a compiler would catch in
               | a statically typed language.
               | 
               | So they are not useless.
        
               | matsemann wrote:
               | > This is low coverage.
               | 
               | No, as a sibling comment to mine shows, it's actually
               | easy to make 100% coverage with bad tests, since one
               | doesn't challenge the implementation to handle edge
               | cases.
        
           | xtracto wrote:
           | I've found that for large codebases of dynamic typed
           | interpreted languages Test Coverage is very useful at
           | preventing typos or subtle bugs that wouldn't be caught
           | otherwise.
        
         | golergka wrote:
         | On my current pet project, it has written almost all of the
         | tests here: https://github.com/golergka/rs-
         | lox/blob/master/src/compiler.... ad here:
         | https://github.com/golergka/rs-lox/blob/master/src/scanner.r...
         | (albeit not the screwed indentation) completely by itself. I
         | didn't even have to write the function names, just a few macros
         | to help it along and a couple of examples to teach it to use
         | it.
        
         | francilien wrote:
         | Here is one: https://www.ponicode.com/
        
       | mooreds wrote:
       | Note that you have to have a copilot account and GA is still
       | waitlisted.
       | 
       | I filed a PR because it was a bit frustrating to go through the
       | entire setup and then find out I needed to be granted access.
       | 
       | https://github.com/github/copilot.vim/pull/2
        
       | neilv wrote:
       | A lot of the examples people are giving of code Copilot filled in
       | for them sound like what would be called plagiarism, and probably
       | also copyright infringement.
       | 
       | Which I think was fairly predictable.
       | 
       | What wasn't predictable was that someone would ship this Copilot
       | anyway, consequently exposing their company and their users'
       | companies to liability.
       | 
       | Imagine if you hired an intern who was copy&pasting bits of GPL'd
       | code throughout your system. This would not be a good job, it
       | would be something that needed immediate attention from legal
       | counsel and others, and mean reverting every commit the intern
       | from heck made if you couldn't prove convincingly it wasn't
       | tainted. Especially if you're a startup, who needs to assure
       | investor due diligence in good faith that you actually own the
       | IP.
        
         | bastardoperator wrote:
         | Wait til stackoverflow sues everyone into oblivion!
         | 
         | Letting your intern blindly commit to your code base seems like
         | the bigger issue here. The entire purpose of an internship is
         | to learn and to be guided by professionals, not to be treated
         | as a cheap laborer. You don't hire interns, you train interns.
         | 
         | Have you used copilot or are you speculating?
        
           | neilv wrote:
           | If the analogy works better, imagine that you hired _a
           | developer_ who copy &pasted GPL'd code throughout your
           | system.
           | 
           | (And people couldn't tell in code reviews, nor on other
           | occasions to see the code, since it's not normal to recognize
           | GPL'd code on sight; everyone just assumed the developer was
           | productive.)
        
             | marginalia_nu wrote:
             | I think people should be a lot more concerned about the
             | possibility of accidentally deriving your work on something
             | with an AGPL license.
        
               | neilv wrote:
               | If the analogy works better, imagine that you hired a
               | developer who copy&pasted _whatever-license-your-company-
               | is-most-afraid-of-and-is-highly-likely_ code throughout
               | your system. :)
        
           | crispyalmond wrote:
           | >The entire purpose of an internship is to learn and to be
           | guided by professionals, not to be treated as a cheap
           | laborer. You don't hire interns, you train interns.
           | 
           | This has not been my experience. I was dropped into the
           | developer team and expected to know the entire tech stack and
           | was not trained by anyone from the company at any point. Have
           | I been bamboozled??
        
       | deorder wrote:
       | I signed up for the copilot technical preview right after it was
       | announced a few months ago, but I haven't gotten an invite yet
       | while all my friends who signed up later did (I feel a bit left
       | out). Is there any way to get an invite sooner? What am I doing
       | wrong?
        
         | parafactual wrote:
         | I said I use VSCode all the time, which I suspect is the reason
         | I got access. (I never use VSCode.)
        
           | deorder wrote:
           | I actually do use VSCode (in addition to Vi and Vim) and I
           | believe I indicated that.
        
             | Kiro wrote:
             | Same and I also signed up right away. Still no invite.
        
           | dragonwriter wrote:
           | I said I use VSCode all the time and just got access, having
           | signed up at the very beginning (I, in fact, use VSCode all
           | the time.)
        
         | meijer wrote:
         | Same for me.
        
         | unpipable wrote:
         | I singed up in the first week and got my invite on Monday. I
         | don't have anything "linked" with my github via vscode or
         | anything so I doubt IDE or program usage was a deciding factor.
         | I do regularly commit small stuff.
        
       ___________________________________________________________________
       (page generated 2021-10-27 23:00 UTC)