Developing Flutter with VSCode and WSL2 - flutter

Since I mostly develop Web, using nginx, PHP and MySQL, I have ported my WebDev-environment entirely to WSL2.
Since performance is very important, all my web-related projects reside on the WSL2-vhdx file /home/user/Projects/Web. In WSL2 I've installed all my necessary tools for a nice and neat Linux-like experience, Docker, GIT, etc.. This combined with VSCode remote integration works very well.
Now, I'm digging into building Flutter-Apps, and my Flutter-environment is installed on the Windows side. My Flutter-related projects reside on D:\Projects\Flutter which is a partition, and NOT USED in WSL2 in any way. Building Flutter-apps with flutter-windows-sdk and VSCode works neatly.
But, the problem is: Now I've my project files scattered all across my computer. Web-stuff in a WSL2-vhdx-file and Flutter-stuff on the D-partition.
Is there a way to build flutter-apps with Flutter, while having the project-files stored on a WSL2-vhdx-file, in combination with VSCode-remote and an Android-emulator?
I tried creating a test Flutter-project on the \\wsl$ network mount, which didn't work.
Moving my web-related project files to the D:\ partition of Windows is no option, since the I/O mounts in WSL2 are extremely slow.

I got it working, reliably with adb connect 192.168.xxx
For anyone interested, see my full blog post here: https://dnmc.in/2021/01/25/setting-up-flutter-natively-with-wsl2-vs-code-hot-reload/

Is there a way to build flutter-apps with Flutter, while having the project-files stored on a WSL2-vhdx-file, in combination with VSCode-remote and an Android-emulator?
I'm assuming (based on the mention of VS Code Remoting) that you want to run the extension in WSL. I haven't tried that specifically, but I have run Flutter inside WSL and also connected a VS Code Remoting session to an Android emulator in the cloud, so I would expect this to work.
You'll need to make sure you set up the Flutter SDK inside WSL (so you can run flutter commands inside WSL - it should be the Linux version of the Flutter SDK and not the Windows one if you're using the zip).
To have your emulator show up in flutter devices from inside WSL, you will likely need to run adb tcpip 5555 from the Windows side (this means you need an Android SDK in Windows) - this will tell your phone to listen on TCP port 5555. Then you'll need to run adb connect [phone ip]:5555 from inside WSL (this means you'll need an Android SDK in Linux). If all goes well, the phone should then show up in adb devices and also be picked up by the device selector in VS Code.
I tried creating a test Flutter-project on the \wsl$ network mount, which didn't work.
It's not clear what went wrong here, though my first guess would be that maybe the UNC path isn't supported - if you map a drive letter to it does it make a difference?
While this isn't an officially supported setup, feel free to raise issues in the Dart-Code repository on GitHub with any issues you have. It's not a priority, but I would like for VS Code Remoting (including WSL and Docker) to generally work for Dart and Flutter dev.

Anytime you're crossing/sharing the file-system boundary from windows to wsl you're paying a massive cost in speed/time.
With the setup you've described I'd consider trying to self-host the browser based VSCode.dev inside wsl - checkout details instructions here: https://medium.com/geekculture/3-steps-to-code-from-anywhere-45401247f479
Personally I've settled on running VSCode and docker inside a Linux VM on Windows, and have a 96% time saving in things like running up a server and watching code for changes making this setup my preferred way now.
The standardisation of devcontainer.json and being able to use github codespaces if you're away from your normal dev machine make this whole setup a pleasure to use.
see https://stackoverflow.com/a/72787362/183005 for detailed timing comparison and setup details

Related

Visual Studio Code remote access to a WSL2:ubuntu on my desktop from my macbook

