My first day with Android Studio

Introduction

The goal of this article was to take a look at the latest Android Studio (v0.2.5) and see where it would take me in a single day.

For me an IDE should be simple, straightforward and hassle-free. The big pain in Android development has always been the IDE and more specifically the tooling around it. Somehow the Eclipse plugins never worked well with the core Android tools and build system. Third party tools and plugins to offload dependency management to Maven were also far from ideal.

In short, it was a difficult marriage that ultimately led to choosing IntelliJ IDEA as the preferred platform for Android Development Tooling.

Unfortunately this again left developers with a 0.x product, meaning it’s going to be very rough around the edges. It’s a very difficult decision to make for developers. Stick with something you know but that is far from ideal, or go with something entirely new that is supposed to be better, but in reality could also take a very long time before it reaches some kind of stability.

For me another added complexity was a base platform that I didn’t know at all (IntelliJ IDEA) and a new build system (Gradle) that also isn’t fully featured yet for Android development.

But I decided to invest a single day on Android Studio and try to come to some kind of conclusion, while documenting the process along the way.

So here we go….

The project.

I’ll cover the installation and configuration of the IDE and I’ll also convert one of my Mavenized Eclipse ADT projects so that it can run in Android Studio.

The reason why I chose this particular project is because it contains a number of third party dependencies and also relies on a number of Android Library projects. I wanted to see how easy it was to

import the project in Android Studio

build and package the project

run the project from the IDE

debug the project.

Keep in mind that this is my first day with Android Studio, and I have never used IntelliJ IDEA before.

Installation

The download link on the Android Studio page provides an Android Studio v0.2.0 download. Installation is very straightforward (next-next-finish).

When starting for the first time it told me that an update was available. There was no update button so I had to create a new project before being able to enter the Studio and perform the update.

Downloading and installing the v0.2.5 went very smooth and I urge you to use the latest version of Android Studio as it is still under heavy development.

Exporting from Eclipse

I first tried exporting my Eclipse ADT project using the Eclipse Export wizard to generate the gradle build files but that was a no-go.

I had a sample Android project in Eclipse (Mavenized) that had several dependencies to standard third party JARS and library projects (Google Play Services., AppCompat) and the Android Support Library. So this seemed like a good fit to get up and running in Android Studio.

Unfortunately things got off to a bad start when exporting the Gradle Build files failed (silently).

I managed to see this in the logs but just gave up on it. Apparantly the export is only good for small standalone projects so I didn’t bother with it anymore.

Root exception: java.lang.IllegalArgumentException: Path must include project and resource name: /settings.gradle at org.eclipse.core.runtime.Assert.isLegal(Assert.java:63) at org.eclipse.core.internal.resources.Workspace.newResource(Workspace.java:2169) at org.eclipse.core.internal.resources.Container.getFile(Container.java:208) at com.android.ide.eclipse.adt.internal.wizards.exportgradle.BuildFileCreator.createBuildFiles(BuildFileCreator.java:146)

Setup

The first thing you need to do is to ensure that our SDK Manager components are up to date. If you’ve used Eclipse ADT before keep in mind that Android Studio uses a different SDK location. If you want to keep that location you’ll need to do all your updates again.

Dependency Management

Gradle is compatible with both Maven and Ivy repositories so it makes sense to leverage the Maven integration (as a lot of the code I have here depends on Maven).

In that respect, the Android SDK contains 2 very importing components (in the Extras folder)

Android Support Repository

Google Repository

These are needed to pull in the dependencies that we’ll see later on.

These components are Maven repositories and the Gradle plugin automatically add them to its list of known repositories. They gives you access to the following artifacts:

com.android.support:support-v4:13.0.0

com.android.support:support-v13:13.0.0

com.android.support:gridlayout-v7:13.0.0

com.google.android.gms:play-services:3.1.36

The complete set of files can be found here:

The Android Support m2 repository

located at:

./android-studio/sdk/extras/android

containing the following files:

./m2repository/com/android/support/gridlayout-v7 ./m2repository/com/android/support/gridlayout-v7/13.0.0 ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.aar ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.aar.md5 ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.aar.sha1 ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.pom ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.pom.md5 ./m2repository/com/android/support/gridlayout-v7/13.0.0/gridlayout-v7-13.0.0.pom.sha1 ./m2repository/com/android/support/gridlayout-v7/maven-metadata.xml ./m2repository/com/android/support/gridlayout-v7/maven-metadata.xml.md5 ./m2repository/com/android/support/gridlayout-v7/maven-metadata.xml.sha1 ./m2repository/com/android/support/support-v13 ./m2repository/com/android/support/support-v13/13.0.0 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-javadoc.jar ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-javadoc.jar.md5 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-javadoc.jar.sha1 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-sources.jar ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-sources.jar.md5 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0-sources.jar.sha1 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.jar ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.jar.md5 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.jar.sha1 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.pom ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.pom.md5 ./m2repository/com/android/support/support-v13/13.0.0/support-v13-13.0.0.pom.sha1 ./m2repository/com/android/support/support-v13/maven-metadata.xml ./m2repository/com/android/support/support-v13/maven-metadata.xml.md5 ./m2repository/com/android/support/support-v13/maven-metadata.xml.sha1 ./m2repository/com/android/support/support-v4 ./m2repository/com/android/support/support-v4/13.0.0 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-javadoc.jar ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-javadoc.jar.md5 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-javadoc.jar.sha1 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-sources.jar ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-sources.jar.md5 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0-sources.jar.sha1 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.jar ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.jar.md5 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.jar.sha1 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.pom ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.pom.md5 ./m2repository/com/android/support/support-v4/13.0.0/support-v4-13.0.0.pom.sha1 ./m2repository/com/android/support/support-v4/maven-metadata.xml ./m2repository/com/android/support/support-v4/maven-metadata.xml.md5 ./m2repository/com/android/support/support-v4/maven-metadata.xml.sha1 ./m2repository/NOTICE.txt ./m2repository/source.properties

Here Google also stores the sources for the support library.

The Google m2 repository

located at:

./android-studio/sdk/extras/google/m2repository

containing the following files:

./com/google/android/gms/play-services/3.1.36 ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.aar ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.aar.md5 ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.aar.sha1 ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.pom ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.pom.md5 ./com/google/android/gms/play-services/3.1.36/play-services-3.1.36.pom.sha1 ./com/google/android/gms/play-services/3.1.59 ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.aar ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.aar.md5 ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.aar.sha1 ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.pom ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.pom.md5 ./com/google/android/gms/play-services/3.1.59/play-services-3.1.59.pom.sha1 ./com/google/android/gms/play-services/3.2.25 ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.aar ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.aar.md5 ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.aar.sha1 ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.pom ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.pom.md5 ./com/google/android/gms/play-services/3.2.25/play-services-3.2.25.pom.sha1 ./com/google/android/gms/play-services/maven-metadata.xml ./com/google/android/gms/play-services/maven-metadata.xml.md5 ./com/google/android/gms/play-services/maven-metadata.xml.sha1 ./source.properties

Created a simple project

I then proceeded to create a simple Android project in Android Studio to get a feel on the structure of a project.

build.gradle vs pom.xml

I noticed there were 2 build.gradle files. The nested one by default looks like this:

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 7 targetSdkVersion 16 } } dependencies { compile 'com.android.support:support-v4:18.0.0' }

The project that I wanted to convert was already mavenized and aleady had a pom.xml. In order to have depedency management up and running in Eclipse ADT you basically need 3 things

