text:
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Buffers;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Xunit;

namespace System.Text.Json.Tests
{
    internal static class JsonTestHelper
    {
        public static string NewtonsoftReturnStringHelper(TextReader reader)
        {
            var sb = new StringBuilder();
            var json = new JsonTextReader(reader);
            while (json.Read())
            {
                if (json.Value != null)
                {
                    // Use InvariantCulture to make sure numbers retain the decimal point '.'
                    sb.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", json.Value);
                }
            }
            return sb.ToString();
        }

        public static string WriteDepthObject(int depth, bool writeComment = false)
        {
            var sb = new StringBuilder();
            var textWriter = new StringWriter();
            var json = new JsonTextWriter(textWriter);
            json.WriteStartObject();
            for (int i = 0; i < depth; i++)
            {
                json.WritePropertyName("message" + i);
                json.WriteStartObject();
            }
            if (writeComment)
                json.WriteComment("Random comment string");
            json.WritePropertyName("message" + depth);
            json.WriteValue("Hello, World!");
            for (int i = 0; i < depth; i++)
            {
                json.WriteEndObject();
            }
            json.WriteEndObject();
            json.Flush();

            return textWriter.ToString();
        }

        public static string WriteDepthArray(int depth, bool writeComment = false)
        {
            var sb = new StringBuilder();
            var textWriter = new StringWriter();
            var json = new JsonTextWriter(textWriter);
            json.WriteStartArray();
            for (int i = 0; i < depth; i++)
            {
                json.WriteStartArray();
            }
            if (writeComment)
                json.WriteComment("Random comment string");
            json.WriteValue("Hello, World!");
            for (int i = 0; i < depth; i++)
            {
                json.WriteEndArray();
            }
            json.WriteEndArray();
            json.Flush();

            return textWriter.ToString();
        }

        public static string WriteDepthObjectWithArray(int depth, bool writeComment = false)
        {
            var sb = new StringBuilder();
            var textWriter = new StringWriter();
            var json = new JsonTextWriter(textWriter);
            json.WriteStartObject();
            for (int i = 0; i < depth; i++)
            {
                json.WritePropertyName("message" + i);
                json.WriteStartObject();
            }
            if (writeComment)
                json.WriteComment("Random comment string");
            json.WritePropertyName("message" + depth);
            json.WriteStartArray();
            json.WriteValue("string1");
            json.WriteValue("string2");
            json.WriteEndArray();
            json.WritePropertyName("address");
            json.WriteStartObject();
            json.WritePropertyName("street");
            json.WriteValue("1 Microsoft Way");
            json.WritePropertyName("city");
            json.WriteValue("Redmond");
            json.WritePropertyName("zip");
            json.WriteValue(98052);
            json.WriteEndObject();
            for (int i = 0; i < depth; i++)
            {
                json.WriteEndObject();
            }
            json.WriteEndObject();
            json.Flush();

            return textWriter.ToString();
        }

        public static byte[] ReturnBytesHelper(byte[] data, out int length, JsonCommentHandling commentHandling = JsonCommentHandling.Disallow, int maxDepth = 64)
        {
            var state = new JsonReaderState(new JsonReaderOptions { CommentHandling = commentHandling, MaxDepth = maxDepth });
            var reader = new Utf8JsonReader(data, true, state);
            return ReaderLoop(data.Length, out length, ref reader);
        }

        public static byte[] SequenceReturnBytesHelper(byte[] data, out int length, JsonCommentHandling commentHandling = JsonCommentHandling.Disallow, int maxDepth = 64)
        {
            ReadOnlySequence<byte> sequence = CreateSegments(data);
            var state = new JsonReaderState(new JsonReaderOptions { CommentHandling = commentHandling, MaxDepth = maxDepth });
            var reader = new Utf8JsonReader(sequence, true, state);
            return ReaderLoop(data.Length, out length, ref reader);
        }

        public static ReadOnlySequence<byte> CreateSegments(byte[] data)
        {
            ReadOnlyMemory<byte> dataMemory = data;

            var firstSegment = new BufferSegment<byte>(dataMemory.Slice(0, data.Length / 2));
            ReadOnlyMemory<byte> secondMem = dataMemory.Slice(data.Length / 2);
            BufferSegment<byte> secondSegment = firstSegment.Append(secondMem);

            return new ReadOnlySequence<byte>(firstSegment, 0, secondSegment, secondMem.Length);
        }

        public static ReadOnlySequence<byte> GetSequence(byte[] _dataUtf8, int segmentSize)
        {
            int numberOfSegments = _dataUtf8.Length / segmentSize + 1;
            byte[][] buffers = new byte[numberOfSegments][];

            for (int j = 0; j < numberOfSegments - 1; j++)
            {
                buffers[j] = new byte[segmentSize];
                Array.Copy(_dataUtf8, j * segmentSize, buffers[j], 0, segmentSize);
            }

            int remaining = _dataUtf8.Length % segmentSize;
            buffers[numberOfSegments - 1] = new byte[remaining];
            Array.Copy(_dataUtf8, _dataUtf8.Length - remaining, buffers[numberOfSegments - 1], 0, remaining);

            return BufferFactory.Create(buffers);
        }

        public static List<ReadOnlySequence<byte>> GetSequences(ReadOnlyMemory<byte> dataMemory)
        {
            var sequences = new List<ReadOnlySequence<byte>>
            {
                new ReadOnlySequence<byte>(dataMemory)
            };

            for (int i = 0; i < dataMemory.Length; i++)
            {
                var firstSegment = new BufferSegment<byte>(dataMemory.Slice(0, i));
                ReadOnlyMemory<byte> secondMem = dataMemory.Slice(i);
                BufferSegment<byte> secondSegment = firstSegment.Append(secondMem);
                var sequence = new ReadOnlySequence<byte>(firstSegment, 0, secondSegment, secondMem.Length);
                sequences.Add(sequence);
            }
            return sequences;
        }

        internal static ReadOnlySequence<byte> SegmentInto(ReadOnlyMemory<byte> data, int segmentCount)
        {
            if (segmentCount < 2)
                throw new ArgumentOutOfRangeException(nameof(segmentCount));

            int perSegment = data.Length / segmentCount;
            BufferSegment<byte> first;

            if (perSegment == 0 && data.Length > 0)
            {
                first = new BufferSegment<byte>(data.Slice(0, 1));
                data = data.Slice(1);
            }
            else
            {
                first = new BufferSegment<byte>(data.Slice(0, perSegment));
                data = data.Slice(perSegment);
            }

            BufferSegment<byte> last = first;
            segmentCount--;

            while (segmentCount > 1)
            {
                perSegment = data.Length / segmentCount;
                last = last.Append(data.Slice(0, perSegment));
                data = data.Slice(perSegment);
                segmentCount--;
            }

            last = last.Append(data);
            return new ReadOnlySequence<byte>(first, 0, last, data.Length);
        }

        public static object ReturnObjectHelper(byte[] data, JsonCommentHandling commentHandling = JsonCommentHandling.Disallow)
        {
            var state = new JsonReaderState(options: new JsonReaderOptions { CommentHandling = commentHandling });
            var reader = new Utf8JsonReader(data, true, state);
            return ReaderLoop(ref reader);
        }

        public static string ObjectToString(object jsonValues)
        {
            string s = "";
            if (jsonValues is List<object> jsonList)
                s = ListToString(jsonList);
            else if (jsonValues is Dictionary<string, object> jsonDictionary)
                s = DictionaryToString(jsonDictionary);
            return s;
        }

        public static string DictionaryToString(Dictionary<string, object> dictionary)
        {
            var builder = new StringBuilder();
            foreach (KeyValuePair<string, object> entry in dictionary)
            {
                if (entry.Value is Dictionary<string, object> nestedDictionary)
                    builder.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", entry.Key).Append(DictionaryToString(nestedDictionary));
                else if (entry.Value is List<object> nestedList)
                    builder.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", entry.Key).Append(ListToString(nestedList));
                else
                    builder.AppendFormat(CultureInfo.InvariantCulture, "{0}, {1}, ", entry.Key, entry.Value);
            }
            return builder.ToString();
        }

        public static string ListToString(List<object> list)
        {
            var builder = new StringBuilder();
            foreach (object entry in list)
            {
                if (entry is Dictionary<string, object> nestedDictionary)
                    builder.Append(DictionaryToString(nestedDictionary));
                else if (entry is List<object> nestedList)
                    builder.Append(ListToString(nestedList));
                else
                    builder.AppendFormat(CultureInfo.InvariantCulture, "{0}, ", entry);
            }
            return builder.ToString();
        }

        public static byte[] ReaderLoop(int inpuDataLength, out int length, ref Utf8JsonReader json)
        {
            byte[] outputArray = new byte[inpuDataLength];
            Span<byte> destination = outputArray;

            while (json.Read())
            {
                JsonTokenType tokenType = json.TokenType;
                ReadOnlySpan<byte> valueSpan = json.HasValueSequence ? json.ValueSequence.ToArray() : json.ValueSpan;
                if (json.HasValueSequence)
                {
                    Assert.True(json.ValueSpan == default);
                    if ((tokenType != JsonTokenType.String && tokenType != JsonTokenType.PropertyName) || json.GetString().Length != 0)
                    {
                        // Empty strings could still make this true, i.e. ""
                        Assert.False(json.ValueSequence.IsEmpty);
                    }
                }
                else
                {
                    Assert.True(json.ValueSequence.IsEmpty);
                    if ((tokenType != JsonTokenType.String && tokenType != JsonTokenType.PropertyName) || json.GetString().Length != 0)
                    {
                        // Empty strings could still make this true, i.e. ""
                        Assert.False(json.ValueSpan == default);
                    }
                }
                switch (tokenType)
                {
                    case JsonTokenType.PropertyName:
                        valueSpan.CopyTo(destination);
                        destination[valueSpan.Length] = (byte)',';
                        destination[valueSpan.Length + 1] = (byte)' ';
                        destination = destination.Slice(valueSpan.Length + 2);
                        break;
                    case JsonTokenType.Number:
                    case JsonTokenType.String:
                    case JsonTokenType.Comment:
                        valueSpan.CopyTo(destination);
                        destination[valueSpan.Length] = (byte)',';
                        destination[valueSpan.Length + 1] = (byte)' ';
                        destination = destination.Slice(valueSpan.Length + 2);
                        break;
                    case JsonTokenType.True:
                        // Special casing True/False so that the casing matches with Json.NET
                        destination[0] = (byte)'T';
                        destination[1] = (byte)'r';
                        destination[2] = (byte)'u';
                        destination[3] = (byte)'e';
                        destination[valueSpan.Length] = (byte)',';
                        destination[valueSpan.Length + 1] = (byte)' ';
                        destination = destination.Slice(valueSpan.Length + 2);
                        break;
                    case JsonTokenType.False:
                        destination[0] = (byte)'F';
                        destination[1] = (byte)'a';
                        destination[2] = (byte)'l';
                        destination[3] = (byte)'s';
                        destination[4] = (byte)'e';
                        destination[valueSpan.Length] = (byte)',';
                        destination[valueSpan.Length + 1] = (byte)' ';
                        destination = destination.Slice(valueSpan.Length + 2);
                        break;
                    case JsonTokenType.Null:
                        // Special casing Null so that it matches what JSON.NET does
                        break;
                    case JsonTokenType.StartObject:
                        Assert.True(json.ValueSpan.SequenceEqual(new byte[] { (byte)'{' }));
                        Assert.True(json.ValueSequence.IsEmpty);
                        break;
                    case JsonTokenType.EndObject:
                        Assert.True(json.ValueSpan.SequenceEqual(new byte[] { (byte)'}' }));
                        Assert.True(json.ValueSequence.IsEmpty);
                        break;
                    case JsonTokenType.StartArray:
                        Assert.True(json.ValueSpan.SequenceEqual(new byte[] { (byte)'[' }));
                        Assert.True(json.ValueSequence.IsEmpty);
                        break;
                    case JsonTokenType.EndArray:
                        Assert.True(json.ValueSpan.SequenceEqual(new byte[] { (byte)']' }));
                        Assert.True(json.ValueSequence.IsEmpty);
                        break;
                    default:
                        break;
                }
            }
            length = outputArray.Length - destination.Length;
            return outputArray;
        }

        public static object ReaderLoop(ref Utf8JsonReader json)
        {
            object root = null;

            while (json.Read())
            {
                JsonTokenType tokenType = json.TokenType;
                ReadOnlySpan<byte> valueSpan = json.ValueSpan;
                switch (tokenType)
                {
                    case JsonTokenType.True:
                    case JsonTokenType.False:
                        root = valueSpan[0] == 't';
                        break;
                    case JsonTokenType.Number:
                        json.TryGetDouble(out double valueDouble);
                        root = valueDouble;
                        break;
                    case JsonTokenType.String:
                        string valueString = json.GetString();
                        root = valueString;
                        break;
                    case JsonTokenType.Null:
                        break;
                    case JsonTokenType.StartObject:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'{' }));
                        root = ReaderDictionaryLoop(ref json);
                        break;
                    case JsonTokenType.StartArray:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'[' }));
                        root = ReaderListLoop(ref json);
                        break;
                    case JsonTokenType.EndObject:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'}' }));
                        break;
                    case JsonTokenType.EndArray:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)']' }));
                        break;
                    case JsonTokenType.None:
                    case JsonTokenType.Comment:
                    default:
                        break;
                }
            }
            return root;
        }

        public static Dictionary<string, object> ReaderDictionaryLoop(ref Utf8JsonReader json)
        {
            Dictionary<string, object> dictionary = new Dictionary<string, object>();

            string key = "";
            object value = null;

            while (json.Read())
            {
                JsonTokenType tokenType = json.TokenType;
                ReadOnlySpan<byte> valueSpan = json.ValueSpan;
                switch (tokenType)
                {
                    case JsonTokenType.PropertyName:
                        key = json.GetString();
                        dictionary.Add(key, null);
                        break;
                    case JsonTokenType.True:
                    case JsonTokenType.False:
                        value = valueSpan[0] == 't';
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = value;
                        }
                        else
                        {
                            dictionary.Add(key, value);
                        }
                        break;
                    case JsonTokenType.Number:
                        json.TryGetDouble(out double valueDouble);
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = valueDouble;
                        }
                        else
                        {
                            dictionary.Add(key, valueDouble);
                        }
                        break;
                    case JsonTokenType.String:
                        string valueString = json.GetString();
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = valueString;
                        }
                        else
                        {
                            dictionary.Add(key, valueString);
                        }
                        break;
                    case JsonTokenType.Null:
                        value = null;
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = value;
                        }
                        else
                        {
                            dictionary.Add(key, value);
                        }
                        break;
                    case JsonTokenType.StartObject:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'{' }));
                        value = ReaderDictionaryLoop(ref json);
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = value;
                        }
                        else
                        {
                            dictionary.Add(key, value);
                        }
                        break;
                    case JsonTokenType.StartArray:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'[' }));
                        value = ReaderListLoop(ref json);
                        if (dictionary.TryGetValue(key, out _))
                        {
                            dictionary[key] = value;
                        }
                        else
                        {
                            dictionary.Add(key, value);
                        }
                        break;
                    case JsonTokenType.EndObject:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'}' }));
                        return dictionary;
                    case JsonTokenType.None:
                    case JsonTokenType.Comment:
                    default:
                        break;
                }
            }
            return dictionary;
        }

        public static List<object> ReaderListLoop(ref Utf8JsonReader json)
        {
            List<object> arrayList = new List<object>();

            object value = null;

            while (json.Read())
            {
                JsonTokenType tokenType = json.TokenType;
                ReadOnlySpan<byte> valueSpan = json.ValueSpan;
                switch (tokenType)
                {
                    case JsonTokenType.True:
                    case JsonTokenType.False:
                        value = valueSpan[0] == 't';
                        arrayList.Add(value);
                        break;
                    case JsonTokenType.Number:
                        json.TryGetDouble(out double doubleValue);
                        arrayList.Add(doubleValue);
                        break;
                    case JsonTokenType.String:
                        string valueString = json.GetString();
                        arrayList.Add(valueString);
                        break;
                    case JsonTokenType.Null:
                        value = null;
                        arrayList.Add(value);
                        break;
                    case JsonTokenType.StartObject:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'{' }));
                        value = ReaderDictionaryLoop(ref json);
                        arrayList.Add(value);
                        break;
                    case JsonTokenType.StartArray:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)'[' }));
                        value = ReaderListLoop(ref json);
                        arrayList.Add(value);
                        break;
                    case JsonTokenType.EndArray:
                        Assert.True(valueSpan.SequenceEqual(new byte[] { (byte)']' }));
                        return arrayList;
                    case JsonTokenType.None:
                    case JsonTokenType.Comment:
                    default:
                        break;
                }
            }
            return arrayList;
        }

        public static float NextFloat(Random random)
        {
            double mantissa = (random.NextDouble() * 2.0) - 1.0;
            double exponent = Math.Pow(2.0, random.Next(-126, 128));
            float value = (float)(mantissa * exponent);
            return value;
        }

        public static double NextDouble(Random random, double minValue, double maxValue)
        {
            double value = random.NextDouble() * (maxValue - minValue) + minValue;
            return value;
        }

        public static decimal NextDecimal(Random random, double minValue, double maxValue)
        {
            double value = random.NextDouble() * (maxValue - minValue) + minValue;
            return (decimal)value;
        }

        public static string GetCompactString(string jsonString)
        {
            using (JsonTextReader jsonReader = new JsonTextReader(new StringReader(jsonString)))
            {
                jsonReader.FloatParseHandling = FloatParseHandling.Decimal;
                JToken jtoken = JToken.ReadFrom(jsonReader);
                var stringWriter = new StringWriter();
                using (JsonTextWriter jsonWriter = new JsonTextWriter(stringWriter))
                {
                    jtoken.WriteTo(jsonWriter);
                    return stringWriter.ToString();
                }
            }
        }

        public delegate void AssertThrowsActionUt8fJsonReader(Utf8JsonReader json);

        // Cannot use standard Assert.Throws() when testing Utf8JsonReader - ref structs and closures don't get along.
        public static void AssertThrows<E>(Utf8JsonReader json, AssertThrowsActionUt8fJsonReader action) where E : Exception
        {
            try
            {
                action(json);
                Assert.False(true, "Expected exception: " + typeof(E).GetType());
            }
            catch (E ex)
            {
                Assert.IsType<E>(ex);
            }
            catch (Exception wrongException)
            {
                Assert.False(true, "Wrong exception thrown: Expected " + typeof(E).GetType() + ": Actual: " + wrongException.GetType());
            }
        }
    }
}


text:
Q: Can I use or condition on When into a trigger? I'm trying to create a trigger on oracle database and i'm having troubles with when condition.
When i try to use it i get "invalid relational operator"
   create or replace TRIGGER SQLTEST.TRIGGER_TESTE
AFTER INSERT OR UPDATE ON SQLDBA.VT_TABLE
FOR EACH ROW
WHEN (INSERTING OR NEW.FIELD_1 is null and OLD.FIELD_1 is not null or NEW.FIELD_1 <> OLD.FIELD_1)

DECLARE
VAR_FIELD_1 VT_LOG_TABLE.FIELD_1%TYPE;

BEGIN

SELECT SQLDBA.SEQ_LOG_TABLE.NEXtval into VAR_FIELD_1
FROM dual;

INSERT INTO VT_LOG_TABLE
(FIELD_0,VAR_FIELD_1,FIELD_2,FIELD_3,FIELD_1, FIELD_4 )
VALUES( :NEW.FIELD_0,VAR_FIELD_1, :NEW.FIELD_2, :NEW.FIELD_3, :NEW.FIELD_1,SYSDATE);

END TRIGGER_TESTE;

What's the right way to make that condition?

A: As graceemile says, the WHEN clause doesn't understand INSERTING. I'm not sure if you can rely on old.field_1 is null to indicate an insert since it looks like a nullable field (since new.field_1 can apparently be null). If you can't then you could just move the logic into the block:
create or replace trigger vt_trigger
after insert or update on vt_table
for each row
declare
    do_logging boolean := false;
begin
    if inserting then
        do_logging := true;
    elsif (:new.field_1 is null and :old.field_1 is not null)
        or (:new.field_1 is not null and :old.field_1 is null)
        or (:new.field_1 <> :old.field_1)
    then
        do_logging := true;
    end if;

    if do_logging then
        insert into vt_log_table (field_0, var_field_1, field_2, field_3,
            field_1, field_4)
        values (:new.field_0, seq_log_table.nextval, :new.field_2, :new.field_3,
            :new.field_1, sysdate);
    end if;
end vt_trigger;
/

I've changed the check a bit to this:
    elsif (:new.field_1 is null and :old.field_1 is not null)
        or (:new.field_1 is not null and :old.field_1 is null)
        or (:new.field_1 <> :old.field_1)

... to detect if field_1 has changed from null, to null, or from one non-null value to another; maybe you don't want that, the partial check just looked a bit odd to me. I'm assuming you only want to log if field_1 has changed in any way, or if you're inserting a new row of course.

A: I just tried something similar and Oracle doesn't like the INSERTING value in the WHEN condition. It appears to be OK with NEW and OLD, even if inserting.
From experimentation, it looks like your trigger will fire on INSERTS if you add this to your WHEN condition:
OR OLD.FIELD_1 IS NULL

So try something like this:
create or replace TRIGGER SQLTEST.TRIGGER_TESTE
AFTER INSERT OR UPDATE ON SQLDBA.VT_TABLE
FOR EACH ROW
WHEN (NEW.FIELD_1 is null and OLD.FIELD_1 is not null
   or NEW.FIELD_1 <> OLD.FIELD_1
   or OLD.FIELD_1 IS NULL)

DECLARE

... and so on

If that gets too complicated, you can create two triggers: one for UPDATE with the WHEN condition and one for INSERT, without conditions.
You could also try defining the trigger as AFTER INSERT OR UPDATE OF Field_1 ON VT_TABLE:
create or replace trigger vt_trigger
after insert or update of field_1 on vt_table
for each row
begin
    insert into vt_log_table (field_0, var_field_1, field_2, field_3,
        field_1, field_4)
    values (:new.field_0, seq_log_table.nextval, :new.field_2, :new.field_3,
        :new.field_1, sysdate);
end vt_trigger;
/

redpajama_set_name: RedPajamaStackExchange


Union Pacific Railroad may have had the ultimate assortment of diesel power during the 1960's. Many served throughout the 1970's. Ask any railfan who had the biggest diesel power, and they will answer UP. If you weren't an eyewitness to that classic era, here is your chance.
Charles Smiley has given us a mega supply of these trains. All vintage, no modern, restored substitutions. As we expect, there is a treasure trove of information to gain. Historical, insider knowledge and ' what if ' scenarios. Comprehensive coverage of the many rare engine types.
These GP9 engines are shown in 1955. Films range from the 1940's into the 1990's.
DD35's are more commonly seen, then would be expected. The dual GP35 model provides plenty of power. The focus is on the 1960 to 1980 period. That twenty years is the era you want. First and second generation power. All of the custom locomotives that UP was operating. This show is action packed.
UP ordered various cabless B units, such as the DD35B. Additionally: GP9B, SD24B and GP30B types were on the roster. Most of the competition did not order any cabless models, in the post F-unit years.
Sourcing color film from 14 different cinematographers and one videographer, the many facets of Union Pacific are deftly woven together in a cohesive, all encompassing story.
Two versions of turbines and their lifespan are covered.
As with the rest of the Charles Smiley catalog, high quality is assured. Film sources are generally in the very good to excellent range. Review space only allows a brief look into this encyclopedic presentation. The narrative alone is a goldmine.
In a show packed with rarities, a huge GE U50 is on the lead.
We Cab Handle It………………. We Know !
Audio tracks are synced to match the locomotives that are on the screen. Not everyone does this, and the difference is noticeable. He has a genuine enthusiasm for the subjects. Viewers receive a lively narrative. Strict attention to every detail, leaves the audience very aware of the action.
UP on SP rails. The Harriman era signals are still in use here and visible in the background.
Early history and the long lasting effects of E.H. Harriman's management, are delved into thoroughly. Intertwining of SP and UP are one example.
Custom, labor intensive maps are the best in the business. A multitude of maps display various points of UP evolution. A nice touch, the multiple merger partners or possible partners are also individually shown. Missouri Pacific added much to Union Pacific.
Hard to imagine, the F3 as mainline power.
Power such as this GP30 seem rather tame, in comparison to the behemoths.
Inclusion of numerous connecting railroads add even more interest to the program. Sure, some of that footage may overlap from another show. Keep in mind, not everyone may have all of his titles. The extra footage is always welcome. It is needed to tell the stories. A side order of : Santa Fe, Burlington Northern, Milwaukee Road and Rock Island are starters here. There are many more.
Western Pacific and some of the operations under UP are reviewed. Earlier in the timeline, BN and WP had joined forces on the Inside Gateway. Viewers will hear about BN as well.
Centennial models were numbered in the 6900 series. DD40AX were designed exclusively for UP. They introduced new features that Electromotive would include in future models.
A Conductor is in charge of a train. Watch closely at his movements. Checks his watch and he is telling the Engineer a few things.
There is much more within this fine program. Demo units, a bit of steam, trolley and electrics. A bunch of surprises. This show is one stop shopping, for classic Union Pacific.
The timeframe continues right into the contemporary era.
Union Pacific Vintage West is simply- Epic !


Selection procedure: On the basis of Physical test & Medical test, Written examination.
Application Fee: Rs. 50/- for UR/OBC and No fees for SC/ST Candidates.
Educational Qualification: For the post of Constable in Fire Cadre, Candidates must be SSC Passed with Science or equivalent from a recognized board.
How to apply: All interested applicants who are planning to apply for this vacancy may get the complete applying information and all other details by following below given Central Industrial Security Force (CISF) recruitment notification links. The last date of application submission is 27 January 2015.


Be the talk of the park with your designer collar! Baxter's Boutique collars are made with a strong webbing core and metal buckles for strength and durability. Fabric and prints are chosen with you and your fashionable pup in mind and our collars are even machine washable! Why not add one of our special Baxter's Boutique wash bags to your cart.


l make sure mirrors or cameras are fitted to the vehicle.
l keep all mirrors and windows clean and make sure you check all round before carrying out any manoeuvre.
l adjust all mirrors properly to help eliminate blind spots - before moving the vehicle.
l replace all mirrors and windows that are broken, or have cracks that may impair vision.
l fit cameras to the back of telescopic handlers.
l check that all cameras (if fitted) are clean and fully functional on tractors and telescopic handlers.


text:
Media ownership chart
March 10, 2011 | Montreal, Radio, Technology
Team 990, where "nothing fucking works"
I wasn't listening at the time, but enough people were at about 12:50pm Thursday during the Tony Marinaro show on CKGM when an advertising break seemed to go wrong. Very wrong.
Two ads play simultaneously, then they're followed by dead air. Marco Campagna struggles to get things running, but he's run into an apparently common computer problem and he lets out a string of obscenities, not realizing that a microphone in the studio is picking up his frustrated yells and is broadcasting them along with the ads.
After the break, according to those listening, cohost Randy Tieman apologized on behalf of the station for the tirade. Campagna, reportedly, feels horrible about what happened.
I feel for the guy. It's one of those worst-nightmare scenarios for anyone in radio broadcasting. And computer problems can be the most frustrating at times, especially when you're in an every-second-counts situation like live radio.
Unfortunately, I don't feel so bad that I'm going to keep the audio off the Internet. A listener caught the minute-long incident and created an audio file. I've made a video with captions and uploaded it to YouTube CTVglobemedia, which owns CKGM and apparently doesn't have a sense of humour, has filed a copyright infringement notice with YouTube, which has disabled the video.
Considering the sound of an announcer blurting out a bunch of F-bombs has no commercial value to the station (what are they going to do, sell it on iTunes?), I think a clear fair dealing case can be made for this.
Rather than play the game with YouTube and other video hosts, I'll just post the MP3 audio here: F-bombs on The Team 990
Enjoy. And just be glad it wasn't you.
UPDATE (April 4): The clip was played on the Howard Stern show today. Here's the audio: Team 990 F-bomb on Howard Stern show (MP3)
Tags: CKGM, Marco Campagna, media errors
← Geekfest this weekend CHOM drops PJ Stock, Merv Williams from morning show →
46 thoughts on "Team 990, where "nothing fucking works""
Sarah Leavitt March 10, 2011 at 10:46 pm
Yeah, I just happened to get in my car at this exact moment and it was epic. Poor guy but pretty hilarious to listen to. We're all still so angry at Chara, haha.
Alex H March 10, 2011 at 11:14 pm
Apparently the microphones f—ing work.
Muzition March 10, 2011 at 11:44 pm
Hahahaha. So fucking funny!
Derek Cassoff March 11, 2011 at 9:27 am
Next time I better heed the advisory at the beginning. I' m laughing so hard I have coffee coming out of my nose.
wkh March 11, 2011 at 9:55 am
Aw man he shouldn't feel bad; shit happens and sometimes so do F bombs. Whatever. If people are actually upset about this perhaps they should watch the Paccioretty hit again or some Japan earthquake footage.
Tenzin March 11, 2011 at 10:11 am
I work at a radio station . It was never That bad but some pretty weird things have been said on air.
Steve Rukavina CBC radio March 11, 2011 at 10:22 am
This could happen to any of us…I feel for that guy…
I once made a news anchor drop the F bomb several times by making fun of him for screwing up a news story. I was the op at the time but the anchors controlled their own mics. So as I'm making funny faces at him while he was screwing up the story – he starts getting steamed…we then go to break but he forgets to turn off his mic. The F Bombs start flying, broadcast to all that were listening and man was I laughing – but then the phone starting ringing off the hook in the news room.
Sean March 14, 2011 at 2:42 pm
Yeah, I was the anchor Michael.
It's funny now, but back then, when you're starting out in the business — kinda scary.
But yeah, it's all pretty harmless.
Humans being human
Jimmy Jack March 11, 2011 at 1:09 pm
OK, ya, it was pretty funny to listen to. But I think we have all been frustrated before, so no biggie. Someone will complain though and try to make a big deal out of it.
Skip Snair March 11, 2011 at 4:53 pm
Build new studios………they were old in the 70's.
James LaPierre March 11, 2011 at 5:12 pm
As some who worked there, The equipment is that bad, it often fails. Management really is tough on producers when theres a technical glitch, even if its an equipment problem 95% of the time. The fact that 2 commercials were playing and he got calls, one probably from GM on the instudio private line, along with trying to fix a computer problem, and probably getting grief in studio. And by the sound of it, I would have to say his mic wasnt the one on, but either Randys or Tonys who are responsible for their own mics. If Marco's mic was on, he would be alot clearer and louder. That being said, Marco is one of the hardest working guys there, loves this job……he must because it pays shit….and the person who feels worse in this situation is him. Only if mics are on when a host looses his mind off air…….a daily experience
CURT March 11, 2011 at 7:43 pm
I figure the C.R.T.C is $till totaling the fine!! " Fuuuuuuuck"hehehe.
pg1syncro March 11, 2011 at 10:46 pm
I've seen this happen with old McCurdy broadcast consoles; after a power failure, all the strips on the board would be turned on, which meant that the mic was live, and the studio speakers muted, so the announcer / operator would have no clue of what was happening…and obscenities usually followed on-air!!
Alexandre March 12, 2011 at 8:26 am
So… What are The CRTC's obscenity rules? Do they depend on complaints? Are they applied by that "Money for Nothing" board?
My radio experience is very limited. Went on the air a couple of times in the US where they're very prominent. At RadCan and CBC, I wasn't told about any. And, on the French side, seems to me thst you can hear quite a few obscenities, including some in English. But it might be just an impression. I don't really listen to radio.
Fagstein Post author March 12, 2011 at 10:31 am
The Canadian Broadcast Standards Council handles complaints of this nature, should someone wish to file one. It has a code which covers this. Though because it was inadvertent and followed by an apology, I can't imagine there being any serious fallout.
Alexandre March 12, 2011 at 10:52 am
The CBSA is the board which recently banned Money for Nothing, right? And they only act on complaints? Is there a specific list of words we're not allowed to use in Canadian broadcasting? If so, it doesn't sound as well-known as the US one. If not, it could be a useful reply to those people in the US who badmouth our broadcasting policies (CanCon, say) as restricting speech too severely.
Yes. Yes. No.
Nice! Thanks.
JC March 15, 2011 at 8:02 pm
Well … there's no specific list, but the CBSC has been VERY clear that use of the F-word, in any form, is not acceptable outside of late-night hours. But I agree that in this case, the extenuating circumstances and the immediate apology would probably mitigate any real damage.
Vahan March 12, 2011 at 12:52 pm
I could feel the frustration. I have worked for many cheap assed bosses who expect you to pull off miracles with a roll of duct tape and some wire while they rode around in their luxury cars and sucked the company dry.
James Campagna March 12, 2011 at 3:19 pm
No such thing as bad publicity :P
Maybe it's time to update the ancient equipment?
ATSC March 12, 2011 at 4:15 pm
Very funny on the listeners end. Very frustrating on the technical operators end. All in all nobody dead.
Perhaps the station can put some money into new equipment.
jean-guy quekette March 12, 2011 at 5:42 pm
>Team 990, where "nothing fucking works"
That should be their new slogan.
This is GREAT news for 990 because it gives them more publicity that they dont have to pay for.
Im not exactly a spring chicken but I dont know almost anyone who still listens to sports radio willingly.
If you like sports, podcasts are the way to go.
You can listen when you want, where you want, you DONT HAVE commercials and you can listen to sports YOU like.
I have RSS feeds to 3 soccer podcasts (2 euro and north american), 3 basketball (2 US and one euro), 2 MMA (1 US and one japanese), two judo ones (one US and one Euro), 1 track and field one (france), as well as volleyball, rugby, handball and a few general sports ones and i honestly can not ever listen to them all.
Especially when you throw in tech, music, science and current affair ones.
This F-Up served to remind me that they still exist but after listening to it in the car for 2 hrs instead of my MP3 players, its only reinforced my position that Im not missing anything.
Thats besides the quality of the content and hosts which range from the cliche old farts (the egomaniacal bozo the clown and Randy who is actually a nice guy), to the the stupid ex jock to the overwhelming majority who sound like their doing CEGEP radio at Dawson.
The only thing of some value is Marinaro who was just plain terrible (Who is that Joe Minga was the consensus of his first year) when he started but has really made himself into a strong broadcaster.
So keep the flubs coming 990, any publicity is better than no publicity,,, like Charlie Sheen you got to feed that media beast.
Might I suggest you find a way to make 'nip slips' possible on radio and you got a winner right there.
You have the perfect audience for them.
Sports only radio is a very narrow cast concept when you think about it. Most people enjoy sports, but they don't want to hear about them 24 hours per day. It is even tougher in Montreal without a major league baseball team and basketball (compared to Toronto) which means a whole lot less "local sports" to talk about. Considering they are working from a horrible, horrible starting point, they do a pretty good job.
It is amazing actually, when you consider that a generally useful model (all news radio) has failed like mad, yet somehow the all sports station manages to survive. How odd!
What's In A Name? March 13, 2011 at 11:23 pm
That's quite the social life you've got going there. Is that podcasting or potcasting?
Sports radio DOES work in most major markets because males, especially males with money to spend, between 25 – 54 and 18 – 49 listen. They listen a lot. Willingly.
Teddy March 22, 2011 at 1:01 pm
Montreal, Major Market?
Too funny, hope you're booked at Just for Laughs this year.
What's In A Name? March 24, 2011 at 11:10 am
I stand corrected. Sports radio does work in most markets including Ottawa, Calgary, Edmonton, Montreal and now, Winnipeg. There are numerous markets south of the border – including the bustling metropolis of Indianapolis, Indiana – where it also grabs a good chunk of male listeners. Funny, huh?
Julie Bélanger March 13, 2011 at 11:02 am
Between 8:30 and 9am, something similar happened on Radio-Canada with Homier-Roy. Nothing was working. Nothing at all. No traffic guy, no pre-recorded reports, no news, no music… They didn't swear on air but I'm sure there was a lot of F words going on between mic interventions.
Ragin' Ronic March 15, 2011 at 12:15 am
I think that, in a way, he kinda spoke what a lot of people think about the whole Canadian broadcast industry…it REALLY IS Fucked Up the ass. XD
Tony T March 15, 2011 at 5:47 am
I feel for the guy. Being a tech/producer is tough work especially considering you can't depend on the equipment. I've had DCS fail on a cart and automatically fire the next item even though there was a stop set marker between (next item happened to be a top hour news intro which just played 10 minutes early). I just thank god for the dump delay button at least once a week.
This made me laugh. Sometimes you feel like the only person in the world that this sh!t happens to. Imagine that fault report was an interesting read.
Fassero March 15, 2011 at 10:50 am
Well, when they become TSN Radio 990 (you have to think "inevitable"), at least they will have gone out with a memorable bang :)
Big Ass Superstar March 15, 2011 at 11:59 am
Been there, minus the live mic.
Roundhouse March 15, 2011 at 7:18 pm
For all the incompetence at that place, this honest mistake probably got the poor guy fired. I haven't heard him doing updates since last week.
Teddy March 17, 2011 at 8:02 am
Team 990…where nothing fucking works…check their ratings, you are so correct!
Sheldon March 20, 2011 at 9:53 pm
Hey, Teddy. Explain to all of us what you expect an all-sports radio station to be doing in the overall ratings in a market. They aren't trying to beat out the big-gun FM music stations. They aren't going after the Angry-phone CJAD talk show audience. What Team 990 is doing is serving the demographic that they are targeting and, according to ratings, reaching them and serving them quite well. It seems to me that the goal of a station such as Team 990 is to pay the bills, pay the staff, attract enough advertising to suit the demographic audience they are targeting, and hopefully have a few bucks in their pockets at the end of the day. Something tells me they are meeting their goal quite nicely. They have a dedicated slice of the overall audience who will back them up, and their advertisers, to the hilt. They have managed to coax over a substantial number of the Francophone sports fans as well. What more should they be looking for? Everyone out there keeps talking about the immenent death of Team 990, yet they keep chugging along. While doing it, they are taking on a lot of interns, giving them a chance to work in the market and they have developed some home-grown talent along the way.
No telling how the arrival of TSN Radio will change things. One thing it won't change though. They will still be all-sports. They manage to do what they do on a shoe-string budget and without the support of a wealthy sibling on the FM band.
I don't see why there are so many people around who want nothing more for them to fail. But what do you want to replace them? Another failed attempt at all-news? Another failed attempt at oldies? Another failed attempt at talk radio with attitude?
Their slogan says it all…50,000 watts of sports and nothing but sports…and that is exactly what their listeners want.
Check demographics Sheldon, all sports radio is dying if not dead.
And in a city where all you have is hockey, you're screwed.
Glad my money isn't invested in a station where "nothing fucking works!"
Marc March 23, 2011 at 7:31 am
Apparently you've never heard of the Alouettes or Impact.
Teddy March 24, 2011 at 11:59 am
Are the Als or Habs on the Team 990?
The sports station that doesn't carry sports.
Take a bow.
Wrong again. Are you one of those disgruntled ex – employees? Sports Radio has actually gained traction in this country. And lookout, but here comes MLS soccer and The Team (along with TSN) has one of the best soccer commentators in North America in Noel Butler.
If anything in radio is "dying if not dead" it could be the supposed heritage station in this city, as well as the notion that commercial radio employs true personalities with some degree of creative freedom.
What's In A Name? March 18, 2011 at 1:02 am
Sorry Teddy but as someone who knows somebody who has access to the ratings the station actually does quite well during the week across the board from 6 AM to 7 PM. Their evenings and weekends bring their overall numbers down but their target demo of males 25 – 54 is strong. Especially in both AM & PM drive shows. And they consistently outdraw CJAD in that important demo in the afternoon.
So Marinaro and Randy draw SFA? Like I said.
To me there's no doubt you're a very disgruntled former employee.
Saif Qaddafi March 19, 2011 at 5:16 pm
Anyone knows what happened to him?
Jeff Goldstein April 4, 2011 at 1:32 pm
The clip was played on Howard Stern today – April 4th
Howard was very Sympathetic to Marco Campagna…
The Stern Show reached a huge worldwide audience…
Saif Qaddafi April 12, 2011 at 12:00 pm
Wow… Howard Stern mentioned him and sympathized… no such thing as bad publicity after all.
Blogosphere (268)
Canadiens (125)
Media (1,445)
Montreal (1,466)
My articles (159)
Navel-gazing (161)
On the Net (159)
Pop quiz (96)
Slow News Day (127)
West Island (67)

redpajama_set_name: RedPajamaCommonCrawl


SPRINGFIELD, Mass (WWLP) -- Black ice is back in Western Massachusetts. "Usually if I'm out, if I do have to go out, I try to be very careful," Judy Bouchard told 22News.
Black ice tends to form at night or in the wee hours of the morning, and drivers tend not to notice it until they've lost control. winter driving safety tips Winterize your car: Make sure your car is ready for winter and the weather it brings.
You can tell you are driving on ice, and black ice, because your tyres make little noise and the steering becomes light. When driving in fog use dipped headlights, allow more time for your journey, slow down.


To celebrate 21 years since the formation of Eskimo Joe, the past 12 months has seen the platinum-selling band from Western Australia reissuing their back catalogue in new formats.
After reissuing coloured vinyl and special edition CDs for Girl, Ghosts Of The Past and Inshalla in 2018, Eskimo Joe now announce the latest album to be given the deluxe treatment will be Black Fingernails Red Wine. Red vinyl, 2CD deluxe edition and 40-track digital versions will be released on Friday May 10 and are available for pre-order now HERE.
Eskimo Joe's third studio album Black Fingernails Red Wine was released in 2006 and went to number one on the ARIA Album Chart. It spent 62 weeks in the ARIA top 50 albums chart, won four ARIA awards and has sold four times platinum (more than 300,000 copies in Australia alone).
As well as the popular singles Sarah, New York and the title track, the 2CD edition of Black Fingernails Red Wine features more than 25 bonus songs. Chosen by the band, the package includes remixes, B-sides and live material. It includes a 2019 remix of Black Fingernails Red Wine by Melbourne production duo Le Sauvage, as well as unheard demo recordings from the album's earliest 2005 sessions.
To align with the reissue of this special album, Eskimo Joe will play Black Fingernails Red Wine in full at an exclusive, intimate hometown show on Friday May 10 at The Fremantle Social. Tickets for this very special one-off show will be available from Thursday March 21 via www.eskimojoe.net. Eskimo Joe will be available to sign new CD and LP editions of Black Fingernails Red Wine after the performance.


text:
Q: why do I have to add a higher folder when opening a file in python when debugging? I have a directory tree similar to this:
my_application
    my_component
        process_config.py
        process_config.yaml
    runner.py

I launch python runner.py and it calls a class inside process_config.py that reads the yaml file like this:
with open(
   os.path.join("my_component", "process_config.yaml"), "r"
) as proces_config_defaults_source:

And it works fine when y run python runner.py, but it can't locate the file when I run the file from the debugger. I have to use this option for it to work:
with open(
    os.path.join("my_application", "my_component", "process_config.yaml"), "r"
) as proces_config_defaults_source:

How can I make the debugger to work the same as a python run?


text:
You are here: Publications Film Reviews 2015 Reviews December 2015 Heidi
Last Updated on Tuesday, 01 December 2015 13:05
Germany | Switzerland 2015
Opening December 10, 2015
Directed by: Alain Gsponer
Writing credits: Petra Volpe
Principle actors: Anuk Steffen, Bruno Ganz, Isabelle Ottmann, Quirin Agrippi, Katherina Schüttler, Hannelore Hoger, Maxim Mehmet, Peter Lohmeyer, Jella Haase
Swiss author Johanna Spyri wrote the children's book Heidi, which was published in 1879. Today it is the third most-translated book after the Bible and the Communist Manifesto. Films have appeared in 1920, 1937, 1952, and 1974, as well in series on television. It is especially popular as the subject of amination and mangas in Japan. Now we have a brilliant new version by director Alain Gsponer which does more than just confirm the fact that the Heidi story is still universally captivating in the 21th century.
Eight-year-old Heidi is "dumped" onto her grouchy old grandfather Almöhi high in the Swiss Alps. She blossoms in the freedom of wide-open spaces and loving animals. She helps the village boy Geißenpeter herd grandfather's goats. In the spring Heidi's aunt Dete snatches her from this paradise and travels by train to Frankfurt, where Heidi will be a companion to Klara, who is handicapped. Life here is the exact opposite of her carefree life in the Alps. In the big, gloomy mansion of the Sesemann family, the governess Frau Rottenmeier keeps a strict regime of manners and obligations and time schedules. Heidi must go by her "real" name: Adelheid. Only Klara's grandmother recognizes Heidi's insecurity and unhappiness. Under her care, Heidi learns to read and write. In the end Heidi returns to her grandfather and Klara takes unexpected steps, both figuratively and literally, to visit her in the Alps.
The story alone keeps our undivided attention, but it is magnificently supported by gorgeous photography of the Swiss Alps and 19th century towns and villages (filmed in Quedlingburg, Alberstadt and Altenburg in the former East-German Harz Mountains.) What luck to have been able to cast nine-year-old Anuk Steffen as Heidi in her first film. Naturally, she is in almost every shot: wild and sassy, but still sensitive to others. German actors such as Bruno Ganz, Hannelore Hoger, Maxim Mehmet, Peter Lohmeyer and Hannelore Holger are excellent. Even the 75 goats were personally selected by animal trainer Michael Schweuneke in a casting. You will understand the story, even if you don't understand every word in a mix of German and Swiss-German. So tell your kids to leave their electronic gadgets and internet at home and take them to enjoy a world of love and interaction in the cinema. (Becky T.)


text:
Debra Saunders: Scrapping Class Act was right…
Debra Saunders: Scrapping Class Act was right thing to do
PUBLISHED: October 18, 2011 at 12:00 a.m. | UPDATED: August 28, 2017 at 9:09 a.m.
On Friday, the Health and Human Services Secretary Kathleen Sebelius announced that the Obama administration was ending the Class Act – or, Community Living Assistance Services and Supports program – enacted as part of President Obama's Affordable Care Act. In doing so, the administration killed off a major provision of Obamacare – a new voluntary program designed to offer affordable long-term care – yet the story was barely reported in the press.
The Obama administration did the right thing – and it could not have been easy. Democrats had been promoting the plan, brainchild of the late Sen. Ted Kennedy, as a means of protecting middle-class families from having to sell their assets if they need long-term care.
As Sebelius wrote in a letter to Congress, her department spent 19 months trying to crunch the numbers to make the law work, "But despite our best analytical efforts, I do not see a viable path forward for Class implementation at this time."
Translation: Congress passed and the president signed a bill to create a huge new government program, even though it wasn't remotely doable.
Worse, they were warned. Medicare and Medicaid chief actuary Richard S. Foster reported the "very serious risk" that the Class Act would be "unsustainable." The Concord Coalition called it a poorly designed "gimmick." Sen. Kent Conrad, D-N.D., had called Class a "Ponzi scheme of the first order." To address those concerns, Sen. Judd Gregg, R-N.H., inserted a requirement in the enabling legislation that required the Class Act be actuarially sound for 75 years. Sebelius could not meet the Gregg requirement; hence, Friday's announcement.
First, there's the problem of adverse selection. As Foster explained, "Individuals with health problems or who anticipate a greater risk of functional limitation would be more likely to participate than those in better-than-average health." Add modest work requirements and subsidized $5 monthly premiums for students and low-income enrollees, and the Class Act promised – my words, not Foster's – adverse selection on steroids.
It also doesn't help that Class benefits are less generous than those offered by private insurers. The primary Class benefit is $50 per day – which could go toward in-home or nursing home care. Private plans, the HHS report noted, provide a daily benefit of $150 to $200.
Premium calculations for Class started at $354 per month – a big bite in your average paycheck. So the department explored modifications – including an option to reduce the daily benefit as low as $10 – to bring premiums down as low as $99 per month.
In the end, federal numbers crunchers could not escape the bitter fiscal reality: Healthy adults can buy better private plans for less money.
On Friday, Sebelius wisely ended a bad program before it started. On Monday, White House spokesman Nick Papas told the Associated Press, "Repealing the Class Act isn't necessary or productive."
To recap, after 19 months of cooking the numbers in every of possible configuration to give the Class Act a passing grade, Sebelius had to shut it down in order to protect the public, but the White House wants to keep Class open to protect its political hide.
Email dsaunders@sfchronicle.com.


text:
Did a Symbolic Random Chat Room Name Appear After Etika's Death?
Fact Checks, Viral Content / By Kim LaCapria / July 3, 2019 July 3, 2019
During a memorial livestream, Alice Pika randomly generated one five-letter code, coincidentally a nickname Etika called her.
After the death of YouTube gaming streamer Etika was confirmed in late June 2019, his on-and-off girlfriend Alice Pika hosted a memorial livestream on June 26 2019.
Not long after, a rumor circulated on Reddit and other sites about what the appearance of a random name that was interpreted as a sign or signal from Etika during the four-hour streaming session:
Etika's Message. from EtikaRedditNetwork
In the above screengrab from June 28 2019, a forum user wrote:
About two days ago, Etika's on and off girlfriend held a tribute stream for his friends after he was confirmed dead.
About 14 minutes in, she was creating a room for online play in Super Smash Ultimate for everyone to join. When she went to give everyone the code, it read M4GGY.
For those that understand why it was important, Etika always called her Magnolia or Maggy to tease her. The room code itself is always random so this is one hell of a coincidence. And it happened in a Smash stream no less
In his I'm sorry video, he said he would send a sign if it's possible. [link to stream provided]
That post made reference to a since-removed video published by Etika shortly before his death. Although the original video was not available to verify his purported promise, a Reddit comment pointed to a mirror with a transcription of Etika's comments. In that video, Etika is quoted at 8:33 as saying that "as far as we know, there is no life after death," adding that if possible, he will send "as many blessings" as he can "from the other side."
Rough transcriptions of Etika's spoken comments in the "I'm Sorry" video did not include the quote. However, the original video's description field was well-documented. In it, Etika wrote:
I don't know what awaits me on the other side, but I'm ready to face it. As far as we know, there is no life after death. My time ends now, but if there is a way for me too, I'll send you all as many blessings as I can from the other side.
In addition to Reddit's r/EtikaRedditNetwork, the story was shared to r/NeverTellMeTheOdds and r/PewDiePieSubmissions. The latter post was titled: "I don't know if this was posted, but it gave me the chills. 1 in 60.5 million odds of that code being generated. You're 5x more likely to win the lottery then this happening."
In at least three tweets before his death, Etika called Pika "Magnolia":
You're going to jail, Magnolia.
— Etika @ 999 (@Etika) April 30, 2019
I'VE BLOCKED MAGNOLIA. I WILL ONLY FOLLOW THE STRONG. PROVE YOUR STRENGTH TO ME.
MORGANA AND MAGNOLIA, A PAIR MADE IN HEAVEN.
I always loved M names.
— Etika @ 999 (@Etika) May 1, 2019
At roughly the 14-minute mark of the livestream, Pika arranges a room for players to join a game of Super Smash Brothers:
She informs viewers of the code and reads it out, stating:
It's M-4-G-G-Y
At around 14:10, Pika realizes that the randomly generated code, M-4-G-G-Y, appears to spell out "Maggy." She then explains Etika used to call her "Magnolia" or "Maggy," adding (as he said in his tweet) that he "always liked 'M' names."
Users speculated that the odds of such a code being generated were slim, proposing rudimentary calculations for the odds "M4GGY" would come up as a chat code name:
It's really interesting when you consider the chances of M4GGY coming up at random. I don't know the exact limits of how the code is generated but assuming it uses all 26 letters and 10 digits, that's 365 possible codes. That's 1 in 60,466,176.
I normally don't really believe in an afterlife but ever since I saw this image I haven't stopped thinking about it. Coincidence? Maybe, but the chances are slim.
Assuming that room codes are five digits, those odds would probably change if you account for other symbolic five-character room names, such as "Etika" or "Alice." Still, the appearance of "M4GGY" as a code was likely a long-odds occurrence.
In short, the screengrab about Etika's purported message makes a number of claims. One is that Etika promised to send a signal "from the other side," which appears to be referenced in a copy of one of his last transmissions. Another is that Etika called Pika "Maggy" or "Magnolia"; in extant tweets, he replies to her account referencing her as "Magnolia" (for which "Maggy" is a nickname). Another is that the code randomly generated in a livestream, which is accurate as seen above and was witnessed by many viewers. Whether the conclusion is legitimate is a matter of personal interpretation, but the claim was honestly represented in its various forms on social media.
If you or someone you know is having suicidal thoughts, a list of suicide prevention lines by country can be found here.
ETIKA INFLUENCED TRIBUTE STREAM FROM THE BEYOND
Etika's Message.
I don't know if this was posted, but it gave me the chills. 1 in 60.5 million odds of that code being generated. You're 5x more likely to win the lottery then this happening.
Etika is dead. (please read the description)
ETIKA I'm Sorry
I transcripted Etika's final video.
Transcript of Etika's Final Video
UPDATE: The "I'm sorry" video was removed BY YOUTUBE, not Etika
Etika concerns fans with distressing 'I'm Sorry' video Read more at https://www.gamerevolution.com/game-culture/556057-etika-missing-im-sorry-video#jztHHCH5p0uTFYfV.99
Hundreds of thousands demand that Etika's previously deleted YouTube channel be restored
YouTubers are posting emotional tributes after the death of Etika
YouTuber Etika is missing after sharing worrying video as fans voice concerns and police urge people to look out Read more: https://metro.co.uk/2019/06/21/youtuber-etika-missing-sharing-worrying-video-fans-voice-concerns-police-urge-people-look-10023268/?ito=cbshare Twitter: https://twitter.com/MetroUK | Facebook: https://www.facebook.com/MetroUK/


From Alashan Cashmere's Caroline Grace collection, this poncho is a staple in any woman's closet. A travel friendly style, the topper can be worn four different ways to effortlessly change up your look. To wear different ways, just think '1/4 turn'. Start with the seam so it is in the front. Then, do a 1/4 turn to wear asymmetrically. One more 1/4 turn and you can wear higher up in front (you can bring it up to your neck in front if you like) and it will be lower in the back. Great for over a dress or separates! Lastly, you can thread it through to make a scarf.