've looked around and can't seem to find the answer to this - probably because the feature is pretty new.
I tried the remote WSL:ubuntu connection on my windows desktop machine to connect to my WSL2 Ubuntu running on the same machine. This is pretty much perfect as it allows access to my Nvidia GPU under linux
Is there anyway I can do the same trick from my macbook? I can connect to the windows side of the desktop using the new remote tunnel feature but I'm drawing a blank on how to do for the WSL buried in that machine. It looks like it's just using the same remote connection feature so I'm thinking it should be possible but WSL2 network is not exposed the same way you can with a VM or other machine.
The desktop has way more everything than my macbook including a nvidia GPU I want to use for some machine learning.
I can do it from the desktop itself - but it's nice to be able to use that machine from my macbook at certain times of day.
I have recently started using VSCode so I'm on the learning curve with it - it may well be that it's not possible using the new remote tunnels - or requires some messing with adding a new hyper-v bridged adapter to the WSL installation. I'm hoping against hope there's an easy solve that I've somehow missed.
I tried setting up the remote tunnel as per https://code.visualstudio.com/blogs/2022/12/07/remote-even-better but it seems to setup a server to access windows not the WSL2 service.
Thanks for any help!
I had a similar problem and found this github issue. While the developers are looking into including this feature, you currently will need to install the VSCode CLI directly in WSL. You can find the downloads here
Notes
I would recommend the x64 CLI download in the Linux section. It will download a tar.gz file which will have a file named code in it when extracted.
The tunnel will launch from wherever you place that code file, so I put mine in the ~/ (home) directory.
You can then open a tunnel using the command ./code tunnel from that location. You can replace the . with the path to the code file to open the tunnel while in a different directory, i.e. ~/code.
You can still launch a tunnel from Windows with code tunnel. (note that this command does not have ./)

develop vscode extension on remote host

I am trying to create an extension. The catch is that I am doing this on a server to which I am connected with the ssh extension.
I am using yo for the boilerplate and I follow the basic steps here to create a hello world project.
When I launch the debugger with F5, a new VS Code instance on the remote server is launched, but the extension is not installed in that instance. I am also not able to execute the command.
As side-information, this is a raspberry Pi, so its 32 bit arm.
So the question is, is this generally possible to develop extensions on a Remote Host and if so, could the issue be related to the architecture of the Pi?
I could probably delete this question, but I will answer instead, maybe one day someone has the same problem.
When running yo code, the generated manifest will mark the extension as compatible with the latest VS Code engine. This may or may not be the version that is actually installed on your system.
"engines": {
"vscode": "^1.56"
}
For this example, the version is 1.56. When I check for the installed version I see its 1.55.2 though.
$ code -v
1.55.2
3c4e3df9e89829dce27b7b5c24508306b151f30d
arm
When setting the engine in the manifest to at max the version in your system, it works as described in my question above.
Logically, if the version is too high, the extension won't be installed in any workspace.
I found this page also helpful, for the topic in general -> https://code.visualstudio.com/api/advanced-topics/remote-extensions

Integrate Visual Studio Code into Google Cloud

How can I interact with the code on my Google App Engine instance from Visual Studio Code?
You can now run Visual Studio Code from the Google Cloud Shell using
https://github.com/cdr/code-server/
It comes down to downloading code-server, starting it and using the Web Preview functionality of Google Cloud Shell to use it.
See also:
https://medium.com/#chees/how-to-run-visual-studio-code-in-google-cloud-shell-354d125d5748
You can use SSHFS to mount a remote directory on a Google Cloud Virtual Machine (VM). It is very easy to setup and use compared to VNC or FTP:
First you have to access the VM via ssh. This is actually very easy and you don't need to generate any keys yourself. Just go to the console then: Compute Engine > VM Instances, then locate your instance and click on the SSH button at the far right. Tutorial and more info here.
Install SSHFS on your machine. If you have a mac, you can use brew cask install osxfuse and then brew install sshfs.
You are ready. Just type sshfs [you_user_name]#[external_ip_of_vm]:[directory_on_vm_to_mount_to] [local_mount_point], eg. sshfs john#35.222.222.1:/home/john ~/john-vm.
If you decided to setup VNC, here is a link to a very good tutorial on how to set it up on GC. And here is another link on how to setup SFTP.
You can check VSCode remote as well. It was recently developed and is already in quite stable stage. Probably Remote SSH will help you the most in your case.

Can I develop with VS Code on the new Samsung Chromebook Pro?