The pom.xml looked like this:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ecs</groupId> <artifactId>com.ecs.foursquare</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>apk</packaging> <name>com.ecs.foursquare</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <platform.version>4.3_r1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> <project.http.version>1.16.0-rc</project.http.version> <project.oauth.version>1.16.0-rc</project.oauth.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.google.android.gms</groupId> <artifactId>google-play-services</artifactId> <version>10</version> <type>apklib</type> </dependency> <dependency> <groupId>com.google.android.gms</groupId> <artifactId>google-play-services</artifactId> <version>10</version> <type>jar</type> </dependency> <dependency> <groupId>fi.foyt</groupId> <artifactId>foursquare-api</artifactId> <version>1.0.2</version> <exclusions> <exclusion> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> </exclusion> </exclusions> </dependency> <!-- Notice how we use groupId=android and artifactId=android here. These versions (coming from https://github.com/mosabua/maven-android-sdk-deployer) don't contain xpp --> <dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>${platform.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v7-appcompat</artifactId> <version>18</version> <type>apklib</type> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v7-appcompat</artifactId> <version>18</version> <type>jar</type> </dependency> <dependency> <groupId>android.support</groupId> <artifactId>compatibility-v4</artifactId> <version>18</version> <type>jar</type> </dependency> <dependency> <groupId>com.google.oauth-client</groupId> <artifactId>google-oauth-client</artifactId> <version>1.16.0-rc</version> <exclusions> <exclusion> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.google.http-client</groupId> <artifactId>google-http-client-jackson2</artifactId> <version>1.16.0-rc</version> <exclusions> <exclusion> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <sourceDirectory>src</sourceDirectory> <pluginManagement> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>${android.plugin.version}</version> <extensions>true</extensions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <sdk> <platform>17</platform> </sdk> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>foursquareapijava</id> <name>Foursquare V2 API for Java Repository</name> <url>http://foursquare-api-java.googlecode.com/svn/repository</url> </repository> </repositories> </project>

A couple of notes on this pom

It uses the android-maven-plugin to configure the platform so that the maven build can trigger the underlying Android build.

It contains core android platform dependencies.

It contains dependencies to Android Library Projects (Google Play Services / AppCompat)

It contains dependencies to other third party JARs (foursquare api, google oauth2 libraries, ….)

It contains a reference to the googlecode maven repository

We sometimes needed to exclude dependencies

There was an issue in M2E that prevented this from working smootly (although it was possible and a fix is underway).

Converting this file was fairly straightforward. It was simply a matter of

configuring our dependencies and excludes

configuring the googlecode repository

The complete gradle file looks like this

buildscript { repositories { mavenCentral() maven {url 'http://foursquare-api-java.googlecode.com/svn/repository'} } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' repositories { mavenCentral() maven {url 'http://foursquare-api-java.googlecode.com/svn/repository'} } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 17 } } dependencies { compile 'com.android.support:support-v4:18.0.0' compile 'com.google.android.gms:play-services:3.1.36' compile 'com.google.oauth-client:google-oauth-client:1.16.0-rc' compile 'com.google.http-client:google-http-client-jackson2:1.16.0-rc' compile ('fi.foyt:foursquare-api:1.0.2') { exclude group: 'com.google.appengine', module: 'appengine-api-1.0-sdk' } compile 'com.android.support:appcompat-v7:18.0.+' }

The nice thing about this is that it is very concise. Everything is in a single file and that’s all you need to get the dependencies up and running. No need to import library projects in your workspace or prepare maven repositories yourself. Everything is pretty well handled by the IDE and the SDK Manager.

Unfortunately, I didn’t find an easy way to “import” or “convert” my existing ADT project into Android Studio. The standard project layout is totally different so I ended up manually copying my java sources and other resources from ADT to Android Studio.

After a while I had everything in a compileable state.

So it was time to build / package and deploy the project.

Errors

Missing dependencies during build

Errors started occurring when I added a play-services:3.1.36+ dependency in my gradle file. I didn’t update the android support and the google repository yet (through the SDK manager)

Gradle: A problem occurred configuring project ':MyApplication'. > Failed to notify project evaluation listener. > Could not resolve all dependencies for configuration ':MyApplication:_DebugCompile'. > Could not find any version that matches com.google.android.gms:play-services:3.1.36+. Required by: MyApplicationProject:MyApplication:unspecified

Manifest merge issue during build

After updating the repos the error went away but was replaced with this error:

Gradle: Execution failed for task ':MyApplication:processDebugManifest'. > Manifest merging failed. See console for more info.

Removing the play-services:3.1.36 dependency causes the project to build again so I knew the issue was related to that.

Having no idea where the console is in Studio, I noticed something blinking in the bottom right of my screen

Weird unknown error.

I got a popup showing the following error (most likely not related at all with why my project wasn’t building).

Unable to load library 'libwinpty': The specified module could not be found. : Unable to load library 'libwinpty': The specified module could not be found. java.lang.UnsatisfiedLinkError: Unable to load library 'libwinpty': The specified module could not be found. at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:169) at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:242) at com.sun.jna.Library$Handler.<init>(Library.java:140) at com.sun.jna.Native.loadLibrary(Native.java:368) at com.sun.jna.Native.loadLibrary(Native.java:353) at com.pty4j.windows.WinPty.<clinit>(WinPty.java:96) at com.pty4j.windows.WinPtyProcess.<init>(WinPtyProcess.java:20) at com.pty4j.PtyProcess.exec(PtyProcess.java:36) at com.pty4j.PtyProcess.exec(PtyProcess.java:31) at org.jetbrains.plugins.terminal.LocalTerminalDirectRunner.createProcess(LocalTerminalDirectRunner.java:74) at org.jetbrains.plugins.terminal.LocalTerminalDirectRunner.createProcess(LocalTerminalDirectRunner.java:34) at org.jetbrains.plugins.terminal.AbstractTerminalRunner.openSession(AbstractTerminalRunner.java:210) at org.jetbrains.plugins.terminal.AbstractTerminalRunner.createTerminalWidget(AbstractTerminalRunner.java:94) at org.jetbrains.plugins.terminal.TerminalView.initTerminal(TerminalView.java:36) at org.jetbrains.plugins.terminal.TerminalToolWindowFactory.createToolWindowContent(TerminalToolWindowFactory.java:14) at com.intellij.openapi.wm.impl.ToolWindowImpl.ensureContentInitialized(ToolWindowImpl.java:449) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$11.run(ToolWindowManagerImpl.java:521) at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:347) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:679) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:507) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:332) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

This error was probably unrelated but it just goes to show we’re dealing with an alpha release here.

Very little feedback on build errors

The big problem here was that I was faced with a build error, but the IDE was unable to tell me what exactly went wrong during a build. I’ve looked verywhere and might have missed it, but the only thing I saw was this

For me this is a big shortcoming of the IDE. If an IDE cannot tell you why it is refusing to build our project and you need to open up a command-line to do an offline build to get some decent output is a big no-no.

I did noticed this in the IDE

This allows you to open a log file on your file system to see the actual error that occured. Obviously this is not integrated with the development environment.

BUILDER_PROCESS [stderr]: [AndroidManifest.xml:3, AndroidManifest.xml:3] Main manifest has <uses-sdk android:minSdkVersion='7'> but library uses minSdkVersion='8'

Running the build from the command line (using gradlew) also revealed the actual error.

Corei5Amt@COREI5AMT-PC ~/AndroidStudioProjects/MyApplicationProject (master) $ ./gradlew installDebug Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0 :MyApplication:prepareComGoogleAndroidGmsPlayServices3136Library UP-TO-DATE :MyApplication:prepareDebugDependencies :MyApplication:compileDebugAidl UP-TO-DATE :MyApplication:generateDebugBuildConfig UP-TO-DATE :MyApplication:mergeDebugAssets UP-TO-DATE :MyApplication:compileDebugRenderscript UP-TO-DATE :MyApplication:mergeDebugResources UP-TO-DATE :MyApplication:processDebugManifest [AndroidManifest.xml:3, AndroidManifest.xml:3] Main manifest has <uses-sdk android:minSdkVersion='7'> but library uses minSdkVersion='8' :MyApplication:processDebugManifest FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':MyApplication:processDebugManifest'. > Manifest merging failed. See console for more info. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED Total time: 4.288 secs Corei5Amt@COREI5AMT-PC ~/AndroidStudioProjects/MyApplicationProject (master)

Attaching sources to gradle dependencies

Another problem I had was with automatically attaching the sources to my Gradle dependencies. As stated earlier Gradle uses maven dependencies and these come with source attachments. However it seems that Android Studio was unable to link the sources automatically as I was confronted with this.

Obviously it is possible to manually link all these sources together but this should really be automated.

Conclusions and TODOs

I don’t know enough about IntelliJ IDEA to navigate quickly around the workbench. I’ve found this to be a big handicap. Not knowing what views to open or how to configure something is a big pain. Need to up my IntelliJ IDEA skills.

Very little feedback on build errors inside the IDE. People suggest resorting to the command line or looking at log files externally. (wonder what the “I” stands for in IDE).

Converting a Mavenized Eclipse ADT Project to an Android Studio Gradle Project wasn’t all that difficult when done manually. The gradle syntax is a lot more concise and to the point. I do need to find out if there’s an automated way of converting / importing a maven project into a Gradle project.

As I was finishing up the article and internal IDE error occured that seems to have broken my Project. I’m unable to launch the application anymore in Android Studio due to an invalid Manifest and missing android facets .

that seems to have broken my Project. I’m unable to launch the application anymore in Android Studio due to an and . We are basically alpha-testing for Google here. The Android IDE realm has always been a difficult one, and with Android Studio it’s no different. It is however a clear departure from Eclipse and Google wants to promote this as the standard it seems.

Android Studio looks promising but I’ve found it to be very rough around the edges and lacking some key features.

The Android tools team, Tor Norbye, Xavier Ducrohet and Alex Ruiz really do a super-job in getting this off the ground and helping developers on the G+ community and in the Google Groups. A big shout out to them !

At the end of the day I thought I made good progress but was a bit disappointed that the entire thing broke down on me, and that it’s going to cost me some hours to get it working again. However, I’m hoping to continue with it tomorrow and see how far we get.

To be continued.

References