Software Engineer

I am a Software Engineer. I have a Bachelor (Honours) of Science in Information Technology from the University of Sunderland - Class of 2003. I have been developing software since 2001 when I was offered a role at CERN as part of their Technical Student Programme.

By 2016 I had grown really tired of the software industry and by the end of 2019 Apple killed whatever excitement I had left. I am not sure what the next 10 years will bring. What I do know is that my apettite to do work that is impactful has only grown bigger and stronger. Great people make me tick more than anything.

I am also tired.

Standing on the shoulders of giants

Alamofire

        return sessionManager.upload(multipartFormData: { multipartFormData in
            multipartFormData.append(export.url, withName: "ipa")
            multipartFormData.append(export.manifest.url, withName: "plist")
        }, with: urlRequest, queue: self.queue, encodingCompletion: { result in
            
            switch result {
            case .success(let upload, _, _):
                upload.validate().responseData(queue: self.queue) { response in
                    switch (response.result, response.result.value) {
                    case (.failure(let error), _):
                        switch error {
                        case let error as AFError where error.isResponseSerializationError:
                            DispatchQueue.main.async{
                                completion(nil, nil)
                            }
                        case let error as AFError where error.isResponseValidationError:
                            switch (error.responseCode, response.data) {
                            case (401, let data?):
                                if let response = String(data: data, encoding: .utf8), let reason = SubscriptionError.UnauthorisationReason(rawValue: response) {
                                    DispatchQueue.main.async{
                                        completion(nil, SubscriptionError.unauthorised(reason:reason))
                                    }
                                } else {
                                    DispatchQueue.main.async{
                                        completion(nil, SubscriptionError.unauthorised(reason: nil))
                                    }
                                }