Sequence (List/IEnumerable/etc) applicative

--- LanguageExt.Core/List.cs
+++ LanguageExt.Core/List.cs
@@ -780,6 +780,40 @@
              select Some(x))
             .DefaultIfEmpty(None)
             .FirstOrDefault();
+
+        /// <summary>
+        /// Apply an IEnumerable of values to an IEnumerable of functions
+        /// </summary>
+        /// <param name="opt">IEnumerable of functions</param>
+        /// <param name="arg">IEnumerable of argument values</param>
+        /// <returns>Returns the result of applying the IEnumerable argument values to the IEnumerable functions</returns>
+        public static IEnumerable<R> apply<T, R>(IEnumerable<Func<T, R>> self, IEnumerable<T> arg) =>
+            from f in self
+            from x in arg
+            select f(x);
+
+        /// <summary>
+        /// Apply an IEnumerable of values to an IEnumerable of functions of arity 2
+        /// </summary>
+        /// <param name="opt">IEnumerable of functions</param>
+        /// <param name="arg">IEnumerable argument values</param>
+        /// <returns>Returns the result of applying the IEnumerable of argument values to the
+        /// IEnumerable of functions: an IEnumerable of functions of arity 1</returns>
+        public static IEnumerable<Func<T2, R>> apply<T1, T2, R>(IEnumerable<Func<T1, T2, R>> self, IEnumerable<T1> arg) =>
+            from f in self
+            let c = curry(f)
+            from x in arg
+            select c(x);
+
+        /// <summary>
+        /// Apply IEnumerable of values to an IEnumerable of functions of arity 2
+        /// </summary>
+        /// <param name="opt">IEnumerable of functions</param>
+        /// <param name="arg1">IEnumerable of arguments</param>
+        /// <param name="arg2">IEnumerable of arguments</param>
+        /// <returns>Returns the result of applying the IEnumerables of arguments to the IEnumerable of functions</returns>
+        public static IEnumerable<R> apply<T1, T2, R>(IEnumerable<Func<T1, T2, R>> self, IEnumerable<T1> arg1, IEnumerable<T2> arg2) =>
+            self.Apply(arg1).Apply(arg2);
     }

     class EqCompare<T> : IEqualityComparer<T>
@@ -1016,6 +1050,40 @@
         LanguageExt.List.tail(list);

     /// <summary>
+    /// Apply an IEnumerable of values to an IEnumerable of functions
+    /// </summary>
+    /// <param name="opt">IEnumerable of functions</param>
+    /// <param name="arg">IEnumerable of argument values</param>
+    /// <returns>Returns the result of applying the IEnumerable argument values to the IEnumerable functions</returns>
+    public static IEnumerable<R> Apply<T, R>(this IEnumerable<Func<T, R>> self, IEnumerable<T> arg) =>
+        from f in self
+        from x in arg
+        select f(x);
+
+    /// <summary>
+    /// Apply an IEnumerable of values to an IEnumerable of functions of arity 2
+    /// </summary>
+    /// <param name="opt">IEnumerable of functions</param>
+    /// <param name="arg">IEnumerable argument values</param>
+    /// <returns>Returns the result of applying the IEnumerable of argument values to the
+    /// IEnumerable of functions: an IEnumerable of functions of arity 1</returns>
+    public static IEnumerable<Func<T2, R>> Apply<T1, T2, R>(this IEnumerable<Func<T1, T2, R>> self, IEnumerable<T1> arg) =>
+        from f in self
+        let c = curry(f)
+        from x in arg
+        select c(x);
+
+    /// <summary>
+    /// Apply IEnumerable of values to an IEnumerable of functions of arity 2
+    /// </summary>
+    /// <param name="opt">IEnumerable of functions</param>
+    /// <param name="arg1">IEnumerable of arguments</param>
+    /// <param name="arg2">IEnumerable of arguments</param>
+    /// <returns>Returns the result of applying the IEnumerables of arguments to the IEnumerable of functions</returns>
+    public static IEnumerable<R> Apply<T1, T2, R>(this IEnumerable<Func<T1, T2, R>> self, IEnumerable<T1> arg1, IEnumerable<T2> arg2) =>
+        self.Apply(arg1).Apply(arg2);
+
+    /// <summary>
     /// Projects the values in the enumerable using a map function into a new enumerable (Select in LINQ).
     /// </summary>
     /// <typeparam name="T">Enumerable item type</typeparam>


Add Bind to Action methods.

Add Bind to Action methods.

--- RxApp.Android/Bindings.cs
+++ RxApp.Android/Bindings.cs
@@ -47,6 +47,16 @@
                           .Subscribe(x => { This.Value = x.EventArgs.IsChecked; }),

                 This.ObserveOnMainThread().Subscribe(x => { if (button.Checked != x) { button.Checked = x; } }));
+        }
+
+        public static IDisposable BindTo(this IObservable<Unit> This, Action action)
+        {
+            return This.ObserveOnMainThread().Subscribe(_ => action());
+        }
+
+        public static IDisposable BindTo<T>(this IObservable<T> This, Action<T> action)
+        {
+            return This.ObserveOnMainThread().Subscribe(x => action(x));
         }

         public static IDisposable BindTo<TViewModel,TView>(


added some more miniquests

added some more miniquests

--- RyaScape/Models/Quests.cs
+++ RyaScape/Models/Quests.cs
@@ -1133,6 +1133,68 @@
           { SkillType.Mining, 42 },
         },
         PrerequisteQuests = { RuneMysteries }
+      };
+
+      var ArchitecturalAlliance = new Quest() {
+        Name = "Architectural Alliance (Miniquest)",
+        PrerequisteSkills =
+           {
+          { SkillType.Smithing, 45 },
+          { SkillType.Mining, 42 },
+          { SkillType.Fishing, 15 },
+          { SkillType.Crafting, 30 },
+          { SkillType.Hunter, 15 },
+        },
+      };
+
+      var BearYourSoul = new Quest() {
+        Name = "Bear your Soul (Miniquest)",
+      };
+
+      var CurseOfTheEmptyLord = new Quest() {
+        Name = "Curse of the Empty Lord (Miniquest)",
+        PrerequisteQuests = { DesertTreasure }
+      };
+
+      var EnchantedKey = new Quest() {
+        Name = "Enchanted Key (Miniquest)",
+        PrerequisteQuests = { MakingHistory }
+      };
+
+      var FamilyPest = new Quest() {
+        Name = "Family Pest (Miniquest)",
+        PrerequisteQuests = { FamilyCrest }
+      };
+
+      var TheGeneralsShadow = new Quest() {
+        Name = "The General's Shadow (Miniquest)",
+        PrerequisteQuests = { FightArena, CurseOfTheEmptyLord }
+      };
+
+      var LairOfTarnRazorlor = new Quest() {
+        Name = "Lair of Tarn Razorlor (Miniquest)",
+        PrerequisteSkills =
+           {
+          { SkillType.Slayer, 40 },
+        },
+        PrerequisteQuests = { HauntedMine }
+      };
+
+      var TheMageArena = new Quest() {
+        Name = "The Mage Arena (Miniquest)",
+        PrerequisteSkills =
+           {
+          { SkillType.Magic, 60 },
+        },
+      };
+
+      var RagAndBoneWishList = new Quest() {
+        Name = "Rag & Bone Wish List (Miniquest)",
+        PrerequisteQuests = { RagAndBoneMan }
+      };
+
+      var SkippyAndTheMogres = new Quest() {
+        Name = "Skippy and the Mogres (Miniquest)",
       };
       #endregion

@@ -1271,7 +1333,17 @@
       _quests.Add(ZogreFleshEaters.Name, ZogreFleshEaters);
       //MiniQuests
       _quests.Add(AlfredGrimhandsBarcrawl.Name, AlfredGrimhandsBarcrawl);
+      _quests.Add(ArchitecturalAlliance.Name, ArchitecturalAlliance);
+      _quests.Add(BearYourSoul.Name, BearYourSoul);
+      _quests.Add(CurseOfTheEmptyLord.Name, CurseOfTheEmptyLord);
+      _quests.Add(EnchantedKey.Name, EnchantedKey);
       _quests.Add(EnterTheAbyss.Name, EnterTheAbyss);
+      _quests.Add(FamilyPest.Name, FamilyPest);
+      _quests.Add(TheGeneralsShadow.Name, TheGeneralsShadow);
+      _quests.Add(LairOfTarnRazorlor.Name, LairOfTarnRazorlor);
+      _quests.Add(TheMageArena.Name, TheMageArena);
+      _quests.Add(RagAndBoneWishList.Name, RagAndBoneWishList);
+      _quests.Add(SkippyAndTheMogres.Name, SkippyAndTheMogres);
       #endregion
     }


More logging

More logging

--- SRPTests/Util/CIHelper.cs
+++ SRPTests/Util/CIHelper.cs
@@ -34,31 +34,40 @@

 		private static async Task PublishArtefact_Appveyor(string path)
 		{
-			var appveyorApiUrl = Environment.GetEnvironmentVariable("APPVEYOR_API_URL");
-			var jsonRequest = JsonConvert.SerializeObject(new
+			try
 			{
-				path = Path.GetFullPath(path),
-				fileName = Path.GetFileName(path),
-				name = (string)null,
-				type = "html"
-			});
+				var appveyorApiUrl = Environment.GetEnvironmentVariable("APPVEYOR_API_URL");
+				var jsonRequest = JsonConvert.SerializeObject(new
+				{
+					path = Path.GetFullPath(path),
+					fileName = Path.GetFileName(path),
+					name = (string)null,
+					type = "html"
+				});

-			Console.WriteLine("APPVEYOR_API_URL = {0}", appveyorApiUrl);
-			Console.WriteLine("jsonRequest = {0}", jsonRequest);
+				Console.WriteLine("APPVEYOR_API_URL = {0}", appveyorApiUrl);
+				Console.WriteLine("jsonRequest = {0}", jsonRequest);

-			// PUT data to api URL to get where to upload the file to.
-			var httpClient = new HttpClient();
-			var response = await httpClient.PutAsync(appveyorApiUrl + "api/artifacts", new StringContent(jsonRequest, Encoding.UTF8, "application /json"));
-			response.EnsureSuccessStatusCode();
+				// PUT data to api URL to get where to upload the file to.
+				var httpClient = new HttpClient();
+				var response = await httpClient.PutAsync(appveyorApiUrl + "api/artifacts", new StringContent(jsonRequest, Encoding.UTF8, "application /json"));
+				response.EnsureSuccessStatusCode();

-			var responseString = await response.Content.ReadAsStringAsync();
-			var uploadUrl = JsonConvert.DeserializeObject<string>(responseString);
+				var responseString = await response.Content.ReadAsStringAsync();
+				var uploadUrl = JsonConvert.DeserializeObject<string>(responseString);

-			Console.WriteLine("responseString = {0}", responseString);
-			Console.WriteLine("uploadUrl = {0}", uploadUrl);
+				Console.WriteLine("responseString = {0}", responseString);
+				Console.WriteLine("uploadUrl = {0}", uploadUrl);

-			// Upload the file to the returned URL.
-			await new WebClient().UploadFileTaskAsync(new Uri(uploadUrl), path);
+				// Upload the file to the returned URL.
+				await new WebClient().UploadFileTaskAsync(new Uri(uploadUrl), path);
+
+			}
+			catch (Exception ex)
+			{
+				Console.WriteLine(ex.Message);
+				throw;
+			}
 		}
 	}
 }


