michael_teter

michael_teter

Windows and Linux co-development

Can some of you folks who use Windows for development suggest some guides on workflow?

For example, regarding WSL (Bash on Windows), I’ve read stern warnings against modifying any WSL files from Windows. So that means I’m not supposed to use Windows Atom editor to edit files that exist in my WSL folders. However, it seems that trying to have my Git project in my Windows folders screws up all the permissions (creating a Git war with my Mac, since each side sees the permissions changing on all files).

Do any of you do your development purely in Windows, without WSL? (Git, iex, PostgreSQL!?, etc.)? If so, do you also have to do the Putty stuff to try to get working ssh keys?

I’m finding this quite a challenge moving from Mac to Windows for development… recipes for success would be very helpful :slight_smile:

Most Liked

dimitarvp

dimitarvp

I’d like to chime in with some more contemporary info. Bare in mind this is a mix of facts and opinions. Also, it’s huge.


Linux

Laptop scene is tragic and always has been. Even specialized Dell XPS laptops that come pre-installed with special Ubuntu builds have several repeating complaints regularly on Reddit and HN (has been the case for like 2 years now) – mostly failing to sleep when closing the lid, drivers crashing after reopening the lid, random WiFi stops and restarts, static noises from the speakers, Bluetooth being flaky, font rendering problems with several displays with differing DPI…

Many Linux devs are purists, don’t care about media and don’t mind these complaints much – however many younger devs come from MacBooks or Windows desktop machines and are unable to tolerate the problems. I’ve read about such painful transitions just 2 days ago on HN… things sadly haven’t improved at all. Even the highly acclaimed Librem laptops suffer from several pretty blatant UX and hardware issues like those pointed above.

If you want to develop on Linux, better get a desktop PC or use one of the very few laptops that are known to have zero issues with Linux – mostly Thinkpads. Some people report no issues while using some of Lenovo’s Yoga laptops and 2-in-1 devices as well. The Yoga machines are pretty cute and relatively strong laptops, I will give them that.

TL;DR: do a very detailed research if you want to use Linux on a laptop. There are very few laptops that come without issues. For desktop machines however you can practically install Linux on everything and use it very efficiently.


Windows 10

Avoid WSL. It works but it comes with a baggage of WTF issues and is significantly slower than a native Windows installation of Elixir. WSL however gives you the advantage of being able to compile any C bindings without an effort. Admittedly, the WTF issues I read about a year ago are being addressed one by one and things are improving in terms of stability and Linux feature parity. 50/50 though, depends what you need.

Using a native Elixir installation: well, good luck if any of your dependencies need to compile a native library! Outside of that I had no problems, Elixir is very fast on Windows 10. I never felt it being slower compared to a MacBook or native Linux.

As for general usability, I might get some flak for this opinion but Windows is just fine. It’s not as polished or beautiful as macOS but it remains very usable and robust. Only had 1 blue screen for 3 years of usage and it was related to a random failure in the RAM that never happened again. Also, while DPI management on multiple monitors is sometimes aggravating – namely tiny text on the laptop screen if you use higher DPI to get the most of your external 4k monitor – for the most multi-monitor setups Windows 10 is absolutely viable.

TL;DR: Avoid Windows 10 if you need to compile native libraries for your work often. While installing and using Visual Studio’s compiler stack takes no more than an hour (10 minutes for me), you will inevitably fall victim to WTF compiler errors at some point. While using gcc under the MINGW sub-platform might work better, I had problems with it in the past as well.


macOS

Another not very popular opinion, it seems: Macs are very close to the ideal programming machines if you are prepared to delve into XCode’s peculiarities; however those are much less than Visual Studio’s WTFs. Getting to know XCode’s environment is mostly a one-time investment and then you can compile whatever with barely any issues. (There are always exceptions but I’ve coded in 7 programming languages on my MBP 2015 and they had all sorts of native bindings and never had problems compiling whatever they needed. Not saying there are no problems at all with macOS’ compilation stack. I’ve heard about a good number of them – but for most of programming I don’t think you can expect issues unless you do very exotic things.)

MacBooks work flawlessly for me, and I have two. Save for the once-a-year lockups or random screen corruptions that get fixed by a reboot (or fix themselves a minute later), they are perfect. Image quality and text legibility are unparalleled. My eyes are less tired after reading on my 15" MBP compared to my gaming 35" monitor that works on 144Hz. Go figure but apparently Apple knows how to do displays.

Many bemoan the “lack of package manager” which is only true if you count Apple-provided ones (which are zero except for the App Store); brew however is alive and well, and works just fine. Never had it install faulty software on both of my MacBooks.

Big drawback however might be that if you want to work on a desk for hours on end and preserve image quality and text legibility you should pay the hefty price for an external Apple-certified monitor… I found it hard to work more than 4 hours on a 15" laptop screen, sadly. Even with the superior displays of the MacBooks that are easier on the eyes, I get tired quicker overall if I stare at the smaller screen for longer periods of time… :frowning:

