Author Archives: Paolo Brocco

Change Docker images location in Windows

One of the things I wish I knew before using Docker for Windows, is that configuring where images and containers are stored is not really straight-forward. Here how to change the default location from C:\ProgramData\Docker to whatever drive and folder you like. In my case I like to keep the same structure, but in D:, like this: D:\ProgramData\Docker

To change the location via UI, from your system tray, right click on the docker (the whale) icon:

Note, this assumes that you are using Docker from the “stable” channel. With “edge” I think you may not have the “Daemon” option as in the screenshot, then keep reading to change the file manually.

Then from the menu, select “Settings…” > “Daemon” > click on the “Advanced” switch > Add (notice that every backslash is escaped with another backslash), feel free to change the location to your desired one:

"graph": "D:\\ProgramData\\Docker"

The result should look like this:

Click “Apply”, docker will restart and you are set.

Alternatively you can edit the C:\ProgramData\Docker\config\daemon.json file and add the “graph” property with your favorite text editor, then save and restart the docker service.

To restart docker: right click on the docker icon > at the bottom click on “Restart”.

Unluckily, the old images will stay in the old location and it’s up to you to manually delete them after restarting docker. They are inside C:\ProgramData\Docker\windowsfilter

I’m not sure if you can simply move them to the new location. I didn’t bother. I tried to copy the files from windowsfilter but got some errors and saw that some links were not copied correctly, so I gave up and simply built my docker files to generate a new, clean images and containers from scratch.

Ubuntu: how to prevent grub installation

I have several linux installations in my system, and I like to control the only boot partition from my main linux distro.

Sometimes I need to update the kernel image in my secondary linux distros, but apt tries to install grub. I don’t want that. I often had to let it be installed and remove it via apt remove.

A better, permanent solution is to add this file preferences.

Thanks to: jdthood answer in stackoverflow.

Uninstall DaVinci Resolve 14 on Ubuntu

If you, like me, were tempted to Download DaVinci Resolve “free”* for Linux. Be aware that when you add folders to your media library, you won’t see your videos encoded in h.264 (which is the most used format).

Update, check also DaVinci Resolve 15 features comparisons free vs commercial (PDF).

Install instructions

Unzip the contents, then from the terminal run:

sudo sh

Try to launch it from the command line too, you find the “resolve” program in /opt/resolve/bin

If you see some errors about missing .so files, you may need to install the packages containing the libs:

sudo apt install libssl-dev

You may also need: libgstreamer-plugins-base1.0-0

Then create symbolic links as follows:

sudo ln -s /lib/x86_64-linux-gnu/  /usr/lib/
sudo ln -s /lib/x86_64-linux-gnu/  /usr/lib/

I wanted to quickly try this video editor on Ubuntu 17.04 and I was highly disappointed not to be able to import any of my DJI drone videos. What’s the point of having a powerful professional editor that doesn’t even natively open any of my videos, while other open source editors like kdenlive, openshot can easily open? And no, I don’t want to convert my videos in a different format, just to open them in DaVinci.

Uninstall instructions

Also I struggled to find a way to uninstall this software, so here the instructions if you want to clean your hard drive after a disappointment similar to mine:

sudo rm -f -r /opt/resolve
sudo rm /usr/share/applications/DaVinci\ Resolve.desktop

If you this page was helpful, visit banggood to find a cheap gadget or something useful for a few bucks (free delivery worldwide!), if you buy from my link I get a small commission, thank you.

Jenkins: checkout Gerrit patchset (Gerrit Trigger plugin)

Today I had to setup automatic pipeline triggering for each new patchset pushed to Gerrit for review. The Gerrit Trigger plugin makes it a piece of cake to achieve the goal.

In reply to How to Checkout a Gerrit Change in a Jenkins Sandbox Pipeline: such a snippet can be easily found directly in Jenkins > browse to your pipeline > click “configure” > click “pipeline syntax” > Sample step: select checkout: General SCM > fill what you need, click on advanced and add a refspec and generate the snippet. Here a snippet using the GERRIT variables exposed by the plugin.

node {
 stage('checkout gerrit patchset') {
 echo "gerrit branch: ${GERRIT_BRANCH}, gerrit refspec: ${GERRIT_REFSPEC}"
 checkout([$class: 'GitSCM', branches: [[name: "${GERRIT_BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'jenkins-rsa', refspec: "${GERRIT_REFSPEC}", url: 'ssh://yourgerritserver:29418/yourrepo']]])

Note extensions: [[$class: ‘CleanBeforeCheckout’]] is a good idea if you need to build from different branches, if your setup is simpler, you can just use extensions: [].

MSBuild command line ignoring publish properties: solution

MSBuild 2017 command line seems to ignore your publish profile? You are trying to run a command similar to this and your projects/artifacts are not copied where they are supposed t be copied?

msbuild /p:Configuration=Release /p:DeployProjects=true /p:PublishProfile=Release

I have msbuild in my PATH, which is here just in case:

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\amd64\msbuild.exe

Maybe you are using a build server, with Jenkins or a similar tool and you did not install Visual Studio 2017. I have such a setup and I installed just the ms build tools standalone package, find it at the bottom of this page: Build Visual Studio Downloads > find Build Tools for Visual Studio 2017.

This seems to be a well known issue, on github somebody reported the problem, and many people joined with a comment “Same to me”.


In my case, I noticed I forgot to select also Web development build tools > .NET Framework 4.6.2 development tools:

Updating ms build tools and adding this missing component did the job. Now when I run msbuild I get my artifacts as expected.

If this solution helped you, consider buying something at my favorite affiliate website. I consider this better than asking a donation, because like this you get a product you may need and use and I just get a little commission, which doesn’t affect the price, so win to win 😉

Maintain an offline NuGet source

To restore nuget packages in an offline VM, at work we need to regularly add those packages in a folder. We do it from our local packages folder, running a command like this:

C:\MySolution\packages>..\.nuget\NuGet.exe init . D:\NuGetSource

Then on the build server we configure a task to run this command before bulding the solution:

.nuget\nuget restore MySolution.sln -Source d:\NuGetSource

I’m sharing this, because I was thinking I could manually create a folder with the package name, then a subfolder with the version, then copy the nuspec and nupkg files. But the package I needed was never found. It seems that the init command I shared above adds also a sha512 file, this is the only difference and probably that’s why the package was not found.

iOS App Store Submission headaches

At work, from time to time we have to update our app. With Android the process (automated in TeamCity) goes smoothly. With iOS, if you are reading this chances are that you already know that it can be quite a pain: expired certificates, Mac OS updates, Xcode updates (at the moment of writing we use Xcode 8.2.1), plist updates, command line commands updates… even if you want to use an old system you can’t, you always need to update something (grr!).

In our TeamCity setup, we have the following 2 steps:

echo "Step 1: Building xcode project..."
 xcodebuild \
 -configuration Release \
 -project "./myapp.xcodeproj" \
 -scheme "MyApp" \
 -archivePath "./build/myapp.xcarchive" \
 clean build archive


echo "Step 2: Exporting application..."
 xcodebuild \
 -configuration Release \
 -exportArchive \
 -exportFormat ipa \
 -archivePath "./build/myapp.xcarchive" \
 -exportPath "./build/myapp.ipa"

After the second step, we normally get an IPA file and upload it to itunes connect via Application Loader. In the last week, after apparently successful upload, as usual I checked in itunes connect > my app > activity > all builds, but I could not see the build! I waited a few more minutes, nothing. Usually it should be visible as “processing” and that can take some more time, but I was worried to see nothing at all… so I checked the command line output and noticed:

Codesign check fails : /var/folders/vk/…/ a sealed resource is missing or invalid

and also:

xcodebuild: WARNING: -exportArchive without -exportOptionsPlist is deprecated

So I thought that maybe it would work better using the Xcode UI: “Product” > Archive, then “Window” > Organizer > Upload to App Store… this somehow gave more feedback:

ERROR ITMS-90035: “Invalid Signature. A sealed resource is missing or invalid.[…]”

Seems the same problem, but this time I could see the error upon upload attempts. So as suggested in this blog post by Ash: iOS App Store Submission Problems I added an export.plist file containing just the bare minimum:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

I had to find out our team id:

Then I adapted the export step and added the exportOptionsPlist option, like this:

echo "Exporting application..."
 xcodebuild \
 -configuration Release \
 -exportArchive \
 -exportOptionsPlist export.plist \
 -archivePath "./build/myapp.xcarchive" \
 -exportPath "./build/"

I could upload the resulting IPA via Application Loader and could see the build processing in Itunes Connect, but then it disappeared after a few seconds (I was reloading the page to see if there were updates). This time my boss received an e-mail that something was wrong. In our case:

*Missing Info.plist key* – This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

After adding the missing info.plist key and value, the app could be uploaded and processed without problems. The story, written like this seems kinda easy, but I wasted at least half a day to try different commands and figuring out the proper solution. Sharing in the hope to help a poor soul with similar/same problems, as Ash did (thx man!). Good luck!

Samsung S Planner Sync now: all events disappeared

Yesterday I was in the bus with my wife and I asked her if she received a calendar invitation, she did but the event didn’t show up in her Samsung S Planner calendar. She said that normally, when she accepts an invitation it shows up*… she clicked “yes” again, still no event in the calendar. I checked in the app if there was an option to fetch the updates, I found one called “Sync now”, I touched it. With show, we noticed that all her past and future events disappeared. My invitation was there. So what happened?

My wife has a Samsung phone (Samsung Galaxy S5 mini) with a Google account. For some reason she doesn’t like the Google Calendar and for another strange reason (maybe to save some data traffic**) she deactivated the synchronization with the google account. She also hasn’t a Samsung account. So basically she has no synchronization with any online service, everything is local. Some entries (like my invitation to an event) appear in her calendar because the S Planner app shows the google calendar entries.

I believe that the S Planner app is so buggy that if it doesn’t find a Samsung account and one touches “sync now” it simply sync from an empty calendar which the app thinks it’s the “master”. So if you sync from master to slave, slave gets all updates from master, thus in this case everything is lost. What a stupid buggy app, really! A synchronization feature should be smart enough to sync in both directions to avoid data loss like in this case.

Anyway, I suggest people not to trust apps and always do backups. How do I do backups? Well, I synchronize my important stuff (contacts, calendar, notes) with the cloud so if my phone get broken, stolen, lost etc. I can simply open a browser anywhere else and see my data.

Another app I use, for all those apps that save data locally on the phone is Titanium Backup: I scheduled an automatic backup every morning a few minutes before my alarm for all my important apps and kept a few versions, just in case (so e.g. if an app erases everything and I notice a few days later I can still restore an earlier version, not just the last useless one).

So: activate that damn sync and use it (Google, or Samsung, or both). And if you still wanna use buggy apps such as S Planner, make sure to make backups of your local data if you don’t synchronize it with any cloud.

Open your Android Settings > Accounts > Google > touch your Google account > make sure “sync” is on > you can select and deselect what you wanna synchronize.

*You can activate the Google account synchronization and selectively choose what to synchronize. E.g. if you backup your pictures manually you can deselect photos, but sync at least contacts and calendar and other data that matters to you.

**I believe my google calendar event invitations showed up when she accepted them from a browser, so e.g. logged in in gmail, when clicking yes, gmail would update her google calendar.

How to easily resize a qemu disk image for Windows

To add e.g. 30 GB to an existing raw image usethis command:

qemu-img resize nameofimg.img +30G

In my case, the command was run instantly and it added 30 GB to my existing file, as expected. The output was:

WARNING: Image format was not specified for ‘nameofimg.img’ and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the ‘raw’ format explicitly to remove the restrictions.

See also QEMU Emulator User Documentation > qemu-img Invocation or the man page:

man qemu-img

In my case my image was used in a Windows 10 virtual machine. In the Windows 10 VM: click Start and search “partitions” > the search finds “Create and format hard disk partitions” > which clicked opens up “Disk Management” > Right click target partition > Extend > follow the instructions to extend your partition. It’s super easy.

Eachine E50 Elfie WIFI FPV mini drone review

Did you ever want to have a mini drone with the size of a smartphone? Read on before buying…


Eachine E50 WIFI FPV With Foldable Arm Altitude Hold RC Quadcopter RTF – only 41 USD !!!
(price checked and last updated on 2017-03-21)

Technical details

  • Size: 13.5 * 6.5 *2.5 cm (arms folded) – 13.5 * 16 * 2.5 cm (arms unfolded)
  • Weight: 73g
  • Flying time: 8-15 minutes
  • Battery: 500 mAh (included) – compatible with other mini batteries, I tested it with a 250 mAh battery (from my Eachine H8 Mini) but I had a very short flight (around 3 minutes)
  • Charging time: 120 minutes (USB adapter included)
  • Camera quality: 720 x 578 px (recording on the smartphone/tablet)
  • Built-in barometer: included (to hold the altitude, very nice feature for a mini drone!)
  • Many more features, check the product page

Unboxing and test flights

The Eachine E50 box is like the one of a smartphone. Quite elegant. I liked all contents provided in the box, especially the mini drone of course.

The arms (containing the propellers) can be expanded just like the DJI Mavic Pro, like this:


To turn it on you just press the power button and the front lights will turn on, just like a car:


Tell me if this isn’t a bad ass mini drone just by the looks!


You control this mini drone via smartphone or tablet with the WiFi UFO app. In the instructions they provide a QR code pointing to the wrong app, so don’t even bother installing that app, it doesn’t work. Use these apps:

WiFi UFO app instructions



To begin, turn on the mini drone, then after a few seconds on your smartphone or tablet connect to the “Eachine” WIFI (the number after “Eachine” can vary) :


When you open the app, the initial screen looks like this, touch “play”:


If you connected to the Eachine WIFI, you will see the drone camera view:


Now touch “Off” to show the controls:


You’re almost ready, touch the hourglass icon (the one after “30%”) to show the controls to be able to take off and to land:


Now you are ready to fly. Make sure that the 1st time you try this where you have a lot of space. Don’t try this indoors if you are not an experienced RC pilot! Go outside, find a place with a lot of grass, try thee to get familiar with the controls. When you are experienced you can try indoors. I warned you… Here how the controls work:



Touch the “up” icon (bottom left) to take-off.

Touch the “down” icon (bottom right) to land. Please note that when you touch “down”, the mini drone takes a bit of time to automatically land. You may still have to control it a bit.

I use “stop” to land, when the drone is very low in altitude, close to the place where I want it to land.

Control this drone with a PlayStation 3 controller

Controlling this drone via touch screen is a real pain. I almost lost it a few times and so a friend of mine owning the exact same drone. But I recently found online a hack that improves the experience a lot. It’s a driver that allows you to map a PlayStation 3 (also PS4) Dualshock controller to the touchscreen virtual sticks and buttons. It’s awesome! Check the tutorials here (courtesy of rc fly base):

Tutorial, part 1, check the compatibility (you need an Android device with root access):

Tutorial, part 2, create a touch profile and see the hack in action:

Similar drone: Eachine E52

If you can’t or don’t want to use “hacks” like the PS3 above, you can still buy a newer version of this drone, which comes with controller included and costs even a bit less: 34 USD

Eachine E52 WiFi FPV Selfie Drone With High Hold Mode Foldable Arm RC Quadcopter RTF

But it uses a different type of battery hat I don’t really like. E.g. the E50 model supports even the smaller batteries of my Eachine H8 mini drone, and since I have a 5-pack + charger I can use them also for the E50 model, which is quite nice.

Mini Review

From what I’ve tested, this is the 1st mini drone I’ve ever had with a built-in barometer for this price. The video quality is not good, check my video and see the footage I took. I do drone videos and the footage I took is unusable. Controlling it via smartphone or tablet can be a plus or a minus. I’m used to remote controllers and I hate controlling a drone with a tablet…


  • very small, can fit your pocket
  • altitude hold
  • really a true new awesome experience controlling this drone with the PS3 hack (see above)


  • bad video quality, not stabilized at all
  • too light: a bit of wind and the drone is moving around
  • sub-optimal touchscreen control, can be frustrating sometimes
  • you can’t really use it for selfies as advertized

Pro or contra (depends on you): controllable via app.
If you intend using this to start the drone hobby, you will start wrong because you will focus on the app and not on the drone. Also, the control via app is very bad compared even to a mini remote controller available in other toy drones.

If you still wanna Order one, keep in mind you are buying just a toy!

Conclusion and my honest suggestion: for 15 USD you can buy a mini drone with remote controller, but no camera to distract you form flying. Check my mini drones comparison.

The price is ok, free delivery in many countries worldwide!