Fix bug filterIndex = 1

Fix bug filterIndex = 1

--- PackageViewModel/Commands/SavePackageCommand.cs
+++ PackageViewModel/Commands/SavePackageCommand.cs
@@ -72,7 +72,7 @@
             string selectedPackagePath;
             int filterIndex;
             if (ViewModel.UIServices.OpenSaveFileDialog(title, packageName, filter, out selectedPackagePath, out filterIndex)) {
-                if (filterIndex == 0 && !selectedPackagePath.EndsWith(NuGet.Constants.PackageExtension, StringComparison.OrdinalIgnoreCase)) {
+                if (filterIndex == 1 && !selectedPackagePath.EndsWith(NuGet.Constants.PackageExtension, StringComparison.OrdinalIgnoreCase)) {
                     selectedPackagePath += NuGet.Constants.PackageExtension;
                 }
                 SavePackage(selectedPackagePath);
@@ -90,7 +90,7 @@
             int filterIndex;
             if (ViewModel.UIServices.OpenSaveFileDialog(title, packageName, filter, out selectedPath, out filterIndex)) {
                 try {
-                    if (filterIndex == 0 && !selectedPath.EndsWith(NuGet.Constants.ManifestExtension, StringComparison.OrdinalIgnoreCase)) {
+                    if (filterIndex == 1 && !selectedPath.EndsWith(NuGet.Constants.ManifestExtension, StringComparison.OrdinalIgnoreCase)) {
                         selectedPath += NuGet.Constants.ManifestExtension;
                     }


Texte du PromotionValidationRule.

Texte du PromotionValidationRule.

--- PlanningMaker/Modele/PromotionValidationRule.cs
+++ PlanningMaker/Modele/PromotionValidationRule.cs
@@ -28,9 +28,10 @@
             else
             {
                 return new ValidationResult(false,
-                                "Le nom d'une promotion doit s'écrire\n" +
-                                "- en un seul mot de 2 caractères minimum,\n" +
-                                "- sans chiffre ni caractère spécial.");
+                                "Le nom d'une promotion doit :\n" +
+                                "- commencer par une majuscule,\n" +
+                                "- s'écrire en un seul mot de 2 caractères minimum,\n" +
+                                "- ne contenir aucun chiffre ni caractère spécial.");
             }
         }
     }


Changed implicit casts to member variables

--- SKON.NET/SKON.NET/SKONObject.cs
+++ SKON.NET/SKON.NET/SKONObject.cs
@@ -204,76 +204,72 @@
             }
         }

-        /// <summary>
-        /// Converts a SKONObject into a string.
-        /// </summary>
-        /// <param name="obj">The SKONObject to convert.</param>
-        public static implicit operator string(SKONObject obj)
-        {
-            if (obj.Type != ValueType.STRING)
-            {
-                // Will this lead to weirdness? Always being able to cast to a string that will never be 'null'
-                // Should string cast be explicit instead?
-                return obj.ToString();
-            }
-
-            return obj.stringValue;
-        }
-
-        /// <summary>
-        /// Converts a SKONObject into an integer.
-        /// </summary>
-        /// <param name="obj">The SKONObject to convert.</param>
-        public static implicit operator int?(SKONObject obj)
-        {
-            if (obj.Type != ValueType.INTEGER)
-            {
-                return null;
-            }
-
-            return obj.intValue;
-        }
-
-        /// <summary>
-        /// Converts a SKONObject into a float.
-        /// </summary>
-        /// <param name="obj">The SKONObject to convert.</param>
-        public static implicit operator double?(SKONObject obj)
-        {
-            if (obj.Type != ValueType.DOUBLE)
-            {
-                return null;
-            }
-
-            return obj.doubleValue;
-        }
-
-        /// <summary>
-        /// Converts a SKONObject into a boolean.
-        /// </summary>
-        /// <param name="obj">The SKONObject to convert.</param>
-        public static implicit operator bool?(SKONObject obj)
-        {
-            if (obj.Type != ValueType.BOOLEAN)
-            {
-                return null;
-            }
-
-            return obj.booleanValue;
-        }
-
-        /// <summary>
-        /// Converts a SKONObject into a DateTime.
-        /// </summary>
-        /// <param name="obj">The SKONObject to convert.</param>
-        public static implicit operator DateTime?(SKONObject obj)
-        {
-            if (obj.Type != ValueType.DATETIME)
-            {
-                return null;
-            }
-
-            return obj.dateTimeValue;
+        public string String
+        {
+            get
+            {
+                return this.Type == ValueType.STRING ? stringValue : null;
+            }
+        }
+
+        public int? Int
+        {
+            get
+            {
+                if (Type == ValueType.INTEGER)
+                {
+                    return intValue;
+                }
+                else
+                {
+                    return null;
+                }
+            }
+        }
+
+        public double? Double
+        {
+            get
+            {
+                if (Type == ValueType.DOUBLE)
+                {
+                    return doubleValue;
+                }
+                else
+                {
+                    return null;
+                }
+            }
+        }
+
+        public bool? Boolean
+        {
+            get
+            {
+                if (Type == ValueType.BOOLEAN)
+                {
+                    return booleanValue;
+                }
+                else
+                {
+                    return null;
+                }
+            }
+        }
+
+        public DateTime? DateTime
+        {
+            get
+            {
+                if (Type == ValueType.DATETIME)
+                {
+                    return dateTimeValue;
+                }
+                else
+                {
+                    return null;
+                }
+            }
         }

         public T Get<T>(string key, T defaultValue)


Added degeneracy cases.

Added degeneracy cases.

--- SIMDPrototyping/Trees/SingleArray/Tree_BinnedRefine.cs
+++ SIMDPrototyping/Trees/SingleArray/Tree_BinnedRefine.cs
@@ -1,4 +1,5 @@
-using BEPUutilities.DataStructures;
+using Toolbox = BEPUutilities.Toolbox;
+using BEPUutilities.DataStructures;
 using BEPUutilities.ResourceManagement;
 using System;
 using System.Collections.Generic;
@@ -37,7 +38,41 @@
             }

             //Bin along all three axes simultaneously.
+            var nullBoundingBox = new BoundingBox { Min = new Vector3(float.MaxValue), Max = new Vector3(float.MinValue) };
             var span = centroidBoundingBox.Max - centroidBoundingBox.Min;
+            if (span.X < Toolbox.Epsilon && span.Y < Toolbox.Epsilon && span.Z < Toolbox.Epsilon)
+            {
+                //All axes are degenerate.
+                //This is the one situation in which we can end up with all objects in the same bin.
+                //To stop this, just short circuit.
+                splitIndex = count / 2;
+                a = nullBoundingBox;
+                b = nullBoundingBox;
+                leafCountA = 0;
+                leafCountB = 0;
+                for (int i = 0; i < splitIndex; ++i)
+                {
+                    BoundingBox.Merge(ref a, ref subtrees.BoundingBoxes[localIndexMap[i]], out a);
+                    leafCountA += subtrees.LeafCounts[localIndexMap[i]];
+                }
+                for (int i = splitIndex; i < count; ++i)
+                {
+                    BoundingBox.Merge(ref b, ref subtrees.BoundingBoxes[localIndexMap[i]], out b);
+                    leafCountB += subtrees.LeafCounts[localIndexMap[i]];
+                }
+                return;
+            }
+            else
+            {
+                //Modify the span to handle degenerate cases.
+                //This will result in degenerate axes all being dumped into the first bin.
+                if (span.X < 1e-7f)
+                    span.X = float.MaxValue;
+                if (span.Y < 1e-7f)
+                    span.Y = float.MaxValue;
+                if (span.Z < 1e-7f)
+                    span.Z = float.MaxValue;
+            }
             const int binCount = 16;
             var inverseBinSize = new Vector3(binCount) / span;

@@ -58,7 +93,6 @@
             var binSubtreeCountsY = stackalloc int[binCount];
             var binSubtreeCountsZ = stackalloc int[binCount];