TL;DR: In my opinion macOS is the best candidate for a laptop programming machine right now. There is some time investment to make sure things compile without a hitch but I found it small and non-distracting, and never had to actually fight the OS (unlike Windows where I have been putting whole weekends without result).


Closing thoughts

If you will work on a desk in a company office or home office, you better work on a desktop machine. You will have access to bigger displays and can buy whatever mouse and keyboard you fancy – these 3 factors are very important when you spend a lot of time working stationary! So in this regard using Linux or Windows 10 with Linux VMs is just fine – I spend 2/3 of my work on my Win10 PC with Linux VMs and never had an issue. Recently ditched Debian for Manjaro and was never happier with a Linux distro. A Windows 10 laptop I can only 50% recommend; many work just fine but many also don’t. Battery life is inferior to MacBooks; average battery life is 4 hours (which is admittedly not a problem for many; Dell XPS and Lenovo Yoga have been known to be close to MacBooks battery life btw).

HOWEVER, if you really really want to use a laptop, don’t settle for anything else but a MacBook Pro. If the display size is a not a problem for you, at least invest in a good laptop stand and external keyboard and mouse – makes the longer work sessions much better when you are on a desk. If you don’t use an external display, most MBPs can go 6 to 8 hours on battery depending on load.

Don’t think for a second that Windows 10 or Linux experience on laptops is optimal. I and many others have tried and tried and then tried some more for years on end – things are barely improving.

In conclusion: don’t make compromises with your work machine. You might think laptop speakers that produce static noise aren’t a problem now but 2 short weeks down the road you will think otherwise.

Sorry for huge post, hope that helps someone. And always take these with a grain of salt. I cite things that are widely regarded as true in rather big communities, however many people still get by just fine with Linux or Windows laptops. Do your own research!

michael_teter

michael_teter

Given my need to use Adobe Premiere and Illustrator, it’s Windows or Mac for me. But in terms of basic usability, I’m shocked at poor Windows is compared to my Mac.

For example, this old rMBP 15 will drive three large monitors in addition to its screen. But when I try to run just one 4k monitor on my new XPS 15 (with better Nvidia GPU), I get laggy external display, and limited to 30Hz refresh.

With Windows, I can’t have Docker and Virtualbox. I have to use a 3rd party program to manage my ssh keys!? (And it doesn’t integrate easily with everything.) Outlook 2016 on Mac has unified inbox, which is good since I have 8 different accounts I need to check. Outlook 2016 on Windows doesn’t have that feature, and the party line on the official windows forum is that the feature is only possible for POP3 accounts (which is obviously not true). I have a much longer list than this… these are just the ones I can think of off the top of my head.

Meanwhile, Apple won’t let me have their fastest laptop with an ESC key. Or > 16GB RAM. But now my complaints about my Mac seem insignificant.

Azolo

Azolo

Use the Windows 10 Mail Client, I think it’s better anyway. There are really not that many times I need to get into to outlook to do anything anymore.

This is because Docker works with Windows Server containers as well. I haven’t downloaded the new Docker that supposedly does this out of the box, but it runs on Hyper-V not VirtualBox. You can probably make it so that it uses VirtualBox instead of Hyper-V, but if you haven’t tried Hyper-V you should. I like it better than VirtualBox most of the time.

Like I mentioned in the other post, I use the ssh stuff that ships with msysgit, though now I think it’s just called Git for Windows. It ships with all the ssh stuff you need, just create a .ssh folder in your User Profile/Home directory.

These aliases are what are in my PowerShell Profile. Use Write-Host $PROFILE to find it’s location

set-alias ssh-agent "C:\Program Files\Git\usr\bin\ssh-agent.exe"
set-alias ssh-add "C:\Program Files\Git\usr\bin\ssh-add.exe"
set-alias ssh "C:\Program Files\Git\usr\bin\ssh-add.exe"

It also comes with ssh-keygen, but I only used a couple of times and was too lazy to create an alias.

Though I haven’t used ssh in awhile, and I think that I had it starting the agent and adding my key in my profile. When I stopped needing to SSH, I just took those lines out.

The only other thing is NIFs, you will need a compiler of some sort. I think that there is an Elixir package that uses Visual Studio automatically though? Either way I hate having a compiler in my path. But I have msys2 and mingw on my machine, and have a function that will add it to my path for when I do need it.

Where Next?

Popular in Questions Top

tduccuong
Hi, is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "eq...
New
nobody
Hi! In PHP: $SERVER['SERVERADDR'] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
marick
I had some trouble figuring out how to make many-to-many associations work. Once I got it working, I wrote a blog post. Because I'm a nov...
New

Other popular topics Top

sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 42842 311
New
AstonJ
Posting this to see if we can make things easier for people to get into Neovim. If you use Neovim and have a favourite distro please let ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement