• info@happli.be

Category ArchiveUncategorized

Samsung T3 – don't use ExFAT on Mac !

So far I’ve been running a Windows 10 Parallels VM full of Dev tools from my Macbook’s SSD, but as I’m running out of space I’m looking for solutions. In my previous post I explored the option of putting the Parallel’s pvm file on a Transcend JetDrive Lite 360 (256 GB). The conclusion was that the speed wasn’t sufficient for my daily work. So I resorted to trying an external drive. This is was this post is about: evaluating the Samsung T3 external SSD drive.  Criterias are the same as in the previous post. I’m evaluating:

  • the compilation speed
  • the time it takes to run all the tests in my Visual Studio solution
  • the benchmark results of CrystalDiskMark

I bought the drive for about 120€. It’s an SSD drive, with a capacity of 250 GB, USB 3.1 connectivity and it’s not too cumbersome.

 

Samsung T3 drive

Samsung T3 drive

Compiling the Visual Studio solution

This is the time it took to rebuild the whole solution. Time was measured with BuildMonitor (a Visual Studio extension). Times are expressed as MM:SS (minutes:seconds).

  • From the Macbook’s SSD: 00:12
  • From the T3: 00:12

No notable difference in compilation time.

Running the tests

This is quite a big set of integration tests. They take a while to execute (I know I should work on it).

  • From the Macbook’s SSD: 03:40
  • From the T3: 02:09

The T3 is significantly faster in this scenario.

CrystalDiskMark benchmark

The benchmark results illustrated below show that the writing speeds of the Macbook’s internal SSD are faster.

CrystalDiskMark benchmark of the SSDCrystalDiskMark benchmark of the SSD

CrystalDiskMark benchmark of the SSD

CrystalDiskMark benchmark of the T3

CrystalDiskMark benchmark of the T3

Conclusion

Even though the benchmark shows slower writing speeds for the T3, my daily tasks don’t seem (compile, test) to run slower.  Visual Studio even tends to perform better when run from the T3.

But pay attention, I had to reformat the drive. At first I found it very very slow. I was a bit disappointed (it was my second attempt at getting a solution for the same storage problem and I failed again) so I googled with a few keywords and BAM: a first hit solution. This article from the Parallels KB made my day. It’s a known problem when the drive on which the VM runs is formatted as exFAT (which was the case of the T3). I had to reformat it to Mac OSX Extended and it worked. Great speed and experience.

The Samsung T3 external SSD drive seems to be a better alternative than the JetDrive Lite for running a Virtual Machine in a developer context.

I’ll give that solution a go.

Transcend JetDrive Lite 360 256GB: Developer review

I’ve got a Macbook Pro that I use for developing apps cross-platform apps.  It’s a been a great tool so far. I’ve got a Windows 10 running as a Parallels VM and there are plenty tools installed on that VM. Everything that a modern .NET Developer needs (Visual Studio, Git…). I came to the point that I’m running out of free disk space on my macbook’s SSD.

So I started to look for an external storage solution.

  • I wanted something fast (I would put my VM on it)
  • I wanted a compact solution (I carry my Macbook very often, and didn’t want to have to take an external hard drive and its cable with me all the time)

I found that Transcend produces the Transcend JetDrive Lite range. These are tailor-made sd cards for Macbook. They have a specific size so that they do not protrude.

The card has a special size

Special Format

JetDrive Lite 360 256GB inserted in a Macbook Pro

JetDrive Lite 360 256GB inserted in a Macbook Pro

I went for the 360 as I own a mid 2015 Macbook Pro (you have to pick the right model depending on your Macbook). The Transcend JetDrive Lite 360 offers up to 256 GB of storage.

After plugging it into my Macbook, I copied my Parallels VM (a 140 GB .pvm file) from the Macbook SSD onto the JetDrive card. Then I started that VM from Parallels. The boot process seemed slower than from the SSD.  Then I started Visual Studio 2015, opened a solution file composed of several projects. It seemed slower to compile as well. Then, I ran a subset of the NUnit tests contained in that solution (117): it was obviously much slower.

Today, I decided to measure the time it took from the SSD and from the JetDrive Lite so that I could have a better idea of how bad that was. Nothing too scientific. It was all about deciding if I would accept working daily with that setup or if it was definitely too slow. The tasks I measured were the following:

  • compiling the solution file (mentioned above)
  • running the NUnit tests

Here are the results.

Compiling

This is the time it took to rebuild the whole solution. Time was measured with BuildMonitor (a Visual Studio extension). Times are expressed as MM:SS (minutes:seconds).

  • From the Macbook’s SSD: 00:12
  • From JetDrive Lite: 01:17

The JetDrive Lite is 6 times slower at compiling the same solution.

Running NUnit tests

This is quite a big set of integration tests. They take a while to execute (I know I should work on it).

  • From the Macbook’s SSD: 03:40
  • From JetDriveLite: 07:45

The JetDrive Lite is twice as slow as the SSD at this task.

Disk access benchmark with CrystalDiskMark

Even though SSD’s are obviously faster than SD cards, I decided to benchmark the disk access just to get an order of magnitude. I used CrystalDiskMark, from the running VM (under Windows 10). Here are the benchmark results.

CrystalDiskMark benchmark of the SSDCrystalDiskMark benchmark of the SSD

CrystalDiskMark benchmark of the Macbook’s SSD

CrystalDiskMark benchmark of the JetDrive Lite

CrystalDiskMark benchmark of the JetDrive Lite

The JetDrive Lite 360 is a lot slower at writing than its SSD rival.

Conclusion

Even though Transcend doesn’t recommend installing an OS on its JetDrive Lite, I gave it a try in the context of a VM. I wanted to try the SD card solution, even though SSD’s are obviously faster than SD cards, because the option wasn’t too expensive. Still I’m bit disappointed. I think this could be a good solution for some kind of permanent storage, but not for running resource consuming tasks.

I’m still stuck with the same problem of insufficient disk space on my Mac. I’ll have to try different strategies. I’m thinking of:

  • reducing the SmartGuard snapshots retention
  • having a separate virtual Hard Drive (stored on the JetDrive) for my Windows 10 VM and reinstalling dev environments on that separate Hard Drive
  • resorting to using a USB 3 external hard drive that I would have to carry.

On Windows like on Mac: Desktops and Spaces

If like me you spend your freetime on a Mac but work on a Windows machine, You might miss the Spaces feature during work hours.

If you don’t know what Spaces is, check it out.

Wanna get a similar experience on Windows?  Try Desktops from Windows Sysinternals.

Creating a new desktop is easy, switching between them is as well. No setup required, no admin rights either. Just run the executable file and that’s it!

I wish I had known that before.

Move an existing Git Repository to Visual Studio Team Services

Say you’ve been working on a project for a while. That project is not an open-source project. The source code is private and owned by your customer. You’ve been working alone so far, thus having a Git Repository hosted on a NAS and exposed through some VPN or WebDAV way (http://happliblog.azurewebsites.net/2015/09/07/setup-git-on-synology/) used to work a threat.

But someone joins the project. You have to give him access to the project’s source code, but you don’t want him to reach your NAS (additional trafic, security risks…). So you think about moving your repository to an online hosting. Several options exist out there. I considered two of them: GitHub and Visual Studio Team Services.

This post describes the platform I choose and how I “uploaded” my repository to the chosen hosting service. It then show how to add a team member using the selected platform.

GitHub vs VS Team Services

Pricing

Neither solution are free.

GitHub has a free offer for public repositories. But this isn’t an option if your code must remain private. Paying for the private repositories will cost you 7$/month.

GitHub pricing Details

GitHub pricing Details (https://github.com/pricing/plans)

Visual Studio Team Services (VSTS) is free for up to 5 users. Repositories are private.

Visual Studio Team Services pricing details

Visual Studio Team Services pricing details (https://www.visualstudio.com/pricing/visual-studio-team-services-pricing-vs)

As long as your team remains small (max 5 team members), Visual Studio Team Services is your best bet on the price side of things.

Features

Besides Git-base source code hosting, both platforms come with additional features. Here’s a subset of them. I’m not including advanced features like API

GitHUB has (https://github.com/features):

  • Issues tracking, with a nice commit-to-issue linking system
  • Pull requests: a kind of advanced collaborative mechanism. After collaborators have worked on a branch, when they want their changes to be integrated into the product’s main branch, they fill a pull request which contains code, comments and issues. It allows grouping information about a set of changes.
  • API (https://developer.github.com/v3/)
  • Syntax highlighting when browsing code in web views
  • Integrated Web Pages for blogging about a project… (https://pages.github.com/)

VSTS has (https://www.visualstudio.com/en-us/products/visual-studio-team-services-feature-matrix-vs.aspx):

Conclusion

Given that we’re only two team members working on the code  and I want to keep a private repository, Visual Studio Team Services wins on the pricing side of things.

On the feature side of things, Visual Studio Team Services offers a nice agile development process support. On the other hand, GitHub has a cool web pages offer. But the integrated CI feature of Visual Studio Team Services makes it my preference (less time spent configuring a CI system).

This project doesn’t involve a large organization nor specific integration with external tools. So I didn’t care about team management features nor about API’s exposed by the platforms.

So I went for Visual Studio Team Services.

Moving the existing repository to the hosted repository

Git and its ease of adding remote repositories allows for a smooth transition from a private repository to a more robust hosted one. In that way, it helps support scaling of the project.

Start by making sure you’ve got a clone of your existing repository on your local machine.

Given an existing Visual Studio Team Services account, create a project from that account (select Git as the versioning system). Then, navigate to the “code” tab of your project (see below).

VSTS Code Tab

VSTS Code Tab

You’ll get something like below. Start by generating Git Credentials (click on the button highlighted).

Generate Git Credentials

VSTS Generate Git Credentials

Once the credentials are generated, scroll down and you’ll find out how to push an existing Git repository to the VSTS hosted Git repository, as illustrated below.

Push Existing Repository To Another One

Push Existing Repository To Another One

Using your command line, navigate to the Git Repository that you’d like to “publish” to Visual Studio Team Services. Then execute the two commands above. Pay attention:

  • You might want to change “Origin” to some other name (if your local repository is a clone of another origin).
  • Don’t forget to change the URL in order to match your new repository’s name (in the screenshot above, the repository name is “test”).
  • You will need to specify the Git Credentials you’ve just created.

Git will do its job and push all the source code (including all branches) to Visual Studio Team Services. Go back to your browser and you should see the code. I didn’t even have to refresh the webpage!

Next step: adding the new contributor to the list of team members on VSTS.

Adding the new contributor

Adding the new contributor to the project is done on the project’s home page. Simply click on the “Team Members” panel (highlighted below) and then specify the new member’s e-mail address.

VSTS Project Team Members

VSTS Project Team Members

Adding Android platform to an existing Cordova app

Today, I tried adding a platform to an existing cordova app, which used to work under iOS  was developed on a Macbook Pro. This post lists the things I had to do in order to get it working and the bumps I hit.

Setup the environment

You have to follow the Android platform guide. It’s very well explained and easy to follow. I found it pretty annoying that I’ve had lots of timeouts during the download of the several packages (through the SDK manager). Just keep on trying and you’ll end up with a working environment.

I’ve had another problem when I tried to run the emulator. I was told that Intel HAXM wasn’t installed, so I installed it.

But I couldn’t get the emulator running, I didn’t have much info through the avd manager, so I created a blank project in Android Studio, then I tried to run it in the emulator. And then I was able to read more info about the problem:

Failed to sync vcpu reg.

I was just one google search away from getting it running This SO post helped me. This message seemed to be in relation with the VirtualBox that was running on my Mac at the same time. Shutting down the VirtualBox VM allowed me to get the Android emulator running.

Add the Android platform to the cordova project

cordova platform add android.

So far so good, but when trying to compile the app like below, I had a problem.

cordova build android

I was told that

Screen Shot 2015-09-28 at 22.28.33

Multiple dex files define Landroid/support/annotation/AnimRes;

I found the solution in this post. I simply had to remove the android v4 support from my project’s plugins. I don’t know how this one got there.

Debug the project

Once able to build the project and to make it run, I needed a way to debug it. Just launch chrome and type chrome://inspect/#devices in the address bar (the app must be running first).

Conclusion

It took me less than 2 hours to make my project run on Android. Most of that time was linked to the setup of the environment.  So I’m still convinced that cordova was the right choice to build this cross-platform mobile app.

Setup Git on Synology through webdav

Suppose you want to use git for one of your projects. Suppose you don’t want to open your sources to everyone. You could resort to GitHub and get a private repository, but you’d have to pay for it and you want to limit the expenses.

If you own a NAS, then you might want to host your sources on it. I own a Synology Diskstation and I was able to host git repositories on it, working through Http (ssh was not an option because of non-configurable firewalls between me and my NAS in some scenarios). It’s using WebDav and works a threat.

Here are some of the tasks you’ll need to go through:

  • Add the Git package to your DiskStation (an official package exists)
  • Configure WebDav on your DiskStation
  • Open ports (to allow webdav in)
  • Setup your DiskStation with an SSL certificate (don’t want everyone on the wire see what you’re working on)
  • Configure DDNS on your DiskStation (so that you can use a DNS instead of your probably dynamic IP in order to reach your repositories)

The following tutorial has been of great help and I strongly recommend it:

http://blog.osdev.org/git/2014/02/13/using-git-on-a-synology-nas.html

Don’t forget the part related to post-update!!!

I found myself in troubles in the opening ports part, so I keep a copy of my findings here. Maybe it’ll help you as well!

Opening Ports => Beware of CGN and double NATs

Opening ports requires going to your router’s setup and adding rules to the port forwarding. I faced a problem with this: Even though everything seemed correctly configured, I couldn’t reach my repositories.

I was able to connect to the DiskStation remotely, using QuickConnect. So I thought that I could use QuickConnect and simply suffix the hostname (XXXXX.quickconnect.to) with the port number. It didn’t work. QuickConnect is designed to work with only a few applications, not including WebDav. So I had to use a DDNS.

After setting that DDNS up and making it look good (normal state in Diskstation DDNS management view), I added port forwarding rules to my router. And then I tested => didn’t work.

 

I have searched for hours and suspected something wrong with port forwarding. But I was able to connect to the DiskStation through QuickConnect. I couldn’t understand why the port forwarding that I had configured for Diskstation remote access (through QuickConnect) was working and that the one I was trying to configure for webdav (through DDNS) wasn’t. The answer wasn’t so obvious: connecting to DiskStation through QuickConnect doesn’t require ports forwarding (http://blog.synology.com/?p=2283), that’s simply not the way it works. I thought that ports forwarding was working, and it never had worked. I had defined useless port forwarding rules. Shame on me.

After browsing the web for a while, I discovered that I was in a double-NAT configuration (http://www.practicallynetworked.com/networking/fixing_double_nat.htm). My ISP, Voo, a Belgian ISP, seems to be putting the low contracts under a double NAT situation, through the use of a Carrier-grade NAT (CGN). Maybe they’re running out of IP Addresses.

No luck at the first phone call. Maybe the operator didn’t understand my request, maybe he didn’t wan’t to help, maybe he had received orders (trying to limit CGN related operations). I don’t know. I gave a second phone call later in the day and the operator did something that allowed me to get a public IP. No more double NAT => webdav working!!!

 

SSL Certificate

You can configure your diskstation with a self-signed one, but you’ ll need to install the CA on the different machines on which you’ll want to clone the repository.

If you don’t want/can’t install the CA, the following post shows how to trust temporarilly the self-signed certificate when cloning the repository : http://blog.decayingcode.com/post/temporarily-ignore-ssl-certificate-problem-in-git-under-windows

First post

Happli is a small Belgium-based software development company focusing on training and taylor-made solutions.

This blog was set-up as a way for Happli to keep track of all the little things (problems faced, tips and tricks) that can occur when you develop software in which you integrate more and more third-party components (most of which are open source). And who knows, maybe you’ll find a little help in the posts.

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!