-            var nullBoundingBox = new BoundingBox { Min = new Vector3(float.MaxValue), Max = new Vector3(float.MinValue) };
             for (int i = 0; i < binCount; ++i)
             {
                 binBoundingBoxesX[i] = nullBoundingBox;
@@ -234,6 +268,8 @@
             {
                 localIndexMap[i] = tempIndexMap[i];
             }
+
+

             //Transform the split index into object indices.
             splitIndex = binStartIndices[splitIndex] + start;


Fixed #122. Added reconnect logic to .net client ServerSentEventsTransport.

--- SignalR.Client/Transports/ServerSentEventsTransport.cs
+++ SignalR.Client/Transports/ServerSentEventsTransport.cs
@@ -2,6 +2,7 @@
 using System.IO;
 using System.Net;
 using System.Text;
+using System.Threading;
 using SignalR.Client.Infrastructure;

 namespace SignalR.Client.Transports
@@ -9,6 +10,7 @@
     public class ServerSentEventsTransport : HttpBasedTransport
     {
         private const string ReaderKey = "sse.reader";
+        private static readonly TimeSpan ReconnectDelay = TimeSpan.FromSeconds(2);

         public ServerSentEventsTransport()
             : base("serverSentEvents")
@@ -22,7 +24,10 @@

         private void OpenConnection(Connection connection, string data, Action initializeCallback, Action<Exception> errorCallback)
         {
-            var url = connection.Url + GetReceiveQueryString(connection, data);
+            // If we're reconnecting add /connect to the url
+            bool reconnect = initializeCallback == null;
+
+            var url = (reconnect ? connection.Url : connection.Url + "connect") + GetReceiveQueryString(connection, data);

             Action<HttpWebRequest> prepareRequest = PrepareRequest(connection);

@@ -32,22 +37,35 @@

                 request.Accept = "text/event-stream";

-                if (connection.MessageId != null)
-                {
-                    request.Headers["Last-Event-ID"] = connection.MessageId.ToString();
-                }
-
             }).ContinueWith(task =>
             {
                 if (task.IsFaulted)
                 {
-                    errorCallback(task.Exception);
+                    if (errorCallback != null)
+                    {
+                        errorCallback(task.Exception);
+                    }
+                    else
+                    {
+                        // Raise the error event if we failed to reconnect
+                        connection.OnError(task.Exception.GetBaseException());
+                    }
                 }
                 else
                 {
                     // Get the reseponse stream and read it for messages
                     var stream = task.Result.GetResponseStream();
-                    var reader = new AsyncStreamReader(stream, connection, initializeCallback, errorCallback);
+                    var reader = new AsyncStreamReader(stream,
+                                                       connection,
+                                                       initializeCallback,
+                                                       () =>
+                                                       {
+                                                           // Wait for a bit before reconnecting
+                                                           Thread.Sleep(ReconnectDelay);
+
+                                                           // Now attempt a reconnect
+                                                           OpenConnection(connection, data, initializeCallback: null, errorCallback: null);
+                                                       });
                     reader.StartReading();

                     // Set the reader for this connection
@@ -75,16 +93,16 @@
             private readonly Stream _stream;
             private readonly ChunkBuffer _buffer;
             private readonly Action _initializeCallback;
-            private readonly Action<Exception> _errorCallback;
+            private readonly Action _closeCallback;
             private readonly Connection _connection;
             private int _processingQueue;
             private bool _reading;
             private bool _processingBuffer;

-            public AsyncStreamReader(Stream stream, Connection connection, Action initializeCallback, Action<Exception> errorCallback)
+            public AsyncStreamReader(Stream stream, Connection connection, Action initializeCallback, Action closeCallback)
             {
                 _initializeCallback = initializeCallback;
-                _errorCallback = errorCallback;
+                _closeCallback = closeCallback;
                 _stream = stream;
                 _connection = connection;
                 _buffer = new ChunkBuffer();
@@ -118,8 +136,6 @@
                         if (!IsRequestAborted(exception))
                         {
                             _connection.OnError(exception);
-
-                            _errorCallback(exception);
                         }
                         return;
                     }
@@ -130,6 +146,19 @@
                     {
                         // Put chunks in the buffer
                         _buffer.Add(buffer, read);
+                    }
+
+                    if (read == 0)
+                    {
+                        // Stop any reading we're doing
+                        StopReading();
+
+                        // Close the stream
+                        _stream.Close();
+
+                        // Call the close callback
+                        _closeCallback();
+                        return;
                     }

                     // Keep reading the next set of data
@@ -220,8 +249,11 @@
                         case EventType.Data:
                             if (sseEvent.Data.Equals("initialized", StringComparison.OrdinalIgnoreCase))
                             {
-                                // Mark the connection as started
-                                _initializeCallback();
+                                if (_initializeCallback != null)
+                                {
+                                    // Mark the connection as started
+                                    _initializeCallback();
+                                }
                             }
                             else
                             {


SearchTestExtensions Sort fix

SearchTestExtensions Sort fix

--- Signum.Web.Extensions.Selenium/SearchTestExtensions.cs
+++ Signum.Web.Extensions.Selenium/SearchTestExtensions.cs
@@ -357,7 +357,7 @@
         public static void AddColumn(this ISelenium selenium, string columnTokenName, string prefix)
         {
             selenium.Click("{0}btnAddColumn".Formato(prefix));
-            selenium.WaitAjaxFinished(() => selenium.IsElementPresent("{0} > :hidden[value={1}]".Formato(TableHeaderSelector(prefix), columnTokenName)));
+            selenium.WaitAjaxFinished(() => selenium.IsElementPresent("{0} > :hidden[value='{1}']".Formato(TableHeaderSelector(prefix), columnTokenName)));
         }

         public static void Sort(this ISelenium selenium, int columnIndexBase1, bool ascending)
@@ -395,7 +395,7 @@
         {
             bool isMarked = selenium.IsElementPresent("{0}.{1}".Formato(
                 TableHeaderSelector(columnIndexBase1, prefix),
-                ascending ? ".sf-header-sort-down" : ".sf-header-sort-up"));
+                ascending ? "sf-header-sort-down" : "sf-header-sort-up"));

             if (marked)
                 Assert.IsTrue(isMarked);


Fix failing tests added in c5d8566d

Fix failing tests added in c5d8566d

FaultEffectNormalizer: instead of replacing the entire
baseList of derived components with the new base type,
only replace the base type, preserving the implemented
interfaces.

--- Source/Compiler/Normalization/FaultEffectNormalizer.cs
+++ Source/Compiler/Normalization/FaultEffectNormalizer.cs
@@ -368,8 +368,9 @@
 				return classDeclaration;

 			var baseType = Syntax.TypeExpression(faults[faults.Length - 1]).WithTrivia(classDeclaration.BaseList.Types[0]);
-			var baseTypes = SyntaxFactory.SingletonSeparatedList((BaseTypeSyntax)SyntaxFactory.SimpleBaseType((TypeSyntax)baseType));
-			var baseList = SyntaxFactory.BaseList(classDeclaration.BaseList.ColonToken, baseTypes).WithTrivia(classDeclaration.BaseList);
+			var baseTypeSyntax = (BaseTypeSyntax)SyntaxFactory.SimpleBaseType((TypeSyntax)baseType);
+
+			var baseList = classDeclaration.BaseList.ReplaceNode(classDeclaration.BaseList.Types[0], baseTypeSyntax);
 			return classDeclaration.WithBaseList(baseList);
 		}


#1 Fix for hard-coded Apply3DSecure setting in SagePay provider

--- Source/TeaCommerce.PaymentProviders/Classic/SagePay.cs
+++ Source/TeaCommerce.PaymentProviders/Classic/SagePay.cs
@@ -138,7 +138,7 @@
         inputFields[ "DeliveryPhone" ] = order.Properties[ settings[ "shipping_phonePropertyAlias" ] ].Truncate( 20 );
       }

-      inputFields[ "Apply3DSecure" ] = "2";
+      inputFields[ "Apply3DSecure" ] = settings.ContainsKey( "Apply3DSecure" ) ? settings[ "Apply3DSecure" ] : "2";

       IDictionary<string, string> responseFields = GetFields( MakePostRequest( GetMethodUrl( "PURCHASE", settings ), inputFields ) );
       string status = responseFields[ "Status" ];


Fix #1290

Fix #1290

Added a check to see if the key was removed before including it in the check for non-string items.

--- Languages/IronPython/IronPython/Runtime/CommonDictionaryStorage.cs
+++ Languages/IronPython/IronPython/Runtime/CommonDictionaryStorage.cs
@@ -660,7 +660,7 @@
                     for (int i = 0; i < _buckets.Length; i++) {
                         Bucket curBucket = _buckets[i];

-                        if (curBucket.Key != null && !(curBucket.Key is string)) {
+                        if (curBucket.Key != null && curBucket.Key != _removed && !(curBucket.Key is string)) {
                             return true;
                         }
                     }


#1004 Added json support for trends

#1004 Added json support for trends

--- Tests/xUnitinvi/EndToEnd/JsonClientEndToEndTests.cs
+++ Tests/xUnitinvi/EndToEnd/JsonClientEndToEndTests.cs
@@ -287,9 +287,29 @@

             var place = await _tweetinviTestClient.Help.GetPlace("df51dec6f4ee2b2c");

-            TestSerializer<IPlace, IPlace>(place, deserializedLanguage =>
-            {
-                Assert.Equal(place.PlaceType, place.PlaceType);
+            TestSerializer<IPlace, IPlace>(place, deserializedPlace =>
+            {
+                Assert.Equal(place.PlaceType, deserializedPlace.PlaceType);
+            });
+        }
+
+        [Fact]
+        public async Task Trends()
+        {
+            if (!EndToEndTestConfig.ShouldRunEndToEndTests)
+                return;
+
+            var trendsResult = await _tweetinviTestClient.Trends.GetPlaceTrendsAt(1);
+            var trendsLocations = await _tweetinviTestClient.Trends.GetTrendLocations();
+
+            TestSerializer<IGetTrendsAtResult, IGetTrendsAtResult>(trendsResult, deserializedTrendsResult =>
+            {
+                Assert.Equal(trendsResult.Trends.Length, deserializedTrendsResult.Trends.Length);
+            });
+
+            TestSerializer<ITrendLocation, ITrendLocation>(trendsLocations[0], deserializedTrendLocations =>
+            {
+                Assert.Equal(trendsLocations[0].Country, deserializedTrendLocations.Country);
             });
         }
     }


Turn off debugging keystrokes in non-debug builds.

--- Trunk/MageCrawl/Keyboard/DefaultKeystrokeHandler.cs
+++ Trunk/MageCrawl/Keyboard/DefaultKeystrokeHandler.cs
@@ -146,20 +146,29 @@

         private void MoveableOnOff()
         {
-            m_gameInstance.SendPaintersRequest(new ToggleDebuggingMoveable(m_engine));
-            m_gameInstance.UpdatePainters();
+            if (Preferences.Instance.DebuggingMode)
+            {
+                m_gameInstance.SendPaintersRequest(new ToggleDebuggingMoveable(m_engine));
+                m_gameInstance.UpdatePainters();
+            }
         }

         private void DebuggingFOVOnOff()
         {
-            m_gameInstance.SendPaintersRequest(new ToggleDebuggingFOV(m_engine));
-            m_gameInstance.UpdatePainters();
+            if (Preferences.Instance.DebuggingMode)
+            {
+                m_gameInstance.SendPaintersRequest(new ToggleDebuggingFOV(m_engine));
+                m_gameInstance.UpdatePainters();
+            }
         }

         private void FOVOnOff()
         {
-            m_gameInstance.SendPaintersRequest(new SwapFOVEnabledStatus());
-            m_gameInstance.UpdatePainters();
+            if (Preferences.Instance.DebuggingMode)
+            {
+                m_gameInstance.SendPaintersRequest(new SwapFOVEnabledStatus());
+                m_gameInstance.UpdatePainters();
+            }
         }

         private void Wait()


- Added IsLuminance

- Added IsLuminance

git-svn-id: ad71a101fa69fb252e58119732bf51384d5dbd95@1377 bb9bf1cf-960d-0410-9a3a-baeba60cf407

--- Projects/Axiom/Source/Engine/Media/PixelUtil.cs
+++ Projects/Axiom/Source/Engine/Media/PixelUtil.cs
@@ -137,6 +137,11 @@
 			return ( PixelConverter.GetDescriptionFor( format ).flags & PixelFormatFlags.HasAlpha ) > 0;
 		}

+        public static bool IsLuminance( PixelFormat format )
+        {
+            return ( PixelConverter.GetDescriptionFor( format ).flags & PixelFormatFlags.Luminance ) > 0;
+        }
+
 		public static bool IsNativeEndian( PixelFormat format )
 		{
 			return ( PixelConverter.GetDescriptionFor( format ).flags & PixelFormatFlags.NativeEndian ) > 0;


Add missing returns for successful resolution

--- Python/Product/BuildTasks/ResolveEnvironment.cs
+++ Python/Product/BuildTasks/ResolveEnvironment.cs
@@ -142,6 +142,7 @@
 #if BUILDTASKS_CORE
                 ProjectItem item = null;
                 InterpreterConfiguration config = null;
+
                 if (string.IsNullOrEmpty(id)) {
                     id = project.GetItems(MSBuildConstants.InterpreterReferenceItem).Select(pi => pi.GetMetadataValue(MSBuildConstants.IdKey)).LastOrDefault(i => !string.IsNullOrEmpty(i));
                 }
@@ -180,8 +181,10 @@
                     } else {
                         MajorVersion = MinorVersion = "0";
                     }
+                    return true;
                 } else if (config != null) {
                     UpdateResultFromConfiguration(config, projectHome);
+                    return true;
                 }
 #else
                 // MsBuildProjectContextProvider isn't available in-proc, instead we rely upon the


VersionFormのサイズを調整

VersionFormのサイズを調整

--- Ragnarok.Forms/Controls/VersionForm.Designer.cs
+++ Ragnarok.Forms/Controls/VersionForm.Designer.cs
@@ -38,8 +38,9 @@
             //
             // okButton
             //
+            this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
             this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
-            this.okButton.Location = new System.Drawing.Point(197, 155);
+            this.okButton.Location = new System.Drawing.Point(287, 155);
             this.okButton.Name = "okButton";
             this.okButton.Size = new System.Drawing.Size(75, 23);
             this.okButton.TabIndex = 0;
@@ -78,12 +79,14 @@
             //
             // panel1
             //
+            this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
             this.panel1.Controls.Add(this.appNameLabel);
             this.panel1.Controls.Add(this.copyrightLabel);
             this.panel1.Controls.Add(this.versionLabel);
             this.panel1.Location = new System.Drawing.Point(3, 4);
             this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(276, 145);
+            this.panel1.Size = new System.Drawing.Size(366, 145);
             this.panel1.TabIndex = 4;
             //
             // VersionForm
@@ -91,7 +94,7 @@
             this.AcceptButton = this.okButton;
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(284, 186);
+            this.ClientSize = new System.Drawing.Size(374, 186);
             this.Controls.Add(this.panel1);
             this.Controls.Add(this.okButton);
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;


Get the best ask price correctly from the kaiko data

--- ToolBox/KaikoDataConverter/Program.cs
+++ ToolBox/KaikoDataConverter/Program.cs
@@ -230,10 +230,12 @@
         /// <returns>A single Lean quote tick</returns>
         private static Tick CreateQuoteTick(Symbol symbol, DateTime date, List<KaikoTick> currentEpcohTicks)
         {
+            // lowest ask
             var bestAsk = currentEpcohTicks.Where(x => x.OrderDirection == "a")
-                                        .OrderByDescending(x => x.Value)
+                                        .OrderBy(x => x.Value)
                                         .FirstOrDefault();

+            // highest bid
             var bestBid = currentEpcohTicks.Where(x => x.OrderDirection == "b")
                                         .OrderByDescending(x => x.Value)
                                         .FirstOrDefault();


Switch Tenant

Switch Tenant

* Fixed rest call by adding Content Type header

--- src/biz.dfch.CS.Abiquo.Client/v1/AbiquoClient.cs
+++ src/biz.dfch.CS.Abiquo.Client/v1/AbiquoClient.cs
@@ -182,7 +182,12 @@

             // update user
             var uriSuffix = string.Format(AbiquoUriSuffixes.SWITCH_ENTERPRISE_BY_USER_ID, currentUser.Id);
-            var headers = new HeaderBuilder().BuildAccept(AbiquoMediaDataTypes.VND_ABIQUO_USER).GetHeaders();
+            var headers = new Dictionary<string, string>()
+            {
+                { AbiquoHeaderKeys.ACCEPT_HEADER_KEY, AbiquoMediaDataTypes.VND_ABIQUO_USER }
+                ,
+                { AbiquoHeaderKeys.CONTENT_TYPE_HEADER_KEY, AbiquoMediaDataTypes.VND_ABIQUO_USER }
+            };

             var updatedUser = Invoke<User>(HttpMethod.Put, uriSuffix, null, headers, currentUser);
             Contract.Assert(null != updatedUser);


Abiquoclient

Abiquoclient

* fixed base url assignment (was cleared after logout)

--- src/biz.dfch.CS.Abiquo.Client/v1/AbiquoClient.cs
+++ src/biz.dfch.CS.Abiquo.Client/v1/AbiquoClient.cs
@@ -46,10 +46,12 @@
         {
             // sanitise Uri (and removed extra information such as port numbers etc)
             abiquoApiBaseUri = new Uri(abiquoApiBaseUri).AbsoluteUri;
+            Logger.Current.TraceEvent(TraceEventType.Start, (int) Constants.EventId.Login, "Logging in to abiquoApiBaseUri '{0}' with TenantId '{1}' ...", abiquoApiBaseUri, authenticationInformation.GetTenantId());
+
+            // clear base properties
+            Logout();
+
             AbiquoApiBaseUri = abiquoApiBaseUri;
-            Logger.Current.TraceEvent(TraceEventType.Start, (int) Constants.EventId.Login, "Logging in to AbiquoApiBaseUri '{0}' with TenantId '{1}' ...", AbiquoApiBaseUri, authenticationInformation.GetTenantId());
-
-            Logout();
             AuthenticationInformation = authenticationInformation;

             try


Improvements for Views/Institutions/InstitutionShow.cs. Closes #117

--- Views/Institutions/InstitutionShow.cs
+++ Views/Institutions/InstitutionShow.cs
@@ -41,16 +41,20 @@
                     fax.Text = institution.Fax == null ? "" : institution.Fax;
                     email.Text = institution.Email == null ? "" : institution.Email;
                     url.Text = institution.Url == null ? "" : institution.Url;
-                    if (institution.Id > 0 ) {
-                        case_per_institution.Institution = institution;
-                        SetInstitutionRelationships ();
-                        SetAffiliatedActorList ();
-                    }
+                    ShowAssociatedRecordList ();
                 }
                 IsEditing = false;
             }
         }

+        public void ShowAssociatedRecordList () {
+            if (institution.Id > 0 ) {
+                case_per_institution.Show ();
+                case_per_institution.Institution = institution;
+                SetInstitutionRelationships ();
+                SetAffiliatedActorList ();
+             }
+        }
         public bool IsEditing
         {
             get { return this.isEditing; }
@@ -66,10 +70,12 @@
                 }

                 this.editable_helper.SetAllEditable(value);
-                if (institution == null || institution.Id == 0) {
+                if (institution == null || institution.Id < 1) {
                     case_per_institution.Hide ();
                     related_institutions_expander.Hide ();
                     affiliated_actors_expander.Hide ();
+                } else {
+                    ShowAssociatedRecordList ();
                 }
                 case_per_institution.IsEditable = false;
             }
@@ -127,17 +133,14 @@
         }

         private void SetAffiliatedActorList () {
+            affiliated_actors_expander.Show ();
             affiliated_actor_list.AffiliatedRecords = this.institution.AffiliatedPersonList().Cast<AffiliatedRecord>().ToList ();
         }

          public void SetInstitutionRelationships () {
+            related_institutions_expander.Show ();
             if (this.institution != null && this.institution.Id > 0 && this.institution.InstitutionRelationships != null)  {
-                //ConnectPersonRelationshipsHandlers();
                 related_institution_list.Records = this.institution.InstitutionRelationships.Cast<ListableRecord>().ToList ();
-            }
-            else
-            {
-                related_institutions_expander.Hide ();
             }
         }


Add Async When Loading Library.

Add Async When Loading Library.

--- VitaGameManagement-CSharp/MainForm.cs
+++ VitaGameManagement-CSharp/MainForm.cs
@@ -15,6 +15,8 @@
 {
     public partial class MainForm : Form
     {
+		private delegate void LibraryAsyncEventHandler();
+
         private FTPManager manager;
         private List<VitaPackageHelper.VitaPackage> packages;
         public MainForm()
@@ -40,22 +42,36 @@
             this.reloadSetting();
         }

-        private void initGameLibrary()
-        {
-            packages = VitaPackageHelper.Helper.loadPackages(libraryPath.Text);
-            if (packages.Count > 0)
-            {
-                GameListView.Items.Clear();
-                foreach (VitaPackageHelper.VitaPackage package in packages)
-                {
-                    long size = new FileInfo(package.fileName).Length;
-                    string fileSize = String.Format(new FileSizeFormatProvider(), "{0:fs}", size);
-
-                    ListViewItem item = new ListViewItem(new String[] { package.appId, package.sfoData["TITLE"], package.region, fileSize, package.fileName, "OK", package.sfoData["APP_VER"] });
-                    GameListView.Items.Add(item);
-                }
-            }
-        }
+
+		private void loadGameLibrary()
+		{
+			packages = VitaPackageHelper.Helper.loadPackages(libraryPath.Text);
+			if (packages.Count > 0)
+			{
+				GameListView.Items.Clear();
+				foreach (VitaPackageHelper.VitaPackage package in packages)
+				{
+					long size = new FileInfo(package.fileName).Length;
+					string fileSize = String.Format(new FileSizeFormatProvider(), "{0:fs}", size);
+
+					ListViewItem item = new ListViewItem(new String[] { package.appId, package.sfoData["TITLE"], package.region, fileSize, package.fileName, "OK", package.sfoData["APP_VER"] });
+					GameListView.Items.Add(item);
+				}
+			}
+		}
+
+		private void gameLibraryCallback(IAsyncResult result)
+		{
+			((LibraryAsyncEventHandler)result.AsyncState).EndInvoke(result);
+		}
+
+		private void initGameLibrary()
+		{
+			LibraryAsyncEventHandler libraryAsync = new LibraryAsyncEventHandler(this.loadGameLibrary);
+			libraryAsync.BeginInvoke(new AsyncCallback(this.gameLibraryCallback), libraryAsync);
+
+		}
+
         private void reloadSetting()
         {
             libraryPath.Text = ConfigurationManager.ReadSetting("library");


Ascendant multiple choice nodes now obey only having one selected at a time

--- WPFSKillTree/Views/MainWindow.xaml.cs
+++ WPFSKillTree/Views/MainWindow.xaml.cs
@@ -1365,6 +1365,17 @@
                         {
                             foreach (ushort i in _prePath)
                             {
+                                if (SkillTree.Skillnodes[i].IsMultipleChoiceOption)
+                                {
+                                    foreach(var j in Tree.SkilledNodes)
+                                    {
+                                        if (SkillTree.Skillnodes[j].IsMultipleChoiceOption && Tree.ascendancyClasses.GetStartingClass(SkillTree.Skillnodes[i].Name) == Tree.ascendancyClasses.GetStartingClass(SkillTree.Skillnodes[j].Name))
+                                        {
+                                            Tree.SkilledNodes.Remove(j);
+                                            break;
+                                        }
+                                    }
+                                }
                                 Tree.SkilledNodes.Add(i);
                             }
                             UpdateUI();


Support hardware shutter button to rec start/stop

--- WPPMM/PhoneApp/Pages/MainPage.xaml.cs
+++ WPPMM/PhoneApp/Pages/MainPage.xaml.cs
@@ -1,3 +1,4 @@
+using Microsoft.Devices;
 using Microsoft.Phone.Controls;
 using Microsoft.Phone.Net.NetworkInformation;
 using Microsoft.Phone.Reactive;
@@ -67,7 +68,10 @@
             }

             cameraManager.OnDisconnected += cameraManager_OnDisconnected;
-        }
+
+            CameraButtons.ShutterKeyPressed += CameraButtons_ShutterKeyPressed;
+        }
+

         internal void cameraManager_OnDisconnected()
         {
@@ -221,7 +225,19 @@
             OnZooming = false;
         }

+
+        void CameraButtons_ShutterKeyPressed(object sender, EventArgs e)
+        {
+            RecStartStop();
+        }
+
         private void takeImageButton_Click(object sender, RoutedEventArgs e)
+        {
+            RecStartStop();
+
+        }
+
+        private void RecStartStop()
         {
             if (cameraManager.IntervalManager.IsRunning)
             {
@@ -274,7 +290,6 @@
                     cameraManager.StopAudioRec();
                     break;
             }
-
         }

         private void PostViewWindow_Loaded(object sender, RoutedEventArgs e)


Changed StrokeColor to be the same as fillColor.

--- Web/Views/Shared/_dashboardmap.cshtml
+++ Web/Views/Shared/_dashboardmap.cshtml
@@ -79,7 +79,7 @@
                                                                     }
                                                                     return "#CCC";
                                                                 }
-                                                               , strokeColor: "#FFF"
+                                                               , strokeColor: "${get_defaultPolygonfillColor}"

                                                             }
                                                     }


Convert TypeHint to readonly struct

Convert TypeHint to readonly struct

Co-authored-by: CyrusNajmabadi <726e0bc5de2519d72823786c7b6950f817ce3249@gmail.com>

--- src/Features/Core/Portable/InlineHints/TypeHint.cs
+++ src/Features/Core/Portable/InlineHints/TypeHint.cs
@@ -8,7 +8,7 @@

 namespace Microsoft.CodeAnalysis.InlineHints
 {
-    internal class TypeHint
+    internal readonly struct TypeHint
     {
         public TypeHint(ITypeSymbol type, TextSpan span, bool leadingSpace = false, bool trailingSpace = false)
             : this(type, span,


Typo.

Typo.

--- src/HelloCoreClrApp/Health/SystemMonitorService.cs
+++ src/HelloCoreClrApp/Health/SystemMonitorService.cs
@@ -30,7 +30,7 @@
             }
             catch (Exception exception)
             {
-                Log.Fatal(exception, "Web host failed with {exception}", exception.Message);
+                Log.Fatal(exception, "System monitor failed with {exception}", exception.Message);
                 applicationLifetime.StopApplication();
             }
         }


Bugfixes to CuttingTools - Now retains the rotation and velocities - Check to make sure start and end is not inside a shape

--- SourceFiles/Common/PolygonManipulation/CuttingTools.cs
+++ SourceFiles/Common/PolygonManipulation/CuttingTools.cs
@@ -43,13 +43,13 @@
                 newPolygon[i] = new Vertices(vertices.Count);
             }

-            int[] cutAdded = {-1, -1};
+            int[] cutAdded = { -1, -1 };
             int last = -1;
             for (int i = 0; i < vertices.Count; i++)
             {
                 int n;
                 //Find out if this vertex is on the old or new shape.
-                if (Vector2.Dot(MathUtils.Cross(localExitPoint - localEntryPoint, 1), vertices[i] - localEntryPoint) > 0)
+                if (Vector2.Dot(MathUtils.Cross(localExitPoint - localEntryPoint, 1), vertices[i] - localEntryPoint) > Settings.Epsilon)
                     n = 0;
                 else
                     n = 1;
@@ -104,7 +104,7 @@
                 }
                 offset.Normalize();

-                newPolygon[n][cutAdded[n]] += splitSize*offset;
+                newPolygon[n][cutAdded[n]] += splitSize * offset;

                 if (cutAdded[n] < newPolygon[n].Count - 2)
                 {
@@ -116,7 +116,7 @@
                 }
                 offset.Normalize();

-                newPolygon[n][cutAdded[n] + 1] += splitSize*offset;
+                newPolygon[n][cutAdded[n] + 1] += splitSize * offset;
             }

             first = newPolygon[0];
@@ -125,6 +125,7 @@

         /// <summary>
         /// This is a high-level function to cuts fixtures inside the given world, using the start and end points.
+        /// Note: We don't support cutting when the start or end is inside a shape.
         /// </summary>
         /// <param name="world">The world.</param>
         /// <param name="start">The startpoint.</param>
@@ -136,6 +137,10 @@
             List<Vector2> entryPoints = new List<Vector2>();
             List<Vector2> exitPoints = new List<Vector2>();

