It's great that browsers can achieve more functionality previously exclusive to native applications, but anytime a code editor written in JavaScript to be run in a browser is announced, I wonder one thing: why don't we try to come up with a client/server protocol that would allow you to use your local editor, which is already fully customized to your needs? Is the idea that the files being edited are remote and therefore the only thing that would make sense is improving extensions like "It' All Text!" or wasavi?
It ought to be enough if one can trigger opening a buffer in a local editor, which accesses a local webserver provided by your browser, backed by the textarea, and having a means of updating the textarea on save via a POST issued from, say, Emacs to Firefox's textarea-httpd.
Vision. Vscode folks have a great vision for an open source js based editor. They aren't an add on like Google cloud shell, it's built on ground up to be a developers favorite light weight editor.
I'm glad language server protocol is getting more adoption.
At GitLab we're exploring an idea that may turn the tide. I agree that online editors don't seem the way forward. The problems are:
- People have wildly different preferences (TextMate, Sublime, Atom, VScode, vim, emacs, etc.)
- It is really hard to get an online IDE right. The most advanced version is probably Eclipse Che and they have an API to do autosuggest by looking in all the files.
"It ought to be enough if one can trigger opening a buffer in a local editor, which accesses a local webserver provided by your browser, backed by the textarea, and having a means of updating the textarea on save via a POST issued from, say, Emacs to Firefox's textarea-httpd."
I think the better approach is to sync the entire directory so you can do global search and replace and autosuggest.
My idea of how to make the IDE sync work:
1. You click on an icon in GitLab, it is next to where we now show the url for the terminal.
2. The icon opens a url, with a schema specific for our solution (although we should open source the protocol so others can reuse it). In the url is the following information: server and project location, pod and container to connect to, a token to identify the user.
3. Beforehand the user has installed a local client that is registered to handle this type of schema.
4. The filesystem of the container is synched to the users machine by the local client (I propose to a default directory system specific to the local client).
5. The local client also opens up the favorite editor of the user (make this configurable with smart default by seeing what editors are installed via which).
6. The local editor talks to an endpoint of GitLab, similar to how our terminal works.
Hi - I am the project lead for Eclipse Che. While I'd love to take credit for a special API for handling intellisense with languages, we didn't do it alone. We had a proprietary API that we built over a number of years that distributed intellisense using JSON. But when we saw Microsoft's VS Code doing something very similar but for local services, we consolidated into a single "Language Server Protocol" that we announced with Microsoft and RedHat earlier this year. This allows any IDE to plugin to any language. Languages have to provide their own language server implementation that matches the JSON protocol.
In Eclipse Che, we package these language servers for distribution into dynamically deployed agents. so when you start a workspace, your workspace can add a "PHP agent", for example and then we will deploy the language server and then hook up the browser IDE to the language server. To the end user, it feels seamless, but we actually install the language server for them. There are something like 2 dozen languages being built for language servers now. Rust just announced theirs and others are working on C/C++/RAML - even Emacs is getting one. RedHat is working on an advanced Java version and we use CSharp and eventually typescript from Microsoft. We want total interop with VS Code. Eventually Eclipse Orion (an editor) and Eclipse IDE (desktop IDE) will add support.
With Eclipse Che, we provide a simple CLI that lets you live sync your workspace to your desktop IDE. You just "che mount" and we use a fuse-based file system with unison sync to keep the hosted workspaces synchronized with the desktop. You can then use your local IDE and still have your workspaces entirely in the cloud.
These language servers must have access to the project file system, and we are handling that by either embedding the language server into the same container as the workspace, but since we now support compose workspaces where a workspace can be many containers, we are moving all of the language servers to run as separately deployed agent containers. When a user requests a language intellisense, we'll deploy for that workspace an agent container which is volume mounted to the projects in the workspace containers, so that the workspace can have the utilties needed.
I guess that most people want to launch a browser and start to work. Installing, launching another application is a burden and if you want to use it, why do you need a browser at all? Just do your work locally.
I use 3 different computers regularly, two tablets and occasionally a phone.
I used to try to keep environments synced across them all. That was fun during the 1990s, but I'm over it now.
Now I do as much work as possible in Jupyter notebooks. They suck on tablets, but I never, ever have to worry about having the tools installed anymore.
I can't see myself using this regularly, but I can see the value for many people. I can definitely see some value in being able to try stuff out from the browser.
Honestly, having to setup and configure your environment and tools is tedious. When you're unfamiliar with the ecosystem, it can take you pretty long to get everything up and running. I think this is more approachable for the average person.
"having to setup and configure your environment and tools is tedious"
has never really been a problem for me. Between dotfiles, bookmark backups, and a few choice CLI commands, I can get a *nix/OSX development environment up in under an hour (including downloading and compiling non-standard tools).
I can see how working for Google, there is no issue using their cloud infrastructure... For other companies I don't see the benefit esp since Google is an enormous data broker to the US government and security infrastructure. Microsoft used a similar, yet relatively benign tactic, of copying works created in their dev environment and then pushing out the competition simply through free or cheaper prices.
It just can't be ignored that promising or lucrative businesses, workflows, models using SV infrastructure provided by Google et al, will just be passed off to those passing through the revolving door as "rewards", etc.
Google Drive (the web app) does something similar to this (at a high level anyway). You can open a file from the Drive website in Photoshop, Word, etc and make changes with your desktop software and when you hit save it is actually saving the cloud copy. So the file stays in the cloud but you can use any local software you like or need to be productive.
I believe this uses a Chrome extension at the moment but extensions are also web based for the most part so the idea is solid.
I agree.
Eclipse Che seems to be going the right direction with this one. What I've tried so far looks really good even considering it's not around for that long. I Also like there just using Docker for it, so that makes it somewhat more 'standard'
You can achieve this with version control systems, I do it myself with RStudio web/Jupyter and the git integration. When i want to do something locally i just pull the repository and go at it.
"Code" but doesn't mention programming languages they support. I assume it's Java, PHP, Python and Go, since they are all officially supported (in Google App Engine).
In case Google Cloud engineer is here: What about debugger support for other JVM languages?
I already did in response to @singham's rather standoff-ish reply (inconsistent typing rules in the data store across APIs, oftentimes with no way to override).
That is very much a "Big Company" problem though. At Google, you have one team doing the web UI, one team doing the data store backend, one team doing the Python API, one team doing the GoLang API.
These teams may (and probably will) disagree about the best way to handle types, and they won't collaborate (due to politics and differences of opinions) about making sure they are consistent. Given that cross-team communication is often poor, there won't even be any "forcing function" to make sure that they are consistent, and so, by Murphy's Law, they won't be.
Given that this was many months ago since I switched to Digital Ocean, here are some of my grievances (my memory is fuzzy so I'll give you a little more than 10):
- Switching accounts on anything Google is still a nightmare
- The console doesn't preserve scroll position as new items come in
- Asks every time to try the new beta console instead of remembering (which brings the page load count up to three separate pages, just to navigate to the console home page)
- Very often gets stuck on the three dots loading screen forever
- Upgrading to Google for Work Support took several hours of time after I paid to give me access to the support web page -- after I paid, it still said I needed to upgrade to access that page for several hours delay (meanwhile users could not access my site due to 502 errors, it was down, and I had to beg the _billing support_ to help redirect my support request to the regular support team, even though I already paid -- later on, Google admitted fault to both the delay and the downtime)
- 5xx error codes do not show up in the Developer Console logs (which meant I could only tell that my users were getting these 502s from before was actually issuing test requests myself, there was no way for me to know even remotely how many of my individual users were impacted/affected)
- Increasing daily budget/quotas is all over the place (billing page is buried), no warnings, they just pull the plug
- Blocked in China
- StackDriver monitoring requires (yet another) Google account auth
- Logs are thrown out right away (not preserved over a long enough period)
- No easy way to search and filter the logs/console
- Too many dashboards
- The menu items "Datastore" and "Storage" are poorly named and easily confused for two very separate concepts -- and then there is a "SQL" menu item that is separate from the "SQL" within the "Data store"
- No input validation when editing individual "datastore" items
- StackDriver completely replaced the old monitoring functionality (shudders)
- URL fetching in Python using requests still doesn't work
- If your credit card expires, there's a warning triangle icon in the dashboard UI, but going to the billing page does not show any errors
And the biggest headache of all:
- Per-row duck typing on data store when entering data into web UI (enter a 0 in one row and a 0.4 in the other, and then one is automatically inferred to have type int, the other type float, without the user having ANY say in the matter); but then per-column strict typing in the Python API -- if you try to grab the 0 as a float value, it crashes and throws an exception so ONE row in a column you intended to be floats can crash because it misses a decimal place (the rest are okay though, so in practice, you'll have one "special user" who always crashes, but then everyone else using your app is okay)
Here's the kicker though: Entering a 0.0 in the web UI gets rounded and "coerced" to an int so you CAN'T even provide a float value in the web UI that was a whole number (no way to say, I really want this 4.0 to be a float -- they literally don't let you do this at all; instead, they round it and call it an int); and then, of course, Python API would crash because it's not a float, and you couldn't manually override/specify it (but you had to provide types to each column in Python land, forcing every row in a column to have the same type, even though the web UI doesn't care about types, let alone consistently enforcing the same rule that each row in a column must have the same type, ahhhh!!! and Python isn't even strongly typed so these are all artificial constraints in their very own ORM library!)
Not sure if I'm at 10 yet, it's been six months or so since I used it, so my memory is fuzzy. Then, I could've easily listed 20 more.
On the other hand, the web UI does load a lot faster now than it did six months ago, so good job with that! Before it would often take 30+ seconds to load on my San Mateo office's gigabit fiber.
I kinda like that if I spin up a new Google Compute Engine I jump into a shell just by clicking a button in the browser v.s. struggling to configure SSH public keys and wondering why I got an error on login etc.
And yet on many platforms an additional program is required for SSH, the UX is terrible on mobile devices, and you'd better hope you have your keys with you.
A browser is on literally everything by default, works on all platforms, and is more convenient for many.
I'm having trouble imagining doing serious development work on a mobile device. Even basic bugfixes would be better done with a computer tethered to a phone if the lack of wifi is an issue.
Not if port 22 is blocked and there is no ssh client and you don't have your keys. That's why the cloud console is so nice. Log in via browser for an instant shell/environment/whatever
If you're ok with using your Google account for authentication then why disable password authentication? I've only been on one public network that had port 22 blocked and ssh clients are pre-installed or available for pretty much everything now.
It's great that browsers can achieve more functionality previously exclusive to native applications, but anytime a code editor written in JavaScript to be run in a browser is announced, I wonder one thing: why don't we try to come up with a client/server protocol that would allow you to use your local editor, which is already fully customized to your needs? Is the idea that the files being edited are remote and therefore the only thing that would make sense is improving extensions like "It' All Text!" or wasavi?
It ought to be enough if one can trigger opening a buffer in a local editor, which accesses a local webserver provided by your browser, backed by the textarea, and having a means of updating the textarea on save via a POST issued from, say, Emacs to Firefox's textarea-httpd.