diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2afa2e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..3bdd058 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/codeSegment/bin/Debug/net6.0/codeSegment.dll", + "args": [], + "cwd": "${workspaceFolder}/codeSegment", + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..9f15fec --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/codeSegment/codeSegment.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/codeSegment/codeSegment.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/codeSegment/codeSegment.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/ConferenceApiCode.cs b/ConferenceApiCode.cs new file mode 100644 index 0000000..25722db --- /dev/null +++ b/ConferenceApiCode.cs @@ -0,0 +1,28 @@ +public class Script : ScriptBase +{ + public override async Task ExecuteAsync() + { + if(this.Context.OperationId == "GetSessions") + { + return await this.HandleGetSessions().ConfigureAwait(false); + } + } + + private async Task HandleGetSessions() + { + HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken); + + if(response.IsSuccessStatusCode) + { + //get the response as a string + var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(continueOnCapturedContext: false); + + //convert the string to a json object + var rawResultAsJson = JObject.Parse(responseString); + + + } + + return response; + } +} \ No newline at end of file diff --git a/README.md b/README.md index 20bbee0..2a11dd5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,20 @@ -# CustomConnectorCodeProject -Console project for creating 'Code' section of a custom connector. Includes appropriately named classes and interfaces so all you need to do is upload the Script.cs file. +# Custom Connector Code Project +This is dotnet Core v6 console project for locally creating the 'Code' section of a custom connector. This project provides everything you need to develop the script on your machine using all of the appropriately named classes and interfaces that exist in the custom connector. Write your code in this project and then upload the Script.cs file into the Code section of you custom connector once your local testing is complete. + +## Getting Started +The 'main' branch of this repository contains the basic structure required for you to add your code. The following variables are available in the Program.cs file: +* CustomConnectorUrl (Required) - The URL of the API used by the custom connector. +* OperationID (Required) - The operation ID as defined in the custom connector. This code only handles 1 operation ID, but there could be multiple operations and this allows the code flow to process the appropriate response. +* OcpApimSubscriptionKey (Optional) - The API key used by the custom connector to authenticate against API-M. This is only required if the API is behind a Subscription Key secured API-M instance. + +With these values added to the Program.cs file, you can run the project and it will return the Http response from the API. At this point, you can make the changes to the response using the Script.cs file. + + +There is also a 'sample' branch which shows a working example based on the Conference API scenario. This branch is a good starting point if you are new to custom connectors and want to see a working example of the code section. + +## Custom Connector Documentation +[Overview of Power Platform Custom Connectors](https://docs.microsoft.com/en-us/connectors/custom-connectors/) + +[Creating a Custom Connector from Scratch](https://docs.microsoft.com/en-us/connectors/custom-connectors/define-blank) + +[Writing Code in a Custom Connector](https://docs.microsoft.com/en-us/connectors/custom-connectors/write-code) \ No newline at end of file diff --git a/codeSegment/.vscode/launch.json b/codeSegment/.vscode/launch.json new file mode 100644 index 0000000..4adb776 --- /dev/null +++ b/codeSegment/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/net6.0/codeSegment.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/codeSegment/.vscode/tasks.json b/codeSegment/.vscode/tasks.json new file mode 100644 index 0000000..3a19fe4 --- /dev/null +++ b/codeSegment/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/codeSegment.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/codeSegment.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/codeSegment.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/codeSegment/Program.cs b/codeSegment/Program.cs new file mode 100644 index 0000000..38d1c48 --- /dev/null +++ b/codeSegment/Program.cs @@ -0,0 +1,40 @@ +// See https://aka.ms/new-console-template for more information +using System.Net.Http.Headers; + +//variables: +//CustomConnectorUrl(Required) - url of the api used in the custom connector. +string CustomConnectorUrl = "https://conferenceapi.azurewebsites.net/sessions";// "[REPLACE WITH YOUR CUSTOM CONNECTOR URL]"; + +//OperationId(Required) - the operation id for the custom connector. +string OperationId = "GetSessions";//"[REPLACE WITH YOUR OPERATION ID]"; + +//Ocp-Apim-Subscription-Key(Optional) - the subscription key for the custom connector if using a service like API-M. +string OcpApimSubscriptionKey = "[REPLACE WITH YOUR OCP APIM SUBSCRIPTION KEY]"; + +try +{ + //create the HttpRequest that matches the request on the custom connector + HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, CustomConnectorUrl); + requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + //ADD ANY ADDITIONAL HEADERS HERE + + //API-Management Subscription Key - uncomment if using API-M + // requestMessage.Headers.Add("Ocp-Apim-Subscription-Key", OcpApimSubscriptionKey); + + //create a new script object + var myScript = new Script(); + + //create a scriptcontext object and assign it to the Context property of the script class + var myScriptContext = new ScriptContext(OperationId, requestMessage); + myScript.Context = myScriptContext; + + //use the script object to execute the api call + HttpResponseMessage response = myScript.ExecuteAsync().ConfigureAwait(true).GetAwaiter().GetResult(); + + //write the results to the console. + Console.WriteLine(response.Content.ReadAsStringAsync().Result); +} +catch (Exception ex) +{ + Console.WriteLine(ex.Message); +} diff --git a/codeSegment/Script.cs b/codeSegment/Script.cs new file mode 100644 index 0000000..4a0642f --- /dev/null +++ b/codeSegment/Script.cs @@ -0,0 +1,112 @@ +using Newtonsoft.Json.Linq; +using System.Net; +using System.Net.Http; + +public class Script : ScriptBase +{ + + public Script() + { + + } + public override StringContent CreateJsonContent(string serializedJson) + { + return new StringContent(serializedJson); + } + + public override async Task ExecuteAsync() + { + try + { + if(this.Context.OperationId == "GetSessions") + { + return await this.HandleGetSessions(); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.BadRequest); + response.Content = CreateJsonContent($"Unknown operation ID '{this.Context.OperationId}'"); + return response; + } + + private async Task HandleGetSessions() + { + HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken); + + if(response.IsSuccessStatusCode) + { + //get the response as a string + var responseString = await response.Content.ReadAsStringAsync(); + + //convert the string to a json object + var rawResultAsJson = JObject.Parse(responseString); + + //create the empty shells + var responseItems = @"{'collection':{'items':[]}}"; + + //create the JObject Handles + JObject itemsTemplateParsed = JObject.Parse(responseItems); + JArray itemsTemplateArray = (JArray)itemsTemplateParsed["collection"]["items"]; + + try + { + if(rawResultAsJson != null) + { + //get the array of items from the response + var itemsFromResponse = (JArray)rawResultAsJson["collection"]["items"]; + + + //loop through the items in the response + foreach(var item in itemsFromResponse) + { + //zero out the variables + string currTitle = string.Empty; + string currDate = string.Empty; + string currSpeaker = string.Empty; + + //get the collection of items in the data array + var dataArray = (JArray)item["data"]; + + //loop through each item to find the title, timeslot and speaker + foreach(var dItem in dataArray) + { + if(dItem["name"].ToString() == "Title") + { + currTitle = dItem["value"].ToString(); + + } + else if(dItem["name"].ToString() == "Timeslot") + { + currDate = dItem["value"].ToString(); + } + else if(dItem["name"].ToString() == "Speaker") + { + currSpeaker = dItem["value"].ToString(); + } + } + JObject thisItem = new JObject( + new JProperty("href", item["href"]), + new JProperty("title", currTitle), + new JProperty("timeslot", currDate), + new JProperty("speaker", currSpeaker) + ); + itemsTemplateArray.Add(thisItem); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + + response.Content = CreateJsonContent(itemsTemplateParsed.ToString()); + + } + + return response; + } +} + diff --git a/codeSegment/ScriptBase.cs b/codeSegment/ScriptBase.cs new file mode 100644 index 0000000..41443e2 --- /dev/null +++ b/codeSegment/ScriptBase.cs @@ -0,0 +1,40 @@ +using System.Net.Http; +public abstract class ScriptBase +{ + // Context object + public IScriptContext Context { get; set;} //added the setter, but only setting it outside of the Script impelementation. + + // CancellationToken for the execution + public CancellationToken CancellationToken { get; } + + // Helper: Creates a StringContent object from the serialized JSON + public abstract StringContent CreateJsonContent(string serializedJson); + + // Abstract method for your code + public abstract Task ExecuteAsync(); +} + +public interface IScriptContext +{ + // Correlation Id + string CorrelationId { get; } + + // Connector Operation Id + string OperationId { get; set; } //added the setter, but only setting it outside of the Script impelementation. + + // Incoming request + HttpRequestMessage Request { get; set;} //added the setter, but only setting it outside of the Script impelementation. + + // Logger instance + ILogger Logger { get; } + + // Used to send an HTTP request + // Use this method to send requests instead of HttpClient.SendAsync + Task SendAsync( + HttpRequestMessage request, + CancellationToken cancellationToken); +} + +public interface ILogger +{ +} \ No newline at end of file diff --git a/codeSegment/ScriptContext.cs b/codeSegment/ScriptContext.cs new file mode 100644 index 0000000..12e9aad --- /dev/null +++ b/codeSegment/ScriptContext.cs @@ -0,0 +1,35 @@ +// See https://aka.ms/new-console-template for more information + +public class ScriptContext : IScriptContext +{ + public string CorrelationId { get; } + public string OperationId { get; set; } + public HttpRequestMessage Request { get; set; } + public ILogger Logger { get; } + public CancellationToken CancellationToken { get; } + + public ScriptContext(string operationId, HttpRequestMessage request) + : this(operationId, request, null, CancellationToken.None) + { + } + + public ScriptContext(string operationId, HttpRequestMessage request, ILogger logger, CancellationToken cancellationToken) + { + OperationId = operationId; + Request = request; + Logger = logger; + CancellationToken = cancellationToken; + } + + public StringContent CreateJsonContent(string serializedJson) + { + return new StringContent(serializedJson); + } + + public async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + HttpClient client = new HttpClient(); + + return await client.SendAsync(request, cancellationToken); + } +} \ No newline at end of file diff --git a/codeSegment/bin/Debug/net6.0/Newtonsoft.Json.dll b/codeSegment/bin/Debug/net6.0/Newtonsoft.Json.dll new file mode 100644 index 0000000..1ffeabe Binary files /dev/null and b/codeSegment/bin/Debug/net6.0/Newtonsoft.Json.dll differ diff --git a/codeSegment/bin/Debug/net6.0/codeSegment.deps.json b/codeSegment/bin/Debug/net6.0/codeSegment.deps.json new file mode 100644 index 0000000..bc605e4 --- /dev/null +++ b/codeSegment/bin/Debug/net6.0/codeSegment.deps.json @@ -0,0 +1,41 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v6.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v6.0": { + "codeSegment/1.0.0": { + "dependencies": { + "Newtonsoft.Json": "13.0.1" + }, + "runtime": { + "codeSegment.dll": {} + } + }, + "Newtonsoft.Json/13.0.1": { + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": { + "assemblyVersion": "13.0.0.0", + "fileVersion": "13.0.1.25517" + } + } + } + } + }, + "libraries": { + "codeSegment/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Newtonsoft.Json/13.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", + "path": "newtonsoft.json/13.0.1", + "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/codeSegment/bin/Debug/net6.0/codeSegment.dll b/codeSegment/bin/Debug/net6.0/codeSegment.dll new file mode 100644 index 0000000..9797552 Binary files /dev/null and b/codeSegment/bin/Debug/net6.0/codeSegment.dll differ diff --git a/codeSegment/bin/Debug/net6.0/codeSegment.exe b/codeSegment/bin/Debug/net6.0/codeSegment.exe new file mode 100644 index 0000000..9a58bed Binary files /dev/null and b/codeSegment/bin/Debug/net6.0/codeSegment.exe differ diff --git a/codeSegment/bin/Debug/net6.0/codeSegment.pdb b/codeSegment/bin/Debug/net6.0/codeSegment.pdb new file mode 100644 index 0000000..3e9f822 Binary files /dev/null and b/codeSegment/bin/Debug/net6.0/codeSegment.pdb differ diff --git a/codeSegment/bin/Debug/net6.0/codeSegment.runtimeconfig.json b/codeSegment/bin/Debug/net6.0/codeSegment.runtimeconfig.json new file mode 100644 index 0000000..4986d16 --- /dev/null +++ b/codeSegment/bin/Debug/net6.0/codeSegment.runtimeconfig.json @@ -0,0 +1,9 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "6.0.0" + } + } +} \ No newline at end of file diff --git a/codeSegment/codeSegment.csproj b/codeSegment/codeSegment.csproj new file mode 100644 index 0000000..11b28f3 --- /dev/null +++ b/codeSegment/codeSegment.csproj @@ -0,0 +1,14 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + diff --git a/codeSegment/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs b/codeSegment/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs new file mode 100644 index 0000000..36203c7 --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] diff --git a/codeSegment/obj/Debug/net6.0/apphost.exe b/codeSegment/obj/Debug/net6.0/apphost.exe new file mode 100644 index 0000000..9a58bed Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/apphost.exe differ diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfo.cs b/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfo.cs new file mode 100644 index 0000000..1437f38 --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("codeSegment")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("codeSegment")] +[assembly: System.Reflection.AssemblyTitleAttribute("codeSegment")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfoInputs.cache b/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfoInputs.cache new file mode 100644 index 0000000..f9ae9ed --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +1f62a0277114c8d68af2484aa0e5233e1443cf62 diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.GeneratedMSBuildEditorConfig.editorconfig b/codeSegment/obj/Debug/net6.0/codeSegment.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..8e47e35 --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,10 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = codeSegment +build_property.ProjectDir = c:\devPwrPlt\fusionDev\codeSegment\ diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.GlobalUsings.g.cs b/codeSegment/obj/Debug/net6.0/codeSegment.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.assets.cache b/codeSegment/obj/Debug/net6.0/codeSegment.assets.cache new file mode 100644 index 0000000..77a9b43 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/codeSegment.assets.cache differ diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.csproj.AssemblyReference.cache b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.AssemblyReference.cache new file mode 100644 index 0000000..6fb6022 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.AssemblyReference.cache differ diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.csproj.CopyComplete b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.CopyComplete new file mode 100644 index 0000000..e69de29 diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.csproj.CoreCompileInputs.cache b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..99b874e --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +d4aff01b8d82a257560d78c25b0d2d1789bf7df4 diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.csproj.FileListAbsolute.txt b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..4fb30bc --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.csproj.FileListAbsolute.txt @@ -0,0 +1,17 @@ +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\codeSegment.exe +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\codeSegment.deps.json +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\codeSegment.runtimeconfig.json +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\codeSegment.dll +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\codeSegment.pdb +C:\devPwrPlt\fusionDev\codeSegment\bin\Debug\net6.0\Newtonsoft.Json.dll +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.csproj.AssemblyReference.cache +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.GeneratedMSBuildEditorConfig.editorconfig +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.AssemblyInfoInputs.cache +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.AssemblyInfo.cs +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.csproj.CoreCompileInputs.cache +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.csproj.CopyComplete +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.dll +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\refint\codeSegment.dll +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.pdb +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\codeSegment.genruntimeconfig.cache +C:\devPwrPlt\fusionDev\codeSegment\obj\Debug\net6.0\ref\codeSegment.dll diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.dll b/codeSegment/obj/Debug/net6.0/codeSegment.dll new file mode 100644 index 0000000..9797552 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/codeSegment.dll differ diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.genruntimeconfig.cache b/codeSegment/obj/Debug/net6.0/codeSegment.genruntimeconfig.cache new file mode 100644 index 0000000..7182874 --- /dev/null +++ b/codeSegment/obj/Debug/net6.0/codeSegment.genruntimeconfig.cache @@ -0,0 +1 @@ +45ec995123156f6b7b2bca2c14ae2ca3d66b718b diff --git a/codeSegment/obj/Debug/net6.0/codeSegment.pdb b/codeSegment/obj/Debug/net6.0/codeSegment.pdb new file mode 100644 index 0000000..3e9f822 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/codeSegment.pdb differ diff --git a/codeSegment/obj/Debug/net6.0/ref/codeSegment.dll b/codeSegment/obj/Debug/net6.0/ref/codeSegment.dll new file mode 100644 index 0000000..ca89a72 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/ref/codeSegment.dll differ diff --git a/codeSegment/obj/Debug/net6.0/refint/codeSegment.dll b/codeSegment/obj/Debug/net6.0/refint/codeSegment.dll new file mode 100644 index 0000000..ca89a72 Binary files /dev/null and b/codeSegment/obj/Debug/net6.0/refint/codeSegment.dll differ diff --git a/codeSegment/obj/codeSegment.csproj.nuget.dgspec.json b/codeSegment/obj/codeSegment.csproj.nuget.dgspec.json new file mode 100644 index 0000000..40234a8 --- /dev/null +++ b/codeSegment/obj/codeSegment.csproj.nuget.dgspec.json @@ -0,0 +1,74 @@ +{ + "format": 1, + "restore": { + "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj": {} + }, + "projects": { + "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj", + "projectName": "codeSegment", + "projectPath": "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj", + "packagesPath": "C:\\Users\\rross\\.nuget\\packages\\", + "outputPath": "C:\\devPwrPlt\\fusionDev\\codeSegment\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\rross\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.1, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.300-preview.22204.3\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/codeSegment/obj/codeSegment.csproj.nuget.g.props b/codeSegment/obj/codeSegment.csproj.nuget.g.props new file mode 100644 index 0000000..86082c6 --- /dev/null +++ b/codeSegment/obj/codeSegment.csproj.nuget.g.props @@ -0,0 +1,17 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\rross\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + PackageReference + 6.2.0 + + + + + + + \ No newline at end of file diff --git a/codeSegment/obj/codeSegment.csproj.nuget.g.targets b/codeSegment/obj/codeSegment.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/codeSegment/obj/codeSegment.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/codeSegment/obj/project.assets.json b/codeSegment/obj/project.assets.json new file mode 100644 index 0000000..dda39dc --- /dev/null +++ b/codeSegment/obj/project.assets.json @@ -0,0 +1,121 @@ +{ + "version": 3, + "targets": { + "net6.0": { + "Newtonsoft.Json/13.0.1": { + "type": "package", + "compile": { + "lib/netstandard2.0/Newtonsoft.Json.dll": {} + }, + "runtime": { + "lib/netstandard2.0/Newtonsoft.Json.dll": {} + } + } + } + }, + "libraries": { + "Newtonsoft.Json/13.0.1": { + "sha512": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", + "type": "package", + "path": "newtonsoft.json/13.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.md", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/netstandard1.3/Newtonsoft.Json.dll", + "lib/netstandard1.3/Newtonsoft.Json.xml", + "lib/netstandard2.0/Newtonsoft.Json.dll", + "lib/netstandard2.0/Newtonsoft.Json.xml", + "newtonsoft.json.13.0.1.nupkg.sha512", + "newtonsoft.json.nuspec", + "packageIcon.png" + ] + } + }, + "projectFileDependencyGroups": { + "net6.0": [ + "Newtonsoft.Json >= 13.0.1" + ] + }, + "packageFolders": { + "C:\\Users\\rross\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj", + "projectName": "codeSegment", + "projectPath": "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj", + "packagesPath": "C:\\Users\\rross\\.nuget\\packages\\", + "outputPath": "C:\\devPwrPlt\\fusionDev\\codeSegment\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\rross\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.1, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.300-preview.22204.3\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/codeSegment/obj/project.nuget.cache b/codeSegment/obj/project.nuget.cache new file mode 100644 index 0000000..e53b87f --- /dev/null +++ b/codeSegment/obj/project.nuget.cache @@ -0,0 +1,10 @@ +{ + "version": 2, + "dgSpecHash": "qHMzMHpG44LtsZYatncrqizkzlwQZ8rsgr21Dv69uYiq3MjidisUiw6hY0uGZIZZFtkC+Aa6B8UVSh3cPBRMaw==", + "success": true, + "projectFilePath": "C:\\devPwrPlt\\fusionDev\\codeSegment\\codeSegment.csproj", + "expectedPackageFiles": [ + "C:\\Users\\rross\\.nuget\\packages\\newtonsoft.json\\13.0.1\\newtonsoft.json.13.0.1.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/rawGetSessionsResponse.json b/rawGetSessionsResponse.json new file mode 100644 index 0000000..262284e --- /dev/null +++ b/rawGetSessionsResponse.json @@ -0,0 +1,3099 @@ +{ + 'collection': { + 'version': '1.0', + 'links': [], + 'items': [{ + 'href': 'https://conferenceapi.azurewebsites.net/session/100', + 'data': [{ + 'name': 'Title', + 'value': 'Keynote with Dan North - Jackstones: the Journey to Mastery' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Dan North' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/19' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/100/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/101', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAsync in C# 5\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Jon Skeet' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/6' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/101/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/102', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIntroducing Visual Studio 2013\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/102/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/103', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tCleaning up Code Smell\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Venkat Subramaniam' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/25' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/103/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/104', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tASP.NET Web API 2: HTTP Services for the Modern Web and Mobile Applications\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Daniel Roth' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/94' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/104/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/105', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tEventStore - an introduction to a DSD for event sourcing and notifications\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Liam Westley' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/91' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/105/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/106', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tData-Bind everything!\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Stuart Lodge' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/35' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/106/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/107', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tMaking Magic: Combining Data, Information, Services and Programming, at Internet-Scale\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Don Syme' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/2' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/107/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/108', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSimple.Web 101\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Mark Rendle' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/42' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/108/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/109', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tTen cool things we can do with popular JVM Languages\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Venkat Subramaniam' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/25' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/109/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/110', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tRx and the TPL: Cats and Dogs Living Together??\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Paul Betts' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/87' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/110/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/111', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tScripting your web API development using scriptcs\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Glenn Block' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/88' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/111/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/112', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Development Landscape Is Moving Extremely Fast! Here’s How To Move Faster.\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Jon Galloway' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/21' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/112/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/113', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tECMAScript 6: what’s next for JavaScript?\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Axel Rauschmayer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/10' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/113/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/114', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIntroduction to Windows Azure Part I\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Scott Guthrie' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/1' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/114/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/115', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDoing data science with F#\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Tomas Petricek' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/44' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/115/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/116', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tI want to develop for SharePoint, but I don’t know where to start\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Sahil Malik' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/17' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/116/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/117', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAdopting Continuous Delivery\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Jez Humble' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/9' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/117/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/118', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe missing link – hypermedia in Web API.\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Darrel Miller' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/95' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/118/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/119', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tCQRS with Erlang\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Bryan Hunter' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/86' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/119/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/120', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tCallable entities in ECMAScript 6\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Axel Rauschmayer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/10' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/120/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/121', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIntroduction to Windows Azure Part II\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Scott Guthrie' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/1' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/121/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/122', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDefending .NET/C# Applications - Layered Security\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Jon McCoy' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/98' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/122/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/123', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tTo Estimate or Not to Estimate – is that the question?\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Marit Rossnes' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/26' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/123/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/124', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Lean Enterprise\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Jez Humble' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/9' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/124/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/125', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAPI Client library V2\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Darrel Miller' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/95' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/125/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/126', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tA good SharePoint development machine\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Sahil Malik' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/17' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/126/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/127', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSemantics matter\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Jon Skeet' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/6' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/127/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/128', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tHerding Code Live - The Lightning Round\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/128/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/129', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWindows Azure Essentials\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/129/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/130', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tTesting of Mobile Apps with Calabash and Xamarin Test Cloud\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Karl Krukow' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/99' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/130/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/131', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAsynchrony in Node.js, let me count the\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Glenn Block' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/88' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/131/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/132', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tASP.NET and OWIN - Better Together\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Daniel Roth' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/94' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/132/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/133', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tLearning from Noda Time: a case study in API design and open source (good, bad and ugly)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Jon Skeet' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/6' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/133/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/134', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAn Introduction to Nancy\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Mathew McLoughlin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/31' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/134/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/135', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAgile Team Interactions Workshop - Room 8\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Jessie Shternshus' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/4' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/135/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/136', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tNDC Cage Match: Dynamic vs. Static with Gary Bernhardt and Jon Skeet.\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/136/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/137', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThrow away those training wheels, JavaScript without the frameworks\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Rob Ashton' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/90' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/137/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/138', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tHidden Complexity: Inside the Simple code\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Mark Rendle' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/42' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/138/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/139', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWhy Agile doesn't scale - and what you can do about it\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Dan North' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/19' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/139/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/140', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDemocratizing event processing at all scales and platforms with Reactive Extensions (Rx)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/140/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/141', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAdvanced techniques to implement, customize and manage a Nancy application\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '04 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Damian Hickey' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/40' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/141/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/200', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBuild Real World Cloud Apps using Windows Azure Part I\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Scott Guthrie' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/1' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/200/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/201', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tModern Architecture patterns for the cloud\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/201/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/202', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tA deep dive into the ASP.NET Web API runtime architecture\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Pedro Félix' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/37' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/202/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/203', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tFull Text Searching & Ranking with ElasticSearch and C#\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'JP Toto' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/60' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/203/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/204', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Hitchhikers guide to Object Orientated JavaScript\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Martin Beeby' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/75' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/204/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/205', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWindows Phone 8 Networking: HTTP, Bluetooth and NFC\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Andy Wigley' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/74' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/205/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/206', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tjQuery Mobile and ASP.NET MVC\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Scott Allen' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/16' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/206/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/207', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBuild Real World Cloud Apps using Windows Azure Part II\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Scott Guthrie' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/1' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/207/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/208', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tOWASP Top Ten 2013\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Christian Wenz' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/72' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/208/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/209', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tPragmatic ASP.NET Web API Solutions - beyond ValuesController\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Christian Weyer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/59' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/209/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/210', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tYou Thought You Understood Multithreading\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Gael Fraiteur' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/92' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/210/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/211', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWrite massively-parallel GPU code for the browser with WebGL\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Steve Sanderson' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/84' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/211/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/212', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBuilding for Windows 8 and Windows Phone 8 with .NET and MVVM\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Mike Taulty' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/73' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/212/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/213', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSecrets of Awesome JavaScript API Design\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Brandon Satrom' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/79' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/213/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/214', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Reasonable Expectations of your new CTO.\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Robert C. Martin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/13' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/214/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/215', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBattle of the Mocking Frameworks\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Dror Helper' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/68' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/215/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/216', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSecuring ASP.NET Web API (v2)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Dominick Baier' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/7' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/216/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/217', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAngularJS – an Introduction for Windows developers\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Ingo Rammer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/97' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/217/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/218', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tStop Hiring Devops Experts (And Start Growing Them)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Jez Humble' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/9' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/218/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/219', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tReactive meta-programming with drones\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/219/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/220', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAutomating Testing in the big, bad Enterprise World\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Jeremy D. Miller' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/80' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/220/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/221', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tFunctional Programming: What? Why? When?\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Robert C. Martin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/13' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/221/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/222', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tScala for C# Developers\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'James Hughes' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/48' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/222/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/223', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tA technical Introduction to OAuth2, OpenID Connect and JSON Web Tokens: The Security Stack for modern Applications\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Dominick Baier' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/7' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/223/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/224', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSoftware Project Design\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Juval Lowy' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/33' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/224/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/225', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tHybrid & powerful mobile apps with PhoneGap & AngularJS\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Christian Weyer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/59' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/225/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/226', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tCreating Killer Windows Phone Apps\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Andy Wigley' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/74' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/226/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/227', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWEB API Panel Debate\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/227/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/228', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tInternals of security in ASP.NET\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Brock Allen' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/89' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/228/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/229', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWindows 8.1 Apps with JavaScript 101\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Christian Wenz' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/72' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/229/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/230', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tActor based programming using Orleans\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Richard Astbury' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/66' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/230/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/231', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tArchitecting, designing and coding for change: Applying the Life Preserver to build adaptable software\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Russ Miles' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/70' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/231/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/232', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tC++ style\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Hubert Matthews' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/67' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/232/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/233', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAngularJS DIrectives And The Computer Science Of JavaScript\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Burke Holland' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/41' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/233/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/234', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIdentity management in ASP.NET\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Brock Allen' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/89' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/234/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/235', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tTesting in AngularJS\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/235/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/236', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tYes, you can! Tooling and Debugging for JavaScript\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Ingo Rammer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/97' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/236/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/237', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tHow I Learned to Stop Worrying and Love Flexible Scope\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/237/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/238', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tProgramming Diversity\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Ashe Dryden' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/20' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/238/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/239', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDomain driven design with the F# type system\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Scott Wlaschin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/63' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/239/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/240', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tRapid Problem Solving Workshop - Room 8\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Jessie Shternshus' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/4' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/240/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/241', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tPutting the Microsoft Design Language to work\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Laurent Bugnion' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/64' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/241/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/242', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tF# in Finance\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Phillip Trelford' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/11' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/242/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/243', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWhat's wrong with my site? Lean DevOps for Azure\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 17:40 - 18:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/243/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/244', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tZen of Architecture\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Juval Lowy' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/33' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/244/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/245', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tTest Your Javascript...with the Help of D&D\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '05 December 2013 17:40 - 18:40' + }, + { + 'name': 'Speaker', + 'value': 'Tim G. Thomas' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/65' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/245/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/300', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tKnocking it out of the park, with Knockout.JS\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/300/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/301', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe C Word--Continuous\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Brian A. Randell' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/46' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/301/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/302', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAgile software architecture sketches\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Simon Brown' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/69' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/302/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/303', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tSecuring a modern JavaScript based single page web application\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Erlend Oftedal' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/47' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/303/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/304', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tPreCrime - The Future of Policing in the Era of Austerity\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Gary Short' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/39' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/304/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/305', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tGetting Agile with Scrum\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Mike Cohn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/12' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/305/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/306', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tHunting ASP.NET Performance Bugs\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 09:00 - 10:00' + }, + { + 'name': 'Speaker', + 'value': 'Tiberiu Covaci' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/38' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/306/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/307', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tASP.NET SignalR 2.0 (and beyond)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/307/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/308', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIntro to iOS & Android Apps with C# (using Xamarin)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Craig Dunn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/8' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/308/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/309', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBDD for financial calculations: Excel vs. Given-When-Then, or both?\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Gáspár Nagy' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/50' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/309/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/310', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tIt's a Kind of Magic\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Andy Clymer' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/51' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/310/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/311', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe tale about tiles\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Gill Cleeren' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/29' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/311/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/312', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAgile Estimating\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Mike Cohn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/12' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/312/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/313', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tFile -> new project to deploy in 10 minutes with TeamCity and Octopus Deploy\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 10:20 - 11:20' + }, + { + 'name': 'Speaker', + 'value': 'Tomas Jansson' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/49' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/313/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/314', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Future of C#\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Mads Torgersen' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/27' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/314/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/315', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tNuts and bolts of writing OWIN middleware\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Louis Dejardin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/34' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/315/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/316', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDoing SPA with MVC & Knockout.JS\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/316/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/317', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tZeroMQ - A Whole Bunch of Awesome [C# Edition]\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Ashic Mahtab' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/62' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/317/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/318', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tThe Birth & Death of JavaScript\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Gary Bernhardt' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/30' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/318/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/319', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAdvanced Topics in Agile Planning\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Mike Cohn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/12' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/319/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/320', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBuild It So You Can Ship It!\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 11:40 - 12:40' + }, + { + 'name': 'Speaker', + 'value': 'Brian A. Randell' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/46' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/320/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/321', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tNDC Cage Match: Testing! NodeJS vs. C# and .NET with Rob Ashton and Jeremy Miller\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/321/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/322', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAuthentication Middleware for OWIN\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Louis Dejardin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/34' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/322/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/323', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tGesture Recognition with Kinect for Windows\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Carl Franklin' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/52' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/323/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/324', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tObject Oriented Design in the Wild\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Jessica Kerr' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/15' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/324/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/325', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tMaking 3D games with Monogame\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Richard Garside' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/85' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/325/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/326', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tUser Stories for Agile Requirements\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Mike Cohn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/12' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/326/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/327', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tMongoDB for the C# developer\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 13:40 - 14:40' + }, + { + 'name': 'Speaker', + 'value': 'Simon Elliston Ball' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/81' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/327/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/328', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tUsing ASP.NET SignalR... in anger\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/328/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/329', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tCloud-enabling iOS & Android Apps with C# (using Xamarin)\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Craig Dunn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/8' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/329/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/330', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tVagrant, the ability to think about production deployments from day 1 of development\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Paul Stack' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/54' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/330/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/331', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tWhere is the work hiding?\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Marcin Floryan' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/55' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/331/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/332', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tPeople, Process, Tools – The Essence of DevOps\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Richard Campbell' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/53' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/332/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/333', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tScaling Agile to Work with a Distributed Team\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + }, + { + 'name': 'Speaker', + 'value': 'Mike Cohn' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/12' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/333/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/334', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tAgile development with Team Foundation Server 2013\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 15:00 - 16:00' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/334/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/335', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tLessons from a Polyglot Programme\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'James Lewis' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/3' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/335/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/336', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBDD all the way down\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Enrico Campidoglio' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/56' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/336/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/337', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tExploring the C# scripting experience with scriptcs\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Justin Rusbatch' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/57' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/337/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/338', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tDemystifying the Reactive Extensions\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Matt Ellis' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/58' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/338/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/339', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tBitcoin and The Future of Cryptocurrency\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Ben Hall' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/77' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/339/topics' + } + ] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/340', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tFrom audience member to speaker.. Managing technical presentations\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/340/topics' + }] + }, + { + 'href': 'https://conferenceapi.azurewebsites.net/session/341', + 'data': [{ + 'name': 'Title', + 'value': '\r\n\t\t\tRelease Management with Visual Studio 2013 – InRelease\r\n\t\t' + }, + { + 'name': 'Timeslot', + 'value': '06 December 2013 16:20 - 17:20' + }, + { + 'name': 'Speaker', + 'value': 'Colin Beales' + } + ], + 'links': [{ + 'rel': 'http://tavis.net/rels/speaker', + 'href': 'https://conferenceapi.azurewebsites.net/speaker/36' + }, + { + 'rel': 'http://tavis.net/rels/topics', + 'href': 'https://conferenceapi.azurewebsites.net/session/341/topics' + } + ] + } + ], + 'queries': [], + 'template': { + 'data': [] + } + } +} \ No newline at end of file