+            //We don't support cutting when the start or end is inside a shape.
+            if (world.TestPoint(start) != null || world.TestPoint(end) != null)
+                return;
+
             //Get the entry points
             world.RayCast((f, p, n, fr) =>
                               {
@@ -155,22 +160,6 @@
             if (entryPoints.Count + exitPoints.Count < 2)
                 return;

-            //There should be as many entry as exit points
-            if (entryPoints.Count != exitPoints.Count)
-            {
-                if (entryPoints.Count > exitPoints.Count)
-                {
-                    entryPoints.RemoveAt(entryPoints.Count - 1);
-                    fixtures.RemoveAt(fixtures.Count - 1);
-                }
-
-                if (exitPoints.Count > entryPoints.Count)
-                {
-                    exitPoints.RemoveAt(exitPoints.Count - 1);
-                    fixtures.RemoveAt(fixtures.Count - 1);
-                }
-            }
-
             for (int i = 0; i < fixtures.Count; i++)
             {
                 // can't cut circles yet !
@@ -189,6 +178,9 @@
                     {
                         Fixture firstFixture = FixtureFactory.CreatePolygon(world, first, fixtures[i].Shape.Density,
                                                                             fixtures[i].Body.Position);
+                        firstFixture.Body.Rotation = fixtures[i].Body.Rotation;
+                        firstFixture.Body.LinearVelocity = fixtures[i].Body.LinearVelocity;
+                        firstFixture.Body.AngularVelocity = fixtures[i].Body.AngularVelocity;
                         firstFixture.Body.BodyType = BodyType.Dynamic;
                     }

@@ -196,6 +188,9 @@
                     {
                         Fixture secondFixture = FixtureFactory.CreatePolygon(world, second, fixtures[i].Shape.Density,
                                                                              fixtures[i].Body.Position);
+                        secondFixture.Body.Rotation = fixtures[i].Body.Rotation;
+                        secondFixture.Body.LinearVelocity = fixtures[i].Body.LinearVelocity;
+                        secondFixture.Body.AngularVelocity = fixtures[i].Body.AngularVelocity;
                         secondFixture.Body.BodyType = BodyType.Dynamic;
                     }
                     world.RemoveBody(fixtures[i].Body);
@@ -205,6 +200,9 @@

         private static bool SanityCheck(Vertices vertices)
         {
+            if (vertices.Count < 3)
+                return false;
+
             if (vertices.GetArea() < 0.00001f)
                 return false;

@@ -213,6 +211,15 @@
                 int i1 = i;
                 int i2 = i + 1 < vertices.Count ? i + 1 : 0;
                 Vector2 edge = vertices[i2] - vertices[i1];
+                if (edge.LengthSquared() < Settings.Epsilon * Settings.Epsilon)
+                    return false;
+            }
+
+            for (int i = 0; i < vertices.Count; ++i)
+            {
+                int i1 = i;
+                int i2 = i + 1 < vertices.Count ? i + 1 : 0;
+                Vector2 edge = vertices[i2] - vertices[i1];

                 for (int j = 0; j < vertices.Count; ++j)
                 {
@@ -226,7 +233,7 @@

                     // Your polygon is non-convex (it has an indentation) or
                     // has colinear edges.
-                    float s = edge.X*r.Y - edge.Y*r.X;
+                    float s = edge.X * r.Y - edge.Y * r.X;

                     if (s < 0.0f)
                         return false;


Remove Visit(RuleNode) from INodeVisitor

--- SassSharp/Ast/RuleNode.cs
+++ SassSharp/Ast/RuleNode.cs
@@ -9,7 +9,6 @@
     public interface INodeVisitor<R, P>
     {
         R Visit(RootNode node, P p);
-        R Visit(RuleNode node, P p);
         R Visit(SelectorNode node, P p);
         R Visit(SassNode node, P p);
         R Visit(SassContainerNode node, P p);
@@ -180,9 +179,10 @@
             };
         }

+        //this is temporary, this whole class is going away
         public override R Accept<R, P>(INodeVisitor<R, P> visitor, P p)
         {
-            return visitor.Visit(this, p);
+            return visitor.Visit(new RootNode(null), p);
         }
     }
 }


Fix debug

Fix debug

--- LmpClient/Windows/Vessels/Structures/VesselInterpolationDisplay.cs
+++ LmpClient/Windows/Vessels/Structures/VesselInterpolationDisplay.cs
@@ -45,7 +45,7 @@
             StringBuilder.Append("Amt: ").AppendLine(Amount.ToString())
                 .Append("Duration: ").AppendLine($"{Duration:F0}ms")
                 .Append("TimeDiff: ").AppendLine($"{TimeDifference:F0}ms")
-                .Append("ExtraInterpolationTime: ").AppendLine($"+{ExtraInterpolationTime:F0}ms")
+                .Append("ExtraInterpolationTime: ").AppendLine($"{ExtraInterpolationTime:F0}ms")
                 .Append("Percentage: ").Append($"{Percentage:F0}%");

             GUILayout.Label(StringBuilder.ToString());


Adding feed properties to v1Feed

Adding feed properties to v1Feed

--- Website/DataServices/V1FeedPackage.cs
+++ Website/DataServices/V1FeedPackage.cs
@@ -38,7 +38,27 @@
         public string Title { get; set; }
         public int VersionDownloadCount { get; set; }

-        // TODO: remove these from the feed in the future, is possible, if they aren't used
+        // Deprecated properties
+        public int RatingsCount
+        {
+            get { return 0; }
+        }
+
+        public int VersionRatingsCount
+        {
+            get { return 0; }
+        }
+
+        public double Rating
+        {
+            get { return 0.0; }
+        }
+
+        public double VersionRating
+        {
+            get { return 0.0; }
+        }
+
         public string Categories { get { return string.Empty; } }
         public string Language { get { return ""; } }
         public string PackageType { get { return "Package"; } }


typo: Sligthly -> Slightly

typo: Sligthly -> Slightly

--- src/Markdig/Parsers/Inlines/LiteralInlineParser.cs
+++ src/Markdig/Parsers/Inlines/LiteralInlineParser.cs
@@ -1,5 +1,5 @@
 // Copyright (c) Alexandre Mutel. All rights reserved.
-// This file is licensed under the BSD-Clause 2 license.
+// This file is licensed under the BSD-Clause 2 license.
 // See the license.txt file in the project root for more information.

 using Markdig.Helpers;
@@ -38,7 +38,7 @@
             int column;
             var startPosition = processor.GetSourcePosition(slice.Start, out line, out column);

-            // Sligthly faster to perform our own search for opening characters
+            // Slightly faster to perform our own search for opening characters
             var nextStart = processor.Parsers.IndexOfOpeningCharacter(text, slice.Start + 1, slice.End);
             //var nextStart = str.IndexOfAny(processor.SpecialCharacters, slice.Start + 1, slice.Length - 1);
             int length;


Add more functionality to MeidoManager.

Add more functionality to MeidoManager.

--- MeidoBot/MeidoManager.cs
+++ MeidoBot/MeidoManager.cs
@@ -16,13 +16,24 @@
         static object _locker = new object();

-        public static void StartBot(MeidoConfig config)
+        public static bool StartBot(MeidoConfig config)
+        {
+            return StartBot(config, false);
+        }
+
+        public static bool StartBot(MeidoConfig config, bool restart)
         {
             lock (_locker)
             {
-                configs[config.ServerAddress] = config;
-                StartBotThread(config);
+                if (!runningBots.ContainsKey(config.ServerAddress) || restart)
+                {
+                    configs[config.ServerAddress] = config;
+                    StopBot(config.ServerAddress);
+                    StartBotThread(config);
+                    return true;
+                }
             }
+            return false;
         }

@@ -36,7 +47,6 @@
                     return true;
                 }
             }
-
             return false;
         }

@@ -108,6 +118,55 @@
         }

+        public static bool AddConfig(MeidoConfig conf)
+        {
+            lock (_locker)
+            {
+                if (!configs.ContainsKey(conf.ServerAddress))
+                {
+                    configs[conf.ServerAddress] = conf;
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public static void AddOrReplaceConfig(MeidoConfig conf)
+        {
+            lock (_locker)
+            {
+                configs[conf.ServerAddress] = conf;
+            }
+        }
+
+
+        public static bool IsBotStarted(string server)
+        {
+            lock (_locker)
+            {
+                return runningBots.ContainsKey(server);
+            }
+        }
+
+        public static bool HasConfig(string server)
+        {
+            lock (_locker)
+            {
+                return configs.ContainsKey(server);
+            }
+        }
+
+
+        public static void Clear()
+        {
+            lock (_locker)
+            {
+                StopAllBots();
+                configs.Clear();
+            }
+        }
+
+
         public static string[] GetServers()
         {
             lock (_locker)


MeidoBot: Make SeekToCutIndex saner

MeidoBot: Make SeekToCutIndex saner

Especially in regards with handling the last grapheme.

--- MeidoBot/MessageTools.cs
+++ MeidoBot/MessageTools.cs
@@ -100,36 +100,43 @@
         int SeekToCutIndex(int start, int maxByteCount, out int bytesRead)
         {
             var textEnum = StringInfo.GetTextElementEnumerator(message, start);
-
-            if (textEnum.MoveNext())
-            {
-                int currentIdx = textEnum.ElementIndex;
-                int byteCount = 0;
-
-                while (textEnum.MoveNext())
-                {
-                    int nextIdx = textEnum.ElementIndex;
-
-                    // Length of the current grapheme (in number of chars), starting at `currentIdx`.
-                    int length = nextIdx - currentIdx;
-                    // Number of bytes necessary to represent grapheme in UTF-8.
-                    int width = GraphemeWidth(currentIdx, length);
-                    // If the current grapheme pushes us past the limit, make the cut.
-                    if (byteCount + width > maxByteCount)
-                    {
-                        bytesRead = byteCount;
-                        // Cut up to, but not including, the current grapheme.
-                        return currentIdx;
-                    }
-                    byteCount += width;
-                    currentIdx = nextIdx;
-                }
-            }
-
-            // Handling cleanup of the final grapheme and cases where we can't MoveNext are annoying,
-            // the caller should've already determined whether the remainder is small enough to
-            // fit inside one message chunk (thus no more need to search for a place to cut).
-            throw new InvalidOperationException("Caller should ensure remaining bytes are greater than max bytes.");
+            if (!textEnum.MoveNext())
+                throw new InvalidOperationException("Starting index was end of string.");
+
+            int currentIdx = textEnum.ElementIndex;
+            int byteCount = 0;
+            bool seeking = true;
+
+            while (seeking)
+            {
+                int nextIdx;
+                if (textEnum.MoveNext())
+                    nextIdx = textEnum.ElementIndex;
+                else
+                {
+                    // Handle last grapheme.
+                    nextIdx = message.Length;
+                    seeking = false;
+                }
+                // Length of the current grapheme (in number of chars), starting at `currentIdx`.
+                int length = nextIdx - currentIdx;
+                // Number of bytes necessary to represent grapheme in UTF-8.
+                int width = GraphemeWidth(currentIdx, length);
+                // If the current grapheme pushes us past the limit, make the cut.
+                if (byteCount + width > maxByteCount)
+                {
+                    bytesRead = byteCount;
+                    // Cut up to, but not including, the current grapheme.
+                    return currentIdx;
+                }
+                byteCount += width;
+                currentIdx = nextIdx;
+            }
+
+            // We've reached the end of string and the remaining grapheme(s)
+            // are smaller than `maxByteCount`.
+            bytesRead = byteCount;
+            return message.Length;
         }

         int GraphemeWidth(int start, int count)


Updated invite command

Updated invite command

--- ModCore/Commands/Main.cs
+++ ModCore/Commands/Main.cs
@@ -97,7 +97,7 @@
 			var app = ctx.Client.CurrentApplication;
 			if (app.IsPublic != null && (bool)app.IsPublic)
 				await ctx.SafeRespondAsync(
-					$"Add ModCore to your server!\nhttps://modcore.naamloos.me/");
+					$"Add ModCore to your server!\nhttps://modcore.naamloos.me/api/invite");
 			else
 				await ctx.SafeRespondAsync("I'm sorry Mario, but this instance of ModCore has been set to private!");
 		}


made an idiot into a bigger idiot.

made an idiot into a bigger idiot.

--- ModCore/Commands/Star.cs
+++ ModCore/Commands/Star.cs
@@ -56,8 +56,15 @@
                 {
                     if (star.AuthorId == 1)
                     {
-                        var message = await ctx.Client.Guilds.First(x => x.Key == (ulong)star.GuildId).Value.GetChannel((ulong)star.ChannelId).GetMessageAsync((ulong)star.MessageId);
-                        star.AuthorId = (long)message.Author.Id;
+                        try
+                        {
+                            var message = await ctx.Client.Guilds.First(x => x.Key == (ulong)star.GuildId).Value.GetChannel((ulong)star.ChannelId).GetMessageAsync((ulong)star.MessageId);
+                            star.AuthorId = (long)message.Author.Id;
+                        }
+                        catch
+                        {
+                            continue;
+                        }
                     }
                 }
                 await db.SaveChangesAsync();


up timeout

up timeout

--- Spa/NakedObjects.Spa.Selenium.Test/tests/GeminiTest.cs
+++ Spa/NakedObjects.Spa.Selenium.Test/tests/GeminiTest.cs
@@ -39,8 +39,8 @@
             get
             {
                 if (timeOut != 0) { return timeOut; }
-                timeOut = 40;
-                return 40;
+                timeOut = 60;
+                return 60;
             }
         }


Reuse new optimize TryGetAssemblyNameReference

--- Mono.Cecil/TypeParser.cs
+++ Mono.Cecil/TypeParser.cs
@@ -370,20 +370,12 @@
 			if (string.IsNullOrEmpty (type_info.assembly))
 				return module.TypeSystem.CoreLibrary;

-			return MatchReference (module, AssemblyNameReference.Parse (type_info.assembly));
-		}
-
-		static AssemblyNameReference MatchReference (ModuleDefinition module, AssemblyNameReference pattern)
-		{
-			var references = module.AssemblyReferences;
-
-			for (int i = 0; i < references.Count; i++) {
-				var reference = references [i];
-				if (reference.FullName == pattern.FullName)
-					return reference;
-			}
-
-			return pattern;
+			AssemblyNameReference match;
+			var reference = AssemblyNameReference.Parse (type_info.assembly);
+
+			return module.TryGetAssemblyNameReference (reference, out match)
+				? match
+				: reference;
 		}

 		static bool TryGetDefinition (ModuleDefinition module, Type type_info, out TypeReference type)


