Using cloud storage services

As a person who is practicing remote working, freelancing and working with distributed teams, using cloud storage services like Google Drive is inevitable. Each service has its own pros and cons especially when you live in place that has serious Internet constraints and international sanctions.


Using cloud storage services helps you to be more organized and productive. You want to send a copy of a file to colleagues and after updating it, sending updated copies again? Using emails are tedious and error prone. You can put the file into a cloud storage system and share it with colleagues. So everyone have access to it. If you or your colleagues update the file, so no need to send new file to each other, everyone just get new file automatically. Cloud storage services save history of file for you, so you can see changes over time or download an older version if you want.


Cloud storage services provide good ways for notifications to collaborators when someone changes a file or adds new files to a shared space. They also keep track of conflicts and are good for alone people that just want to share their own files among their own devices like PCs, notebooks, tablets and mobile phones.


Not using a cloud storage service in a distributed team is in some degree like not using source control systems among developers of a team.


Despite all advantages of using cloud storage services, there are also disadvantages. They tend to consume huge amounts of your bandwidth. Some of them are expensive. Using cloud storage services speeds up you get confused with different operating systems, file formats, utilities, etc. You are using MS Office while others put Libre Office file formats into the shared space. You can edit a specific file in your PC but your tablet does not have an editor for it. Your MacBook machine works well with a cloud storage system while there is no suitable cloud storage client for your tablet. And don't forget that security is a big concern.

cloud storage
cloud storage

For many users specially those who has Android devices, default selection is Google Drive. It has online editors and have good integration with Android devices but its big problem is US sanctions. Due to sanctions, its desktop client for windows can not be downloaded from sanctioned countries. I guess if you download it with some work-arounds there would be still restrictions using it because APIs are still on the Internet and you must hope they are not restricted for sanctioned countries.


Another popular choice is Microsoft OneDrive. It has excellent integration with Micorosoft Office Online. Its services are many less expensive than other services. But there are some problems with it. It has no official client for Linux. There is an un-official project for it called onedrive-d, but it is not working very well. OneDrive stopped its service to sanctioned countries from October 2016.


For Linux users residing in sanctioned countries, DropBox is a good choice. It is accessible from these countries, it is easily installed on Linux and even works good with Android. Though it is an expensive service. It also have Office Online for editing files online.


If you are a Linux user using LibreOffice and wants to be able edit your files in Android and in online DropBox be careful. There is no Android version and no Online version of LibreOffice. You have to save your files in MS Office format and use MS Office for Android and MS Office Online.


Developing an ASP.NET Core project on Ubuntu

It's a long time that I'm trying to migrate from Windows/.Net to Linux. But job market have more demands on .Net other than none Microsoft technologies. My hope was on ASP.NET Core. It was not very good at the Beta/RC time but now that is published in final version, my mind has been changed. It now works good on Ubuntu.


At start I created several test projects with ASP.NET Core on both Windows and Ubuntu. I wanted to be sure that ASP.NET Core is capable enough to rely on it in a real world project. I tried to test all aspects of MVC, Web API, Razor, Nuget packages, EF Core, Identity Core, internal DI/IoC, project.json, SQLite, unit testing and tooling include Visual Studio Code, debugging, unit testing, auto complete, code formatting, shortcuts, etc. I tested them on a Windows machine and on an Ubuntu machine with both Unity and Xfce desktops. All tests showed that I will not encounter a big problem utilizing ASP.NET Core itself as first place and using it in Ubuntu at second place.


Using .Net Core in Ubuntu is as same as Windows except that you rely more on terminal than GUI. Using dotnet commands are exactly same in both Windows and Ubuntu. Same names, same switches, same operations and same outputs. It was really good thing that they are exactly same. But when it comes to tooling it is different. While your IDE in both platforms is Visual Studio Code they do not differ very much but if you are used to use Visual Studio 2015 then you can understand how deep is difference between Visual Studio Code and Visual Studio 2015. The latter have a full integration and do everything you need with just pressing some shortcuts. But Visual Studio Code needs many configurations to behave like Visual Studio 2015. Debugging in Visual Studio Code is not as easy as Visual Studio 2015, you need some level skill of operating system to be able to debug codes in Visual Studio Code. My good friend from Visual Studio 2015, IntelliSense, was not working at all at first days. Now that it works, it does not work as good as in Visual Studio 2015. It shows many un-related items too. BTW having Visual Studio Code in Ubuntu is like a miracle. It is very similar to Visual Studio 2015, it has code highlighting, similar shortcuts (Unity desktop), good integration with git, real time compile (to show errors in the code), etc. Did I mentioned that you can use yeoman as a substitution of Visual Studio 2015 templating system that is absent in Visual Studio Code?


The project I am working on it in Ubuntu is a regular web application with parts rendered via MVC and parts delivered to a mobile app as Web API. In development environment I use SQLite as database backend but for production we will be using MS-SQL Server. EF Core works good despite its constraints in verison 1. SQLite in other part also works good as development environment database. It does not allow complete support of EF migration but instead works same from Ubuntu and from Windows. One thing that works great is that the code I'm working on is working exactly same in Windows and Ubuntu. I change code in my Ubuntu machine, commit and push them to the server then pull it from a Windows machine and then continue my development from my Windows machine, no matter I have switched from one OS to another OS. Code behaves same in both OSes and runs exactly same. Additionally code can be developed and run in both Visual Studio Code and Visual Studio 2015 as same. The only consideration is directory structure be designed compatible with structure that Visual Studio 2015 knows about.


I haven't yet deployed the project into a Linux machine as our client probably prefer to use Windows for it. But I hope hosting would not be a problem too. As a long term .Net developer I am very exited about cross platform feature that Microsoft has been added to .Net but frankly I'm a bit worry about it. I'm not sure if Microsoft would continue this way on Linux or not. I am afraid that developers using .Net in Linux would not be as big as Microsoft imagines then abandon it.


I started developing ASP.NET Core on Ubuntu on Unity (standard desktop with Ubuntu). Everything was good except high CPU usage. This problem was not caused by ASP.NET Core instead it was caused by 'hud service' from Unity. For this reason I decided to try Xfce also. It is a light desktop that does not have hud service high CPU usage problem but have problems of its own kind. First thing you encounter is that shortcuts are very very different than Unity. I lost even my Ctrl+F3 (for searching keywords in Visual Studio Code). In rare situations it has problems with high CPU usage of Visual Studio Code (OmniSharp) but bigger problem is regular crashes of my applications like Toggl, my favorite time tracker, and even Google chrome. Though I'm still using Xfce but think I would soon switch back to Unity and find another solution for hud service high CPU usage.


Please see some pictures of my experiences:

asp-net-core-debug-ubuntu-xfce omni-sharp-high-cpu-usage xfce-chrome-crashes