Thinking more about leaving my MBP at home and instead taking the new Samsung Chromebook PRO to Starbucks for the day.
Is this fantasy or will VS Code run properly on this new machine? I see options for the Arm chip based PLUS model but nothing for the PRO.
Is a port available and if so how has development been, good?
UPDATE
I guess this is a hard question to answer? Essentially, I just want to leave my heavy MBP that always needs a power outlet at home. Just want to head out with a light weight machine and work on it anywhere.
The PRO does run Linux but I have not verified clearly that VS Code can run in this environment. Being in Canada I have no access to the PRO yet, can only order it from USA at this point, which I might do once I know the verdict to my question.
My team and I have been experimenting heavily with the Samsung Chromebook Pro and have been actively switching our development environments completely over to the Chromebook ecosystem (away from Mac). Personally I run a combination of Atom and NeoVim with a complete development environment for Node.js, Postgres, and Redis on my Chromebook Pro.
For any desktop IDE you'll need to run Crouton which means you'll have to put your Chromebook into developer mode which is less secure. If you don't want to do that your only options are either use something like Caret (which will only do basic text editing) or to use some sort of cloud-based IDE; ones I know of: Cloud9, Codenvy, Shiftedit, and Eclipse Che (an open source one that just recently caught my eye).
The good news is Crouton can run effectively anything that Linux can (especially since the Pro has an x86 processor), and from what I can tell VSCode supports Ubuntu, the default Linux distribution for Crouton. You can even set up the Crouton Extension to put your GUI programs into Chrome tabs or windows within ChromeOS using Xiwi.
Anything with a GUI running in Crouton is going to hurt performance and battery life on Chromebook since ChromeOS is finely tuned for running specifically the Chrome Browser. I don't expect you run out and learn a terminal-based editor today if you haven't already, but I highly recommend at least getting comfortable using the terminal for quick editing, using git, and running simple shell commands. That will save you that sweet Chromebook battery life and a bit of frustration dealing with a somewhat-quirky Xiwi and Crouton Extension.
If you're willing to work out a few kinks the Chromebook Pro development experience is pretty great. It's truly a quality piece of hardware and ChromeOS is fantastic with the addition of the ability to run Android apps.
UPDATE (9/19/17):
There is another option now for at least getting server environments running on ChromeOS without using developer mode. It's called Termux, an Android app, which can bind to a local port and can be interfaced with via SSH. You can read more on the blog post we came across here: https://blog.lessonslearned.org/building-a-more-secure-development-chromebook/ You will, however, have to use a terminal-based text editor like VIM or a native ChromeOS one like Caret, so it will not run GUI editors like VSCode or Atom.
Check out https://coder.com
It's basically VS Code running on a remote server, accessible through a browser.
I've just started playing around with it and looks like a perfect fit for a Chromebook. And it's open source too :)
You can now (with the Linux-beta for chromeOS) quite easily run vscode locally on a chromebook, see this step-by-step guide: https://blogs.sap.com/2018/10/16/set-up-vs-code-on-chrome-os-for-local-application-programming-model-development/

Upload and Deploy Golang application to VPS

I've made a Go app and when I run the exe locally it works fine. Where would I upload this to on my VPS? public_html/domain.com/somefolder ? or /usr/somefolder with SSH?
I have my app, my .exe and src-files, but what do I do with it when I deploy online on my VPS? I haven't been able to find a tutorial about this, so I hope you can help me.
do I upload all files in my src folder including the binaries from when I've written "go build"?
upload to where on my VPS? using ssh or cpanel / ftp program or what?
What are the steps from "go build" on your own local windows 8 computer to uploading and running it online on a linux server?
Ps.
Additionally will CentOS 5.1.1 although not supported https://golang.org/doc/install - allow for me to run an already linux compiled go program on my VPS, and does it only mean that I cannot install Go and do compilation on the CentOS 5.x server? Would CentOS 5.1.1 explain the "segmentation fault" error shh gives me when running the command "./[filename]"?
Well, usually, you would:
Copy the binary you created + all resource files (html, css, images, ...)
(optionally the source code as well)
Have a way to ensure the program keeps running
crontab can be used to check if your program is alive, but a simple monitoring program would suffice as well (which you can write yourself)
Run the binary as a non-privileged user
(you can also combine it with something like Docker if you want)
It does not make sense to put it inside public_html/domain.com/somefolder, as it is not public html code. You'd want your files somewhere they cannot be accessed unless using the application/binary you created.
My apologies for not having neat source links to my story. However, this does seem like the best thing to do.
Another important note:
Even though your VPS may run Windows, you can also deploy linux binaries to a Linux VPS (which are drastically cheaper) - looking at this SO question.
A short note I wrote on writing golang app on osx and deploying on Linux server: http://kumargaurav.co/2016/08/10/deploy-go-lang-app-linux-server/