Optimize load time

Optimize load time

--- Src/Nager.Date.WebsiteCore/Views/Shared/_Layout.cshtml
+++ Src/Nager.Date.WebsiteCore/Views/Shared/_Layout.cshtml
@@ -12,22 +12,6 @@
     <link rel="stylesheet" href="~/css/site.css" />

     <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.css" />
-    <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
-    <script>
-        window.addEventListener("load", function () {
-            window.cookieconsent.initialise({
-                "palette": {
-                    "popup": {
-                        "background": "#eeeeee"
-                    },
-                    "button": {
-                        "background": "#346cb0"
-                    }
-                },
-                "position": "top"
-            })
-        });
-    </script>

     @*<environment include="Development">
             <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
@@ -87,7 +71,23 @@

     <script src="~/lib/axios/axios.min.js"></script>
     <script src="~/lib/vue/vue.min.js"></script>
-    <script src="~/lib/moment/moment-with-locales.js"></script>
+    <script src="~/lib/moment/moment-with-locales.min.js"></script>
+    <script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.1.0/cookieconsent.min.js"></script>
+    <script>
+        window.addEventListener("load", function () {
+            window.cookieconsent.initialise({
+                "palette": {
+                    "popup": {
+                        "background": "#eeeeee"
+                    },
+                    "button": {
+                        "background": "#346cb0"
+                    }
+                },
+                "position": "top"
+            })
+        });
+    </script>

     @if (HttpContextAccessor.HttpContext.Request.Cookies.ContainsKey("cookieconsent_status"))
     {


Fix Manager leak while reconnecting. (#107)

- Manager.Cleanup() does not cleanup the queue.
    - While reconnecting, not items are added to Manager.Subs, but never cleared

--- Src/SocketIoClientDotNet.net45/Client/Manager_net35.cs
+++ Src/SocketIoClientDotNet.net45/Client/Manager_net35.cs
@@ -419,6 +419,7 @@
                 {
                     sub.Destroy();
                 }
+                Subs.Clear();
             }
         }


IEquatableExtensionMethods: add tests for EqualsEx<T>() with class

--- TakeAshUtility_Test/IEquatableExtensionMethods_Test.cs
+++ TakeAshUtility_Test/IEquatableExtensionMethods_Test.cs
@@ -58,7 +58,7 @@
                 }
                 return this;
             }
-
+
             #endregion

             #region IEquatable
@@ -93,7 +93,7 @@
         [TestCase("double", "11.13", false)]
         [TestCase("DateTime", "2001/01/01", false)]
         [TestCase(null, null, false)]