text:
STAR STUDDED FIELD FOR IPI TOMBE STAKES
Lucky Sam won the 1600m Independence Trophy on April 5. He is followed by Killa Man.
We seldom have weight-for-age feature races at Borrowdale Park, but the $10 000 MOTA Ipi Tombe Stakes, to be run over 1600m on Sunday, is one of them.
Eleven horses have stood their ground and this includes Super Trouper who won this race last year, and Madigan, the 2014 winner.
No three-year-olds were entered so Tallie Two, Equina and Gentle Brook will all carry 57,5 kgs, while the remainder of the field, all geldings, are allotted 60 kgs.
If you like to keep things simple, choose the horses with the highest Merit Ratings, namely Lucky Sam, Equina, Super Trouper, Atso's Scheme and Eurakilon, and you should win the quartet – if the handicapping is on the ball. However, this is racing, always a mind game, so let's see what some of the trainers think.
Penny Fisher saddled three winners at the last race meeting and she says her charge, Tallie Two, is very well and "in with a big chance. There are several horses that could win this race, such as Principled Man and Atso's Scheme, and one can never leave out Equina."
Tallie Two, a four-year-old daughter of Soar With Eagles (USA), has won 5 races and is drawn 2. Her regular jockey Ryan Munger rides.
Kirk Swanson will be represented by Madigan and Road To Dubai. He says although the weight conditions of the race don't suit these horses, "We decided to give Road to Dubai a go at the 1600m. There are very few sprint races available for him so we want to see how he goes back round the turn. He did run second over further than 1600m as a three-year old, so he definitely can see out the trip. He has a good draw so I am hoping he can give them some cheek."
Road to Dubai has covered himself with glory in sprints recently and has now won 7 races. Francois Herholdt rides the four-year-old gelding again and he has drawn 3.
Of Madigan Kirk says "he loves the mile and normally runs well in the softer conditions, so he could be an outsider to consider, having won the race before. At the weights Lucky Sam and Equina are well in and would probably be the two horses to beat, but I think it will be an interesting race."
Madigan, a Zimbabwe Triple Crown winner, has won 10 races and will be ridden by Norbert Takawira who knows the seven-year-old well. They jump from the number 7 starting stall.
Gokhan Terzi reports that his main race runners are doing very well. "Eurakilon has a big chance but will find this 1600m a little on the short side, which is why I have decided to put blinkers on him. He should be in the top four."
He says Super Trouper "can beat this field if he feels like it. He put up a very good grass gallop on Monday, so I'm expecting him to be competitive. "
"Principled Man is Andrew Fortune's elect. He will be a big runner despite being out at the weights. He is distance suited and Andrew knows him well. All three of my runners will be involved in the finish. I just hope one of them can put his head down when it matters
As for the possible dangers Gokhan says "Atso's Scheme is now in good form. Road To Dubai and Lucky Sam should also be thereabouts."
Lance Pagel rides Eurakilon (a six-year-old) who showed his paces when finishing a very close second to Print The Pounds over 1800m on January 16. This pair will be hoping for better luck this time and are drawn 4. The son of Classic Flag has won 5 races.
Super Trouper could be the one they all have to beat – and they won't be sure he's beaten until the very last stride because this eight-year-old, by West Man (USA),has a flying finish. Brendon McNaughton, who teams up well with this 12-time winner, will be in the irons and Super Trouper has drawn 11.
Principled Man by Windrush (USA) is a winner over the Ipi Tombe distance and it is significant that Fortune takes the ride. Drawn 9, the five-year-old has won four races, and will have supporters on Sunday.
Unfortunately I was unable to get comments from the Stidolph and Bronkhorst yards both of whom are fielding fancied runners. Bridget Stidolph will saddle Lucky Sam, Atso's Scheme and Mica Point, while Amy Bronkhorst is responsible for Equina and Gentle Brook.
Zimbabwe's top race mare Equina, needs no introduction. Her 12 wins include the Castle Tankard and OK Grand Challenge, and she is always a force to be reckoned with. Now a six-year-old, the daughter of Silvano (GER) will be ridden by Apprentice Callan Murray and is drawn 5.
Gentle Brook, by Windrush (USA) is an 8-time winner at five years, unplaced lately but usually not far back. Nikki Sibanda rides on Sunday and Gentle Brook is drawn 8.
Lucky Sam runs off a merit rating of 97 and all eyes will be on this five-year-old gelding, by Imperial Stride(GB) out of a Jallad mare. He has won six races, including the 1900m Republic Cup and at his best can be formidable. Karl Zechner will be riding Lucky Sam who is drawn 1.
The four-year-old Atso's Scheme ran second to Picalilly over 1300m at the last meeting and has won over the mile. This four-time winner is drawn 10 and will be ridden by Fanie Chambers.
This will be the second run after a break for Mica Point, a four-year-old son of West Man (USA) and winner of two races. Kevin Derere has the ride and Mica Point has drawn 6.
We are looking at a top-class field with many claims to fame, but don't ask me to name the winner.
Photograph: Gavin Macleod. Lucky Sam won the 1600m Independence Trophy in April 2015, followed by Killa Man.


text:
Desert Running: A Life-Changing Experience
Thomas Bohne 16/06/2016 12/12/2017 Adventures, Africa, Desert, Namibia, Races, Running, Ultra-Running
It all started in the Atacama desert. I volunteered for the Atacama-Crossing, a 250-Kilometer stage race in northern Chile. This was my first event with RacingThePlanet and the beginning of many new friendship with a landscape does not always show it's friendly face. At the time I was a volunteer for the Atacama Crossing. My job required me to sweep behind the last runners and to gather all course marking material. I was so curious about the Atacama Desert, that I asked to sweep the whole 250 Kilometers.
Atacama Crossing 2008
What does it take to finish a 4 Deserts Race?
You must run 250 Kilometers in 7 days in extremely harsh environment,
compete semi-self supported, meaning: you carry all your clothes, equipment and food,
stay in tented camps overnight after each stage,
you will be provided water at checkpoints and campsites,
and you are open-minded and incredibly determined.
Camp 2 at night © Judy Ng
While sweeping the course, I was out in the open desert quite a lot. The vast open, the silence and the purity of this landscape were new to me. Temperature changes from below freezing level at night to high thirties during the day challenged my body in an unknown way. On top of that, the last runners walked slowly and often exceeded daylight to complete the marathon-length stages. Competitors had to bring their own food and volunteers likewise. Since the long hours increased my energy consumption drastically, I soon ran out of food. Luckily, my team members at the checkpoints would sneak the hungry German some chocolate bars and sweets. Even nowadays Mary Gadams, the founder of the event series, regularly brings treats me some extra snacks at the events.
Visiting the oldest desert in the world
The Skeleton Coast © Thomas Bohne
Since Atacama in 2008, I worked on many races. Today I design full-grown race courses all over the world whenever there is a chance to leave my main job. As a course director, my main objectives for the race course include:
a beautiful course that fits the race format,
a safe course,
a course that is logistically manageable.
As you might notice, beauty is subjective. This requirement often leads to discussions, especially when people are surprised by sand and heat, having in mind that they signed up for a desert race.
When RacingThePlanet asked me to design a race course in Namibia, I instantly agreed because I was eager to meet the oldest desert of the earth – the Namib Desert.
© Thomas Bohne
Skeleton Coast Park – first impression
As I visited Skeleton Coast National Park for the first time, the skull and crossbones on the gate welcomed me late at night. The Ugab gate is on the way to Torra Bay – an isolated campsite that is not further than 230 kilometers from the nearest town. We had been driving for hours along the beach where all these shipwrecks and stories rest.
Torra Bay campsite is located right on the beach, but the water of the ocean was cold and the currents were too strong to go for a swim. This only applied for humans because the seals were obviously enjoying the currents. Only during the two months of the summer season in December and January can the local fisherman occupy this place and share it with jackals, brown hyenas and stinking ducks. Every morning and evening the ducks would sit on the water tower that stands in the middle of the campsite. Their holding pattern appeared to be right on top of my tent where they would dump their organic waste accidentally. Far out on the ocean I could sometimes spot whales passing by. I spent two weeks at Torra Bay to scout the route for the race, and I was not prepared for what I saw during the reconnaissance.
An Ocean of Sand full of Life
First, I explored the area by plane. The plane was very small and light. The pilot could even land on the gravel roads when necessary – in case he needed to relieve himself for example. Then I continued the exploration by car and some sections also by foot. Being alone in the middle of a such an environment reduces your life to the moment. It takes you back to the place where we originate from. Some things become insignificant while others prevail. Your senses sharpen. Over the years, I learnt how to analyze terrain, how to read tracks, and how to interpret animal behavior.
This was particularly helpful in Namibia because the cold waters of the Benguela stream carry an ocean full of life to the relentless dunes of the Skeleton Coast. Even large animals such as desert-adapted elephants, extremely endangered rhinos, ostriches and a few lions call this place home. But this ecosystem is fragile. Wildlife gets disturbed even in the most remote corners and humans leave tracks that remain for centuries. You could still observe the tracks from the ox wagons of the settlers from more than one hundred years ago.
Black Rhino © Thomas Bohne
The moment I spotted my first rhino tracks, I nervously stared at them because I had no idea what animal could be around me. The only thing I knew: it was huge! I had never seen footprints that size. When we later spotted the large black rhino, I was impressed by the size and appearance of the animal in their natural habitat. There was no fence, no barrier, it was just free. It seems unbelievable how an animal that size can survive in a harsh dry and hot desert. It is just as hard to believe that people would hunt and kill the remaining few for a piece of horn in a world with Viagra and 3D-printers. Black desert rhinos are smaller and more aggressive than their white brothers. They roam mostly alone in areas as big as Belgium.
The most impressive geographic observation for me was a massive dune belt that started near Torra Bay and extends several hundred kilometers north up to the border of Angola. Its sheer size exceeded my imagination.
The Vanishing Kings
I worked closely with Dr. Philip Stander, a British scientist, who dedicated his life to a desert-adapted lion population in the Namib. For almost 20 years, he has been following the unique desert lion population. Stander told me that he once monitored a male lion that walked all the way up to the border of Angola. The lion covered distances of more than 70 Kilometers a day. He even swam across the crocodile-infested Kunene river to Angola. He then turned around and walked all the way back. When the lion came back, he was shot. This story illustrates how incredibly powerful and skillful these animals can be, but it also illustrates that there is a human-lion conflict. Stander's work addresses both: he collects research data from the animals and implements a strategy that allows for humans and lions to coexist. Part of his story has been published in the movie The Vanishing Kings.
Desert Lion Conservation © Thomas Bohne
When I first met Dr. Stander, his car was parked in the cover of the dark in front of the first campsite of the race. His custom-built research vehicle screamed in large letters: Desert Lion Conservation and a hyena head was dangling from the bull bars in front. I wondered about what kind of images this would create in the minds of the runners if they would see that. Fortunately, we left camp before sunrise. During the race, Dr. Stander helped to monitor the wildlife. This was necessary to keep the competitors safe and also to minimize the human disturbances to the environment from the race. On top of all my goals mentioned above, it is key to first understand the ecosystem to minimize our environmental footprint.
The First Edition … ever
For the first ultra-running event in the Skeleton Coast National Park, we welcomed 214 competitors and about 100 staff. The runners came from about 40 nations and included world-class athletes as well as entrepreneurs, soldiers, and even blind people. Some of them started as teams such as the Team The Sound of Small Bells – a group of 14 runners from China, South Korea, and Japan. The runners united for the race and showed that they could succeed as a team despite their language barriers and political differences. "We also want to bring some communication among the three countries", says team member Arlen Wu. They achieved even more: "We want to help the blind to fulfill their dreams of running the world", says Wu, who successfully guided one of the four blind runners in their team.
The Course Team
When the runners lined up at the start line the first morning, my team and I — the Course Team — were long gone. We set off early to ensure that the stage was completely marked and all the checkpoints were in place. This task can quickly turn into a race against time when access roads are long and cars get stuck. During this edition, the drivers were always on time and extremely skilled. I heard rumors saying that this was because of their German ancestors.
During the race week, our days were long because the Course Team usually leaves camp before sunrise and often reaches the camp for the night after sunset. The team members Susan and Dominik also share the passion for running. Dominik is an experienced sub-three-hour Marathon runner and Susan a 4 Deserts veteran herself. That is mandatory for course marking because the work is mostly done by foot, even when the stages are accessible by car.
I have worked on races before where the Course Team members ran even further than the competitors. This time each of us covered between 120 and 170 Kilometers during the event, which is at the lower end. During the marking we are often alone out in the open without support nearby. This requires experience, self-responsibility, but also facilitates unforgettable moments.
I will never forget what happened while I was marking Stage 5. About one hour had passed since I had left the car while I marked a wide open plane by foot. The surface was covered with a thin layer of tiny, colorful stones – a natural mosaic. The ground was hard and I had difficulties putting the flags in. The evening light painted the landscape red and I had to check my GPS device constantly for direction because there was no reference just horizon. Large hyena tracks indicated wildlife activity and I started getting a bit worried because they would get active very soon. Then suddenly a jackal showed up right behind me. He must have been curious as he came closer. The Jackal decided to follow me and we ran side by side for more than a kilometer. Having this sort of company made me feel accepted and welcome although he was probably hoping for me to slip so that he could have a feast.
Each of us has his own moment that he carries home from such an event. Watching 196 runners finish their journey near Torra Bay, our job was done. For some runners this was an experience of a lifetime, for me it was a visit of a friend.
Thomas Bohne
4 Deserts, Desert Lion Conservation, featured, Namibia, RacingThePlanet, Skeleton Coast National Park, Trail Running, Ultra-Marathon
Previous Cape Wrath Ultra: Das große Scheitern
Next Überschreitung des Estergebirges


text:
Cristiano Ronaldo: Portugal and Juventus star tests positive for coronavirus
Ronaldo is "doing well, without symptoms, and in isolation", according to Portuguese Football Federation; Rest of Portugal squad tested negative on Tuesday and are available for Wednesday's game in Lisbon
Wednesday 14 October 2020 15:09, UK
Image: Cristiano Ronaldo is self-isolating after testing positive for coronavirus
Cristiano Ronaldo has tested positive for coronavirus and will miss Portugal's Nations League game against Sweden on Wednesday.
The Juventus forward is "doing well, without symptoms, and in isolation", according to a statement from the Portuguese Football Federation (PFF).
Nations League table | Fixtures | Results
Watch every Nations League game on Sky Sports
Get two football channels for £18 p/m | All Sky Sports' new season offers
The remaining squad all returned negative results after being tested on Tuesday and are available for the Group A3 match in Lisbon.
On Monday, Ronaldo posted an image of himself with the squad around a long table during a meal, with the caption: "United, on and off the field".
The PFF confirmed in a statement: "Following the positive case, the remaining players underwent new tests this Tuesday morning, all with a negative result, and are available to Fernando Santos for training this afternoon, in Cidade do Futebol.
Ronaldo is asymptomatic and is frustrated to be missing Portugal's Nations League fixture with Sweden, says head coach Fernando Santos
"The game (against Sweden), counting for the qualification phase of the Nations League, is scheduled for Wednesday, at 19:45, in Alvalade."
Ronaldo has played in both of Portugal's matches so far during the international break, starting in a friendly against Spain in Lisbon and then playing the full game in their 0-0 draw with France on Sunday.
Nations League on Sky
Nations League table
Nations League fixtures
Highlights from the UEFA Nations League Group A3 match between France and Portugal
The stalemate in Paris means Portugal and France are level on seven points, with Ronaldo's side topping the group on goal difference.
Wednesday's opponents Sweden are bottom of the group, having failed to pick up a single point from their first three matches.
Image: Ronaldo scored his 100th international goal in September's meeting between Portugal and Sweden
In the reverse fixture in September, Ronaldo became the first European player to reach 100 international goals after scoring twice in Portugal's 2-0 win.
Ronaldo has set his sights on Iranian Ali Daei's record for a male international of 109 goals.
LAST CHANCE To Land The £1m!
You read correctly. The £1m Super 6 jackpot is up for grabs for one last time this weekend. Play for free, entries by 3pm Saturday.


SweetJullie . BeautyLoonica. EmpressX. SafinnaX.
WANNDAHOTTSMarilynHotGirlSexyDavidxHotalejapretty .MichaelJACKFlowerBeeVictoriaLuxuryMarilynHotGirl .SafinnaXO1angeldiamondSexyStudEyes1XWANNDAHOTTS .dolldirtynolimitUrTrannyPLEASUREBIGnLILsquirtsMissAssxxx .UrTrannyPLEASUREPornStarGroupLOVERSWEET69BeautyLoonica .ZefirInChocolatehornytimesUrTrannyPLEASUREJonnyBravo69 .EvelynRojasWildCalebBeautyLoonicahornytimes .sweetredalinaMelodyLovexxSexyStudEyes1XSweetTsASHLEY .ArabbelaZaynLottmrMJGxHello2myKITTYx .O1angeldiamondalejaprettyWildCalebdolldirtynolimit .PleasingMissAmiforgetmenot6TAREKMAXYHAYRIAcelinne .
EbonyTSAzaliaLovesuckableMISTRESSObedientSublime .KarinSweetyMichaelJACKmrMJG1SEXLATINGIRL .WildCalebChernichkaVirgindancerCutieKimi .HornyxMarilynSandyleeUnusualRAMONAVictoriaLuxury .SuperMikeisBIGHotYngCouple4UCrystalLightPleasingMissAmi .NaughtysexloversClaraVixennClaraVixennTAREKMAXYHAYRI .XSEXYeyesTSXMelodyLovexxCuteSofi23babyblondgirl .1SEXLATINGIRL1SEXLATINGIRLLeahHadesAnnelisBrown .sweetredalinaFlowerBeeRAYCHELvsDANAlessiaVera .Darius1992AdriagoUrTrannyPLEASUREAlluringLora .DinaReySugary4youKylieParksXLITTLECHARLOTTE .


Bryan and Rachel got married on a gorgeous summer day in August. We love their soft palette of lilacs and pinks - and check out that groom's cake, it's a real winner! Photography from Photographs by Andrea.
Hollie and Numan had a gorgeous wedding on a beautiful winter day. Check out their live wedding painter and how much fun they had at their reception. Video provided by Hart To Hart Media.
Nicole & Johnathan had a rustic, country chic wedding on a lovely fall day in November. Check out the antler details! Photography by Ricki Ford.
Michael and Mandy got married on a beautiful fall day in September. Their eggplant and cream color palette was absolutely stunning! Videography provided by Dockhouse Digital Videography.
Hannah & Josh got married on a beautiful summer day in August. Their vintage, rustic vibe is such a perfect match for the decor at Hidden Acres. White Bridge Photography, florals by Grace Designs, and catering by Hidden Treasures.
Kasey & Brandon got married on a beautiful late fall day. We love their sophisticated, subtle steel blue and pink color palette. Photographs by Andrea, Coordination by Pocketful of Sunshine Event Design, and catering by Hidden Treasures Catering.
Lauren & Bryce got married on a beautiful summer day in June. Lauren's Old-Hollywood vibe and floral crown are the stuff of legend, and we are in LOVE! Photography by Gillian Claire.
Lindsay & Chase were one of the very first couples that got to use the beautiful new ballroom at Hidden Acres. They certainly inaugurated The Ballroom in a stunning way! Photography by C. Holst Photography.
Meredith & Jason had a beautiful early spring wedding surrounded by their friends & family from all around the Carolinas. And how fun are the Toms shoes everyone is wearing?Photography by Taken By Sarah.
Brittney & Dewain's summer ceremony was the perfect combination of rustic charm and chic decor. The 'love birds' topper on their cake is one of our favorite details of their big day! Photography by Silent Memories Photography.
Kristin and Tyler got married on a lovely spring day in May surrounded by their closest friends and family. We are loving the ribbon backdrop behind the cake! Photography by Fred Salley Photography.


One main thing, the corporation must have wide network of buyers and sales associates so that your property is in safe hand. That is the way people can earn a fabulous income online without having to work 14 hour days. They may feel confident in work and other relationships, but their sense of self can be shaken and they doubt themselves and their abilities as a mom. To have more confidence, I encourage you to stop comparing yourselves to other moms.
Use auto-responders with pre-written emails that go out on a continuous and timely basis. He is the owner of the Affiliate Power Group and MyAffiliatePowerSite, and a really good example of what it takes to create massive passive income.
There are some companies who may offer you the online training as well before you actually start up with your work. This task does not require high degree grades but just simple computer knowledge.
35 years old Student Counsellor Duane Sia from Fort Erie, enjoys garage saleing, , and tea tasting. Has finished a wonderful around the world journey that covered traveling to the Monarch Butterfly Biosphere Reserve.
This entry was posted in Syracuse News and tagged business, names by Alex Shu. Bookmark the permalink.