-        public void EqualsWithObject_Test(string type, string value, bool expected) {
+        public void EqualsComplexWithObject_Test(string type, string value, bool expected) {
             var standard = new Complex(3, -5);
             object input = null;
             switch (type) {
@@ -116,10 +116,143 @@
         [TestCase(0, 0, 0, 0, true)]
         [TestCase(3, -5, 3, -5, true)]
         [TestCase(3, -5, -5, 3, false)]
-        public void OpEquals_Test(double ar, double ai, double br, double bi, bool expected) {
+        public void OpEqualsComplex_Test(double ar, double ai, double br, double bi, bool expected) {
             var a = new Complex(ar, ai);
             var b = new Complex(br, bi);
             Assert.AreEqual(expected, a == b);
         }
+
+        class Person :
+            IEquatable<Person>,
+            IStringify<Person> {
+
+            public Person() { }
+
+            public Person(string first, string middle, string last)
+                : this() {
+                FirstName = first;
+                MiddleName = middle;
+                LastName = last;
+            }
+
+            [ToStringMember]
+            public string FirstName { get; set; }
+
+            [ToStringMember]
+            public string MiddleName { get; set; }
+
+            [ToStringMember]
+            public string LastName { get; set; }
+
+            #region IStringify
+
+            public override string ToString() {
+                return this.ToStringMembers();
+            }
+
+            public Person FromString(string source) {
+                if (String.IsNullOrEmpty(source)) {
+                    return default(Person);
+                }
+                var pairs = source.SplitTrim();
+                if (pairs == null) {
+                    return default(Person);
+                }
+                foreach (var pair in pairs) {
+                    var kv = pair.SplitTrim(new[] { ":" })
+                        .SafeToArray();
+                    if (kv.SafeCount() < 2) {
+                        continue;
+                    }
+                    switch (kv[0]) {
+                        case "FirstName":
+                            FirstName = kv[1].Trim(new[] { '{', '}', });
+                            break;
+                        case "MiddleName":
+                            MiddleName = kv[1].Trim(new[] { '{', '}', });
+                            break;
+                        case "LastName":
+                            LastName = kv[1].Trim(new[] { '{', '}', });
+                            break;
+                    }
+                }
+                return this;
+            }
+
+            #endregion
+
+            #region IEquatable
+
+            public bool Equals(Person other) {
+                if (other == null) {
+                    return false;
+                }
+                if (ReferenceEquals(this, other)) {
+                    return true;
+                }
+                return this.FirstName == other.FirstName &&
+                    this.MiddleName == other.MiddleName &&
+                    this.LastName == other.LastName;
+            }
+
+            public override bool Equals(object obj) {
+                return this.EqualsEx(obj);
+            }
+
+            public override int GetHashCode() {
+                return FirstName.GetHashCode() |
+                    MiddleName.GetHashCode() * 7 |
+                    LastName.GetHashCode() * 13;
+            }
+
+            public static bool operator ==(Person a, Person b) {
+                return a.EqualsEx(b);
+            }
+
+            public static bool operator !=(Person a, Person b) {
+                return !a.EqualsEx(b);
+            }
+
+            #endregion
+        }
+
+        [TestCase("Person", "FirstName:{Andrew}, MiddleName:{Buzz}, LastName:{Carnegie}", true)]
+        [TestCase("Person", "FirstName:{Carnegie}, MiddleName:{Andrew}, LastName:{Buzz}", false)]
+        [TestCase("int", "7", false)]
+        [TestCase("double", "11.13", false)]
+        [TestCase("DateTime", "2001/01/01", false)]
+        [TestCase(null, null, false)]
+        public void EqualsPersonWithObject_Test(string type, string value, bool expected) {
+            var standard = new Person("Andrew", "Buzz", "Carnegie");
+            object input = null;
+            switch (type) {
+                case "Person":
+                    input = value.To<Person>();
+                    break;
+                case "int":
+                    input = value.TryParse<int>();
+                    break;
+                case "double":
+                    input = value.TryParse<double>();
+                    break;
+                case "DateTime":
+                    input = value.TryParse<DateTime>();
+                    break;
+            }
+            Assert.AreEqual(expected, standard.Equals(input));
+        }
+
+        [TestCase(null, null, null, null, null, null, true)]
+        [TestCase("Andrew", "Buzz", "Carnegie", "Andrew", "Buzz", "Carnegie", true)]
+        [TestCase("Andrew", "Buzz", "Carnegie", "Carnegie", "Andrew", "Buzz", false)]
+        public void OpEqualsPerson_Test(
+            string af, string am, string al,
+            string bf, string bm, string bl,
+            bool expected
+        ) {
+            var a = new Person(af, am, al);
+            var b = new Person(bf, bm, bl);
+            Assert.AreEqual(expected, a == b);
+        }
     }
 }


wpsjob end time

wpsjob end time

--- Terradue.Tep/Terradue/Tep/Controller/Service/WpsJob.cs
+++ Terradue.Tep/Terradue/Tep/Controller/Service/WpsJob.cs
@@ -434,12 +434,14 @@
             if (response.Status == null) this.Status = WpsJobStatus.NONE;
             else if (response.Status.Item is ProcessAcceptedType) this.Status = WpsJobStatus.ACCEPTED;
             else if (response.Status.Item is ProcessStartedType) this.Status = WpsJobStatus.STARTED;
-            else if (response.Status.Item is ProcessSucceededType) {
-                this.Status = IsResponseFromCoordinator(response) ? WpsJobStatus.COORDINATOR : WpsJobStatus.SUCCEEDED;
-                if (this.EndTime == DateTime.MinValue && response.Status.creationTime != this.CreatedTime) this.EndTime = response.Status.creationTime;
-            }
+            else if (response.Status.Item is ProcessSucceededType) this.Status = IsResponseFromCoordinator(response) ? WpsJobStatus.COORDINATOR : WpsJobStatus.SUCCEEDED;
             else if (response.Status.Item is ProcessFailedType) this.Status = WpsJobStatus.FAILED;
             else this.Status = WpsJobStatus.NONE;
+
+            try {
+                var endtime = response.Status.creationTime.ToUniversalTime();
+                if (this.EndTime == DateTime.MinValue && (this.CreatedTime.ToString() != endtime.ToString())) this.EndTime = endtime;
+            }catch(Exception){}

             //if(this.Status == WpsJobStatus.COORDINATOR){
             //    var coordinatorsOutput = response.ProcessOutputs.First(po => po.Identifier.Value.Equals("coordinatorIds"));


Print viewers when stream is live

Print viewers when stream is live

Print a viewer count in the console when the stream is live.

--- WinterBot/WinterBotConsole/Program.cs
+++ WinterBot/WinterBotConsole/Program.cs
@@ -10,7 +10,7 @@
 {
     class Program
     {
-        static TimeSpan s_lastHeartbeat = new TimeSpan();
+        static DateTime s_lastHeartbeat = DateTime.Now;
         static volatile int s_messages = 0;
         static string s_errorFile;

@@ -180,13 +180,15 @@

         static void bot_Tick(WinterBot sender, TimeSpan timeSinceLastUpdate)
         {
-            s_lastHeartbeat += timeSinceLastUpdate;
-
-            if (s_messages > 0 && s_lastHeartbeat.TotalMinutes >= 5)
-            {
-                WriteLine("Messsages: {0}", s_messages);
+            if (s_messages > 0 && s_lastHeartbeat.Elapsed().TotalMinutes >= 5)
+            {
+                if (sender.IsStreamLive)
+                    WriteLine("Messsages: {0,3} Viewers: {1,3}", s_messages, sender.CurrentViewers);
+                else
+                    WriteLine("Messsages: {0}", s_messages);
+
                 s_messages = 0;
-                s_lastHeartbeat = new TimeSpan();
+                s_lastHeartbeat = DateTime.Now;
             }
         }


refactor(Logging): Expose _bInstalledDefaultReactors and show warning to install default refactors

--- Scripts/Logging/Logger.cs
+++ Scripts/Logging/Logger.cs
@@ -113,6 +113,15 @@
         /// Returns the singleton instance of the Logger object.
         /// </summary>
         public static LogSystem Instance { get { return Singleton<LogSystem>.Instance; } }
+
+        /// <summary>
+        /// Get or set the status of installed default refactors.
+        /// </summary>
+        public static bool InstalledDefaultReactors
+        {
+            get { return _bInstalledDefaultReactors; }
+            set { _bInstalledDefaultReactors = value; }
+        }
         #endregion

         #region Private Data
@@ -150,7 +159,7 @@
                 Application.logMessageReceived += UnityLogCallback;
             }
         }
-
+
         static void UnityLogCallback(string condition, string stacktrace, LogType type)
         {
             if (type == LogType.Exception)
@@ -213,7 +222,8 @@
 #if UNITY_EDITOR || NETFX_CORE
         public static void Debug(string subSystem, string messageFmt, params object[] args)
         {
-            LogSystem.InstallDefaultReactors();
+			if(!LogSystem.InstalledDefaultReactors)
+                System.Console.WriteLine("Call LogSystem.InstallDefaultReactors() prior to logging to see the output of Log.Debug(), Log.Status(), Log.Warning(), Log.Error() and Log.Critical().");
             LogSystem.Instance.ProcessLog(new LogRecord(LogLevel.DEBUG, subSystem, messageFmt, args));
 #if !NETFX_CORE
             System.Console.WriteLine("[{0}][{1}]: {2}", LogLevel.DEBUG, subSystem, string.Format(messageFmt, args));
@@ -233,6 +243,8 @@
         /// <param name="args">Formatting arguments.</param>
         public static void Status(string subSystem, string messageFmt, params object[] args)
         {
+            if(!LogSystem.InstalledDefaultReactors)
+                System.Console.WriteLine("Call LogSystem.InstallDefaultReactors() prior to logging to see the output of Log.Debug(), Log.Status(), Log.Warning(), Log.Error() and Log.Critical().");
             LogSystem.Instance.ProcessLog(new LogRecord(LogLevel.STATUS, subSystem, messageFmt, args));
 #if !NETFX_CORE
             System.Console.WriteLine("[{0}][{1}]: {2}", LogLevel.STATUS, subSystem, string.Format(messageFmt, args));
@@ -246,6 +258,8 @@
         /// <param name="args">Formatting arguments.</param>
         public static void Warning(string subSystem, string messageFmt, params object[] args)
         {
+            if(!LogSystem.InstalledDefaultReactors)
+                System.Console.WriteLine("Call LogSystem.InstallDefaultReactors() prior to logging to see the output of Log.Debug(), Log.Status(), Log.Warning(), Log.Error() and Log.Critical().");
             LogSystem.Instance.ProcessLog(new LogRecord(LogLevel.WARNING, subSystem, messageFmt, args));
 #if !NETFX_CORE
             System.Console.WriteLine("[{0}][{1}]: {2}", LogLevel.WARNING, subSystem, string.Format(messageFmt, args));
@@ -259,6 +273,8 @@
         /// <param name="args">Formatting arguments.</param>
         public static void Error(string subSystem, string messageFmt, params object[] args)
         {
+            if(!LogSystem.InstalledDefaultReactors)
+                System.Console.WriteLine("Call LogSystem.InstallDefaultReactors() prior to logging to see the output of Log.Debug(), Log.Status(), Log.Warning(), Log.Error() and Log.Critical().");
             LogSystem.Instance.ProcessLog(new LogRecord(LogLevel.ERROR, subSystem, messageFmt, args));
 #if !NETFX_CORE
             System.Console.WriteLine("[{0}][{1}]: {2}", LogLevel.ERROR, subSystem, string.Format(messageFmt, args));
@@ -272,6 +288,8 @@
         /// <param name="args">Formatting arguments.</param>
         public static void Critical(string subSystem, string messageFmt, params object[] args)
         {
+            if(!LogSystem.InstalledDefaultReactors)
+                System.Console.WriteLine("Call LogSystem.InstallDefaultReactors() prior to logging to see the output of Log.Debug(), Log.Status(), Log.Warning(), Log.Error() and Log.Critical().");
             LogSystem.Instance.ProcessLog(new LogRecord(LogLevel.CRITICAL, subSystem, messageFmt, args));
 #if !NETFX_CORE
             System.Console.WriteLine("[{0}][{1}]: {2}", LogLevel.CRITICAL, subSystem, string.Format(messageFmt, args));


Commented out, unneeded check warning

Commented out, unneeded check warning

--- UnityProject/Assets/Scripts/Botany/DefaultPlantData.cs
+++ UnityProject/Assets/Scripts/Botany/DefaultPlantData.cs
@@ -69,10 +69,10 @@

 	public void InitializePool()
 	{
-		if (PlantDictionary.ContainsKey(plantData.Name))
-		{
-			Logger.LogError("a DefaultPlantData Has the same name as another one name " + plantData.Name + " Please rename one of them to a different name");
-		}
+		//if (PlantDictionary.ContainsKey(plantData.Name))
+		//{
+			//Logger.LogError("a DefaultPlantData Has the same name as another one name " + plantData.Name + " Please rename one of them to a different name");
+		//}
 		PlantDictionary[plantData.Name] = this;
 	}


[ExposureNotification] Use the latest code (#894)

--- XPlat/ExposureNotification/build.cake
+++ XPlat/ExposureNotification/build.cake
@@ -1,10 +1,10 @@
 var TARGET = Argument("t", Argument("target", "ci"));

-var SRC_COMMIT = "5c0542d05a58789d14d512a111ef02ee46237e8c";
+var SRC_COMMIT = "73f94d79edc0912edf538d2f2c3501163d31d1c8";
 var SRC_URL = $"https://github.com/xamarin/xamarin.exposurenotification/archive/{SRC_COMMIT}.zip";

 var OUTPUT_PATH = (DirectoryPath)"./output/";
-var NUGET_VERSION = "0.7.0-preview";
+var NUGET_VERSION = "0.8.0-preview";

 Task("externals")
 	.Does(() =>


whoops

whoops

--- VRUnityProject/Assets/OurStuff/Scripts/ObjectPlacer.cs
+++ VRUnityProject/Assets/OurStuff/Scripts/ObjectPlacer.cs
@@ -346,7 +346,7 @@
                 /*We probably want this to have markings of some kind, or else change colors every 1 or 2 marks*/

                 GameObject markerCube;
-                if(varToShow == 0)
+                if(varToShow == 0)//Trees
                 {
                     markerCube= GameObject.Instantiate(rulerPrefab, Vector3.zero, Quaternion.Euler(new Vector3(0, -longitude, latitude)));//-longitude-1F, latitude+1F)));
                 }
@@ -360,14 +360,14 @@
                 //tOChild.localScale += new Vector3(10F,0.1F,0.1F);
                 //Debug.Log(countryName+":"+(float)(entry.Value[years[yearIndex]][0])/10+" "+(float)(entry.Value["1990"][1])*10F+" "+(float)(entry.Value["1990"][2])*10F);
                 /*Now below we create three bars, one for each value scaled to be between 0 and 10*/
-                float amountLight = (float)(entry.Value[years[yearIndex]][1]);
+                float amountLight = (float)(entry.Value[years[yearIndex]][2]);
                 //Debug.Log(amountLight);
                 float amountTrees = (float)(entry.Value[years[yearIndex]][0])/10F;
-                float amountPoll = (float)(entry.Value[years[yearIndex]][2]);
-
-                if(varToShow == 1)
-                {
-                    if((float)(entry.Value[years[yearIndex]][1]) != -1F)
+                float amountPoll = (float)(entry.Value[years[yearIndex]][1]);
+
+                if(varToShow == 1)//Elec
+                {
+                    if((float)(entry.Value[years[yearIndex]][2]) != -1F)
                     {
                         int power = 0;
                         while(amountLight >= 10F)
@@ -375,6 +375,7 @@
                             power++;
                             amountLight = amountLight/10F;
                         }
+                        Debug.Log(countryName +":"+amountLight+"x10^ "+power);

                         GameObject lightCubePow = GameObject.Instantiate(cubePrefab, Vector3.zero, Quaternion.Euler(new Vector3(0, -longitude,latitude)));//+1F, latitude+1F)));
                         lightCubePow.name = countryName+"ElectricityPow";
@@ -405,7 +406,7 @@
                 }
                 else
                 {
-                    if((float)(entry.Value[years[yearIndex]][2])!= -1F)
+                    if((float)(entry.Value[years[yearIndex]][1])!= -1F)
                     {

                         int power = 0;


Fix MinDate and MaxDate when is null.

Fix MinDate and MaxDate when is null.

--- Xwt.XamMac/Xwt.Mac/CalendarBackend.cs
+++ Xwt.XamMac/Xwt.Mac/CalendarBackend.cs
@@ -99,6 +99,9 @@

 		public DateTime MinimumDate {
 			get {
+				if (Widget.MinDate == null) {
+					Widget.MinDate = DateTime.MinValue;
+				}
 				if (userTimeIsUTC)
 					return ((DateTime)Widget.MinDate).ToUniversalTime ();
 				else
@@ -112,6 +115,9 @@

 		public DateTime MaximumDate {
 			get {
+				if (Widget.MaxDate == null) {
+					Widget.MaxDate = DateTime.MaxValue;
+				}
 				if (userTimeIsUTC)
 					return ((DateTime)Widget.MaxDate).ToUniversalTime ();
 				else