text:
using System;
using System.Collections.Generic;
using System.Linq;
using LinqToTwitter;
using LinqToTwitterXUnitTests.Common;
using Moq;
using Xunit;

namespace LinqToTwitterXUnitTests.AccountTests
{
    public class AccountExtensionsTests
    {
        Mock<ITwitterExecute> execMock;

        public AccountExtensionsTests()
        {
            TestCulture.SetCulture();
        }

        TwitterContext InitTwitterContextWithPostToTwitter<TEntity>(string response)
        {
            var authMock = new Mock<ITwitterAuthorizer>();
            execMock = new Mock<ITwitterExecute>();
            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);
            execMock.Setup(
                exec => exec.PostToTwitter(
                    It.IsAny<string>(),
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<Func<string, TEntity>>()))
                    .Returns(response);
            var ctx = new TwitterContext(execMock.Object);
            return ctx;
        }

        TwitterContext InitTwitterContextWithPostTwitterImage()
        {
            var authMock = new Mock<ITwitterAuthorizer>();
            execMock = new Mock<ITwitterExecute>();
            execMock.SetupGet(exec => exec.AuthorizedClient).Returns(authMock.Object);
            execMock.Setup(
                exec => exec.PostTwitterImage(
                    It.IsAny<string>(),
                    It.IsAny<IDictionary<string, string>>(),
                    It.IsAny<byte[]>(),
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<IRequestProcessor<User>>()))
                    .Returns(SingleUserResponse);
            var ctx = new TwitterContext(execMock.Object);
            return ctx;
        }

        [Fact]
        public void UpdateAccountProfile_Invokes_Executor_Execute()
        {
            const string ExpectedName = "Twitter API";
            const string Name = "Twitter API";
            const string Url = "http://www.csharp-station.com";
            const string Location = "San Francisco, CA";
            const string Description = "The Real Twitter API.";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            User actual = ctx.UpdateAccountProfile(Name, Url, Location, Description, true, SkipStatus);

            execMock.Verify(exec =>
                exec.PostToTwitter(
                    "https://api.twitter.com/1.1/account/update_profile.json",
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<Func<string, User>>()),
                Times.Once());
            Assert.Equal(ExpectedName, actual.Name);
        }

        [Fact]
        public void UpdateAccountProfile_Throws_On_Null_Input()
        {
            const string ExpectedParamName = "NoInput";
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(null, null, null, null, true, false));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountProfile_Throws_On_Name_Over_20_Chars()
        {
            const string ExpectedParamName = "name";
            string name = new string(Enumerable.Repeat('x', 21).ToArray());
            const string Url = "http://www.csharp-station.com";
            const string Location = "San Francisco, CA";
            const string Description = "The Real Twitter API.";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(name, Url, Location, Description, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountProfile_Throws_On_Url_Over_100_Chars()
        {
            const string ExpectedParamName = "url";
            const string Name = "Joe";
            var url = new string(Enumerable.Repeat('x', 101).ToArray());
            const string Location = "Denver, CO";
            const string Description = "Open source developer for LINQ to Twitter";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, url, Location, Description, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountProfile_Throws_On_Location_Over_30_Chars()
        {
            const string ExpectedParamName = "location";
            const string Name = "Joe";
            const string Url = "http://www.csharp-station.com";
            var location = new string(Enumerable.Repeat('x', 31).ToArray());
            const string Description = "Open source developer for LINQ to Twitter";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, Url, location, Description, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountProfile_Throws_On_Description_Over_160_Chars()
        {
            const string ExpectedParamName = "description";
            const string Name = "Joe";
            const string Url = "http://www.csharp-station.com";
            const string Location = "Denver, CO";
            var description = new string(Enumerable.Repeat('x', 161).ToArray());
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountProfile(Name, Url, Location, description, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountImage_Invokes_Executor_Execute()
        {
            const string ImageFilePath = "c:\\image.jpg";
            const string ExpectedName = "Twitter API";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);
            execMock.Setup(exec =>
                exec.PostTwitterFile(
                    It.IsAny<string>(),
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<string>(),
                    It.IsAny<IRequestProcessor<User>>()))
                .Returns(SingleUserResponse);

            User actual = ctx.UpdateAccountImage(ImageFilePath, SkipStatus);

            execMock.Verify(exec =>
                exec.PostTwitterFile(
                    "https://api.twitter.com/1.1/account/update_profile_image.json",
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<string>(),
                    It.IsAny<IRequestProcessor<User>>()),
                Times.Once());
            Assert.Equal(ExpectedName, actual.Name);
        }

        [Fact]
        public void UpdateAccountImage_Throws_On_Null_Path()
        {
            const string ExpectedParamName = "imageFilePath";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountImage(null, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountColors_Invokes_Executor_Execute()
        {
            const string Background = "9ae4e8";
            const string Text = "#000000";
            const string Link = "#0000ff";
            const string SidebarFill = "#e0ff92";
            const string SidebarBorder = "#87bc44";
            string expectedName = "Twitter API";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            User actual = ctx.UpdateAccountColors(Background, Text, Link, SidebarFill, SidebarBorder, true, SkipStatus);

            execMock.Verify(exec =>
                exec.PostToTwitter(
                    "https://api.twitter.com/1.1/account/update_profile_colors.json",
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<Func<string, User>>()),
                Times.Once());
            Assert.Equal(expectedName, actual.Name);
        }

        [Fact]
        public void UpdateAccountColors_Throws_On_No_Input()
        {
            const string ExpectedParamName = "NoInput";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountColors(null, null, null, null, null, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountColors_Allows_Null_Parameters()
        {
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            User user = ctx.UpdateAccountColors("#9ae4e8", null, null, null, null, true, SkipStatus);

            Assert.NotNull(user);

            user = ctx.UpdateAccountColors(null, "#9ae4e8", null, null, null, true, SkipStatus);

            Assert.NotNull(user);
        }

        [Fact]
        public void UpdateAccountBackgroundImage_Invokes_Executor_PostTwitterFile()
        {
            const string ImageFilePath = "C:\\image.png";
            const bool Tile = false;
            const bool Use = false;
            const string ExpectedName = "Twitter API";
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);
            execMock.Setup(exec =>
            exec.PostTwitterFile(
                It.IsAny<string>(),
                It.IsAny<Dictionary<string, string>>(),
                It.IsAny<string>(),
                It.IsAny<IRequestProcessor<User>>()))
                .Returns(SingleUserResponse);

            User actual = ctx.UpdateAccountBackgroundImage(ImageFilePath, Tile, Use, true, SkipStatus);

            execMock.Verify(exec =>
                exec.PostTwitterFile(
                    "https://api.twitter.com/1.1/account/update_profile_background_image.json",
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<string>(),
                    It.IsAny<IRequestProcessor<User>>()),
                Times.Once());
            Assert.Equal(ExpectedName, actual.Name);
        }

        [Fact]
        public void UpdateAccountBackgroundImage_Throws_On_Null_Path()
        {
            const string ExpectedParamName = "imageFilePath";
            string imageFilePath = string.Empty;
            const bool Tile = false;
            const bool Use = false;
            const bool SkipStatus = true;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountBackgroundImage(imageFilePath, Tile, Use, true, SkipStatus));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateAccountSettings_Invokes_Executor_Execute()
        {
            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);
            var parameters = new Dictionary<string, string>
            {
                { "trend_location_woeid", "1" },
                { "sleep_time_enabled", "True" },
                { "start_sleep_time", "20" },
                { "end_sleep_time", "6" },
                { "time_zone", "MST" },
                { "lang", "en" }
            };

            Account acct = ctx.UpdateAccountSettings(1, true, 20, 6, "MST", "en");

            execMock.Verify(exec =>
                exec.PostToTwitter(
                    "https://api.twitter.com/1.1/account/settings.json",
                    parameters,
                    It.IsAny<Func<string, Account>>()),
                Times.Once());
            Assert.NotNull(acct);
            Settings settings = acct.Settings;
            Assert.NotNull(settings);
            Assert.Equal("en", settings.Language);
        }

        [Fact]
        public void UpdateAccountSettings_Throws_On_No_Input()
        {
            const string ExpectedParamName = "NoInput";
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateAccountSettings(null, null, null, null, null, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateDeliveryDevice_Invokes_Executor_Execute()
        {
            var ctx = InitTwitterContextWithPostToTwitter<Account>(SettingsResponse);
            var parameters = new Dictionary<string, string>
            {
                { "device", DeviceType.Sms.ToString().ToLower() },
                { "include_entities", true.ToString().ToLower() }
            };

            Account acct = ctx.UpdateDeliveryDevice(DeviceType.Sms, true);

            execMock.Verify(exec =>
                exec.PostToTwitter(
                    "https://api.twitter.com/1.1/account/update_delivery_device.json",
                    parameters,
                    It.IsAny<Func<string, Account>>()),
                Times.Once());
            Assert.NotNull(acct);
            Settings settings = acct.Settings;
            Assert.NotNull(settings);
        }

        [Fact]
        public void UpdateProfileBanner_Invokes_Executor_Execute()
        {
            const string ExpectedProfileBannerUrl = "https://si0.twimg.com/profile_images/1438634086/avatar_normal.png";
            byte[] banner = new byte[]{ 1, 2, 3 };
            const string FileName = "MyImage.png";
            const string FileType = "png";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            User actual = ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null);

            execMock.Verify(exec =>
                exec.PostTwitterImage(
                    "https://api.twitter.com/1.1/account/update_profile_banner.json",
                    It.IsAny<IDictionary<string, string>>(),
                    It.IsAny<byte[]>(),
                    It.IsAny<string>(),
                    It.IsAny<string>(),
                    It.IsAny<IRequestProcessor<User>>()),
                Times.Once());
            Assert.NotNull(actual);
            Assert.NotNull(actual.ProfileBannerUrl);
            Assert.Equal(ExpectedProfileBannerUrl, actual.ProfileBannerUrl);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Null_Banner()
        {
            const string ExpectedParamName = "banner";
            byte[] banner = null;
            const string FileName = "MyImage.png";
            const string FileType = "png";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Empty_Banner()
        {
            const string ExpectedParamName = "banner";
            byte[] banner = new byte[0];
            const string FileName = "MyImage.png";
            const string FileType = "png";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Null_FileName()
        {
            const string ExpectedParamName = "fileName";
            byte[] banner = new byte[] { 1, 2, 3 };
            const string FileName = null;
            const string FileType = "png";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Empty_FileName()
        {
            const string ExpectedParamName = "fileName";
            byte[] banner = new byte[] { 1, 2, 3 };
            const string FileName = "";
            const string FileType = "png";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Null_FileType()
        {
            const string ExpectedParamName = "imageType";
            byte[] banner = new byte[] { 1, 2, 3 };
            const string FileName = "MyFile.png";
            const string FileType = null;
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void UpdateProfileBanner_Throws_On_Empty_FileType()
        {
            const string ExpectedParamName = "imageType";
            byte[] banner = new byte[] { 1, 2, 3 };
            const string FileName = "MyFile.png";
            const string FileType = "";
            const int Width = 1252;
            const int Height = 626;
            const int OffsetLeft = 1;
            const int OffsetRight = 1;
            var ctx = InitTwitterContextWithPostTwitterImage();

            var ex = Assert.Throws<ArgumentException>(() => ctx.UpdateProfileBanner(banner, FileName, FileType, Width, Height, OffsetLeft, OffsetRight, null));

            Assert.Equal(ExpectedParamName, ex.ParamName);
        }

        [Fact]
        public void RemoveProfileBanner_Invokes_Executor_Execute()
        {
            var ctx = InitTwitterContextWithPostToTwitter<User>(SingleUserResponse);

            User actual = ctx.RemoveProfileBanner(null);

            execMock.Verify(exec =>
                exec.PostToTwitter(
                    "https://api.twitter.com/1.1/account/remove_profile_banner.json",
                    It.IsAny<Dictionary<string, string>>(),
                    It.IsAny<Func<string, User>>()),
                Times.Once());
            Assert.NotNull(actual);
        }

        const string SingleUserResponse = @"{
   ""id"":6253282,
   ""id_str"":""6253282"",
   ""name"":""Twitter API"",
   ""screen_name"":""twitterapi"",
   ""location"":""San Francisco, CA"",
   ""description"":""The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website."",
   ""url"":""http:\/\/dev.twitter.com"",
   ""protected"":false,
   ""followers_count"":1009508,
   ""friends_count"":31,
   ""listed_count"":10361,
   ""created_at"":""Wed May 23 06:01:13 +0000 2007"",
   ""favourites_count"":24,
   ""utc_offset"":-28800,
   ""time_zone"":""Pacific Time (US & Canada)"",
   ""geo_enabled"":true,
   ""verified"":true,
   ""statuses_count"":3278,
   ""lang"":""en"",
   ""status"":{
      ""created_at"":""Mon Apr 30 17:16:17 +0000 2012"",
      ""id"":197011505181507585,
      ""id_str"":""197011505181507585"",
      ""text"":""Developer Teatime is coming to Paris - please sign up to join us on June 16th! https:\/\/t.co\/pQOUNKGD  @rno @jasoncosta"",
      ""source"":""web"",
      ""truncated"":false,
      ""in_reply_to_status_id"":null,
      ""in_reply_to_status_id_str"":null,
      ""in_reply_to_user_id"":null,
      ""in_reply_to_user_id_str"":null,
      ""in_reply_to_screen_name"":null,
      ""geo"":null,
      ""coordinates"":null,
      ""place"":null,
      ""contributors"":[
         14927800
      ],
      ""retweet_count"":25,
      ""favorited"":false,
      ""retweeted"":false,
      ""possibly_sensitive"":false
   },
   ""contributors_enabled"":true,
   ""is_translator"":false,
   ""profile_background_color"":""E8F2F7"",
   ""profile_background_image_url"":""http:\/\/a0.twimg.com\/profile_background_images\/229557229\/twitterapi-bg.png"",
   ""profile_background_image_url_https"":""https:\/\/si0.twimg.com\/profile_background_images\/229557229\/twitterapi-bg.png"",
   ""profile_background_tile"":false,
   ""profile_image_url"":""http:\/\/a0.twimg.com\/profile_images\/1438634086\/avatar_normal.png"",
   ""profile_image_url_https"":""https:\/\/si0.twimg.com\/profile_images\/1438634086\/avatar_normal.png"",
   ""profile_banner_url"":""https:\/\/si0.twimg.com\/profile_images\/1438634086\/avatar_normal.png"",
   ""profile_link_color"":""0094C2"",
   ""profile_sidebar_border_color"":""0094C2"",
   ""profile_sidebar_fill_color"":""A9D9F1"",
   ""profile_text_color"":""437792"",
   ""profile_use_background_image"":true,
   ""show_all_inline_media"":false,
   ""default_profile"":false,
   ""default_profile_image"":false,
   ""following"":false,
   ""follow_request_sent"":false,
   ""notifications"":false
}";

        const string SettingsResponse = @"{
   ""screen_name"":""Linq2Tweeter"",
   ""protected"":false,
   ""geo_enabled"":false,
   ""time_zone"":{
      ""name"":""Mountain Time (US & Canada)"",
      ""utc_offset"":-25200,
      ""tzinfo_name"":""America\/Denver""
   },
   ""sleep_time"":{
      ""enabled"":true,
      ""start_time"":20,
      ""end_time"":8
   },
   ""show_all_inline_media"":true,
   ""discoverable_by_email"":true,
   ""trend_location"":[
      {
         ""woeid"":23424977,
         ""name"":""United States"",
         ""country"":""United States"",
         ""countryCode"":""US"",
         ""placeType"":{
            ""name"":""Country"",
            ""code"":12
         },
         ""url"":""http:\/\/where.yahooapis.com\/v1\/place\/23424977"",
         ""parentid"":1
      }
   ],
   ""language"":""en"",
   ""always_use_https"":true
}";
    }
}


I watched this Spoken Word performance by Phil Kaye recently, but I first discovered it back in middle school. Watching it now and remembering how it affected me when I watched it 6 years ago was a meta-exercise for me. The poem itself is about repetition: how when you experience the same thing in two different points in your life (even if that is milliseconds later, like a repeated word), the experience changes.
For Phil Kaye, repetition of this very heavy word made it more bearable for him, because, colloquially, it took away the punch. The word itself did not change, just his experience of it. I wonder what the word means to him, as a poet, now, 8 years after he wrote this poem. He– a listener/reader, the one who is experiencing the word— has changed states, ever so slightly, and that is what makes the meaning different.
In The Writer's' Process, we read Roland Barthes, who wrote about the dynamic between the author and the reader. He argues, "[The reader] is simply that someone who holds together in a single field all the traces by which the written text is constituted" (from Death of the Author, 1977). The author is dead, the words simply exist on the page, and the meaning arises from the reader.
When thinking about repetition, then, what does it mean for the same reader to experience the same thing over and over again? "Apart/apart/apart/apart" speaks Phil Kaye. To experience the word "apart" right now, and then experience it after three years and loneliness and straddling one's self between two worlds of two parents—this is where the meaning of repetition comes from.
This is why I am going to make a point to reread books I haven't read in a long time this summer, to hear poetry now that I haven't heard since high school or experienced at a time in my life where I know I was a different person than I am now. The self is transient, and because it is, so is the meaning of a work of art.


text:
Convict's Suit Over Expulsion From Northwestern Law Dismissed
By James LangfordJune 29, 2014Campus Features, Law School News
A federal judge has agreed to the voluntary dismissal of a former Northwestern Law student's suit claiming he was wrongfully kicked out when the school learned of his felony conviction for pretending to be a lawyer.
Mauricio R. Celis, Northwestern Law and Instituto de Empresa, the school's Spanish partner in the executive master's in law program, sought the dismissal about a month after the case was referred to a federal magistrate for settlement talks. Their joint request, filed on June 18, makes no mention of any settlement agreement.
Neither Celis's attorney, Rosa Tumialan; Northwestern's attorney, Anna Wermuth nor IE's attorney, Marcia Goodman, returned messages seeking comment last week.
Celis's lawsuit, filed in the Northern District of Illinois in April, said he was told two months before his scheduled graduation in May that he was being expelled because of incorrect statements and omissions in his application.
Among them was a 2009 conviction on 14 counts of falsely holding himself out as a lawyer, for which Texas court records show Celis was fined $10,000 and sentence to 10 years of community service. He was accused of accepting checks for as much as $440,000 as payment of attorneys' fees and describing himself as a member of the Mexican bar, according to court records.
His subsequent appeal alleging bias by the trial judge, insufficient evidence and unconstitutional broadness in Texas law governing attorney advertising was rejected by the Texas Court of Appeals in August 2011. Celis had argued at trial that he was allowed to describe himself as a lawyer from Mexico because the country permits all its citizens to practice in areas including criminal, employment and agrarian law. Two witnesses from the Mexican court system supported his explanation.
The 43-year-old said his expulsion from the Executive LL.M. program violated his contract with Northwestern and IE, made worthless his payments of $76,000 for tuition and other expenses, and deprived him of a teaching position at the Universidad Autonoma Nuevo Leon in Mexico, which was conditioned on his completion of the degree.
The 10-month master's program, designed to combine Anglo-American common law and its use in international practice with management basics, includes three two-week sessions in Madrid, where Instituto Empresa is based, and one at Northwestern's campus in Chicago. Graduates receive an LL.M. from Northwestern and a certificate in business administration from IE.
Celis argued that the application he completed for the master's program contained no questions about his legal or criminal background, nor any "catch-all" queries and sought to recover the $76,000 as well as attorneys' fees.
Contact James Langford at (646) 722-2624 or james@lawdragon.com.

redpajama_set_name: RedPajamaCommonCrawl


Land Transaction Tax is payable by the purchaser in a land transaction which occurs in Wales. At Day Accountants, we can provide guidance on Land Transaction Tax.
Please do contact us at Day Accountants for guidance on Land Transaction Tax.


text:
'Gone but never forgotten': Nation pays tribute to Major Shabbir Sharif
Major Shabbir Sharif Shaheed is being remembered on his 50th death anniversary who was martyred during Indo-Pak war in 1971.
Islamabad: Nation is paying tribute to sacrifices of war hero, Major Shabbir Sharif on his 50th martyrdom anniversary Monday (December 6).
Ex Chief of Army Staff General Raheel Sharif's elder brother Major Shabbir Sharif Shaheed is being remembered on his 50th death anniversary who was martyred during Indo-Pak war in 1971.
In a tweet today, Director General ISPR Major General Babar Iftikhar paid tribute to Major Shabbir Sharif Shaheed for his heroic action at Sulemanki Sector in 1971 war.
The Director General ISPR said supreme sacrifice of Major Shabbir Sharif reminds us that no cause is nobler than defence of the motherland.
On his 50th martyrdom anniversary, we pay tribute to Maj Shabbir Sharif Shaheed, NH, a most gallant officer who received SJ in 1965 & NH during 71 War for heroic action @ Sulemanki Sector. His supreme sacrifice reminds us that no cause is nobler than defence of the motherland
— DG ISPR (@OfficialDGISPR) December 5, 2021
Born on April 28, he studied at Government College Lahore and received a call to join Pakistan Military Academy (PMA) Kakul. He was thus commissioned in Pakistan Army on April 19, 1964 after successfully completing his training.
Shabbir Sharif was posted to the 6th Battalion of the Frontier Force Regiment.
He embraced martyrdom while fighting the enemy at the Sulemanki Sector during the Indo-Pak War and was awarded the 'Nishan-e-Haidar' for his courage and bravery.
On December 3, 1971, he was commanding a company of 6 FF Regiment near Sulemanki Headworks when he was assigned the task of capturing the high bund (ground) overlooking the Gurmukh Khera and Beriwala villages in the Sulemanki sector.
A total of 43 enemy soldiers were killed in this well-nigh superhuman action, and another 28 were taken prisoners.
Moreover, four enemy tanks were also destroyed.
Major Shabbir Shareef caused huge damage to the enemy troops and tanks—embracing martyrdom on 6 December, 1971.
At the time of martyrdom, Major Shabbir Shareef Shaheed was just 28-year old.
PM Imran Khan to launch 'Kamyab Jawan Sports Drive' today
NA-133 by-polls: PML-N retains seat for fourth time
Mehak Javed is immensely creative and an enthusiastic journalist, contributing in the publication of timely and accurate news. She is a skilled writer along proven history of achievement in the field with several years of professional experience. Mehak is working with GNN since 2020.
PMD forecasts more rains
'Austria to make COVID vaccines compulsory for adults from Feb'
Nehammer, a conservative who took office in December, said those who didn t comply would face a hefty fine
Vienna: Austria will become the first European country to make Covid-19 vaccination compulsory for adults in February, Chancellor Karl Nehammer said Sunday, acknowledging that it was a "sensitive topic."
Nehammer, a conservative who took office in December, said those who didn t comply would face a hefty fine.
"We will decide on compulsory vaccination as planned. It will come into force at the beginning of February for adults," he told a news conference.
Since plans for compulsory jabs were first announced last year, Austria has seen impassioned debate both in parliament and beyond on the issue.
To date 71.5 percent of eligible Austrian residents have had their jabs -- several percentage points below many of the country's EU neighbours.
Nehammer acknowledged the decision covered "a totally sensitive topic" but said it followed careful consideration.
He warned that after an "entry phase" for the policy, restrictions would be "tightened accordingly" in mid-March on those holding out against the jab, including fines of between 600-3,600 euros ($684-$4,100).
Saturday saw some 27,000 people demonstrate in Vienna against the measure which opponents dub an attack on personal freedoms.
On Thursday Parliament is due to pass into law a bill which initially was set to cover all people from 14 upwards but now will cover adults only.
Exceptions will be made for pregnant women and those who can show they have a medical exemption.
The government has widespread support for a policy which only the far-right is opposing.
Austria has to date seen almost 14,000 Covid-related deaths and 1.4 million cases in a population of some nine million.
Compulsory vaccinations against Covid remain rare worldwide, though Ecuador, Tajikistan, Turkmenistan, Indonesia and Micronesia have introduced such schemes.
Govt to control Inflation before 2023: FM Qureshi
Global economy has also been in crisis for the past two years due to coronavirus, says minister
Multan: Foreign Minister (FM) Shah Mahmood Qureshi on Sunday said that inflation was a temporary phenomenon and Pakistan Tehreek-e-Insaf (PTI) government would control it before 2023.
He expressed these views while addressing a function at Government Primary School Awanpura Middle School Upgradation and talking to people during his visit to different Union Councils of his constituency NA-156.
He said that the government is not indifferent to people and well aware their hardships. He observed that government was striving hard to address public problems, saying that the global economy has also been in crisis for the past two years due to coronavirus. He however maintained that difficulties were temporary.
"We love dear homeland and would continue to live in the country. We know how to be loyal to the country. We have no flats, no accounts abroad and no one has a plan to go abroad. We are among the people and will remain with them," FM Qureshi maintained.
The foreign minister hoped that problems of masses would end soon. "We are fighting crises with determination. No matter how much the Opposition marches, there will be no in house change or end to the government. The opposition will face defeat. The democratic government of PTI will complete its term", remarked FM Qureshi.
He expressed satisfaction and hinted that PTI government's intentions were positive. "The present government has a credit for not having any corruption scandal".
Expressing the challenges, Qureshi observed that the problems were much more, compared to available resources which could not be resolved overnight. "We understand the problems and concerns of the people and trying to resolve the issues", he added.
Mali ex-president Keita dies two years after coup ouster
Mali's interim government issued a statement hailing the memory of the illustrious Keita
Bamako: Mali's former president Ibrahim Boubacar Keita, who led the West African country from 2013 until he was ousted in a coup in 2020, died at the age of 76 in the capital Bamako on Sunday, his family said.
Looming over most of Keita's presidency was the militant insurgency that has rocked the poor Sahel country since 2012, while his toppling marked the rise of the military junta which is now under regional sanctions for failing to restore civilian rule.
Mali's interim government issued a statement hailing "the memory of the illustrious" Keita, adding that the former president died "after a long illness".
Keita was forced out of office on August 18, 2020, by young military officers who staged an uprising at a base near Bamako before heading into the city, where they seized Keita and other leaders.
Foreign Minister Abdoulaye Diop said he was "saddened to learn of the death of former President Ibrahim Boubacar Keita", adding that "it is with great emotion that I bow before his memory".
Macky Sall, president of neighbouring Senegal, said in a Tweet he was "saddened" by the news, while Niger's ex-president Mahamadou Issoufou, a former comrade of Keita's in the Socialist International, hailed him as "a cultured man, a great patriot and a pan-Africanist".
Politicians and other public figures went to Keita's home southwest of Bamako to offer their condolences, with police guarding the entrances, according to AFP journalists at the scene.
The government statement said funeral plans would be announced at a later date.
– Protests, coups –
In the weeks before the 2020 coup, Keita had been struggling with protests fuelled by his handling of the jihadist insurgency and failure to turn around Mali's floundering economy.
Snail-paced political reforms, decrepit public services and schools, and a widely shared perception of government corruption also fed anti-Keita sentiment, driving tens of thousands of protesters into the streets.
Seized by the putschists, the junta that emerged from the rebellion — under pressure from the West African bloc ECOWAS — released Keita weeks later and returned him to his residence in Bamako, under surveillance.
He suffered a mini-stroke the following month and was sent to the United Arab Emirates for treatment. He had been based at his Bamako home since staying out of public life.
The ruling junta would stage another coup in May 2021, toppling a civilian transitional government.
The junta had vowed to hold elections next month to transition the country back to civilian rule. But at the end of the last year, the junta revised its timetable, saying it could stay in power for up to five years.
In response, ECOWAS agreed to sanction Mali earlier this month, imposing a trade embargo and shutting borders, in a decision backed by the United States, the European Union and former colonial power France.
Landlocked Mali, one of the world's poorest countries, is already feeling the effects of the sanctions, prompting thousands to protest in Bamako on Friday.
– Political veteran –
The son of a civil servant, Keita was born in the southern industrial city of Koutiala, the declining heartland of cotton production.
After studying literature in Mali, Senegal and France, Keita became an adviser for the EU's overseas development fund before heading a development project in northern Mali.
He then rose through the ranks under Alpha Oumar Konare, the country's first democratically elected president.
As a socialist prime minister between 1994 and 2000, he quelled a series of crippling strikes, earning a reputation as a firm leader and helping to set up his landslide election in 2013.
Keita was then re-elected in the 2018 elections, beating opposition leader Soumaila Cisse, who died in December 2020 of Covid.
Cisse's kidnapping by jihadists in March 2020 further illustrated Keita's inability to stop the violence, with rising public outrage culminating in the coup months later.


text:
Cuba Gooding, Jr. (2. siječnja 1968.), američki glumac i oskarovac.

Rodio se u Bronxu, New York. Potječe iz glazbene obitelji (majka i otac su mu pjevači). Ima braću Tommya, koji je glazbenik, a drugi brat Omar je također glumac. Otac je napustio obitelj kad je imao šest godina. Kasnije se često selio. Pohađao je čak 4 srednje škole, a u tri od njih bio je predsjednik razreda. Nakon srednje škole, tri godine učio je japanske borilačke vještine prije nego što se fokusirao na glumu. U dosadašnjoj karijeri ostvario je četrdesetak uloga, a neki od njih su: Malo dobrih ljudi, Časni ljudi, (partner Robert de Niro) Jack Munja, Pearl Harbor, Bolje ne može, Jerry Maguire, Red Tails. Za ulogu sportaša na kraju karijere osvojio je Oskara.

U 13. godini postao je preporođeni kršćanin. Nastupio je na Olimpijskim igrama 1984. kao break dancer. Snimio je i kampanju za donje rublje Hanes. Od 1994. godine je sretno oženjen sa svojom srednjoškolskom ljubavi Sarom. Ima troje djece.

Vanjske poveznice

Američki filmski glumci
Američki televizijski glumci
Dobitnici Oscara za najboljeg sporednog glumca

redpajama_set_name: RedPajamaWikipedia


text:
Premier League side expresses interest in Bello
By Doug Roberson, The Atlanta Journal-Constitution
Watford, which plays in England's Premier League, has expressed an interest in possibly purchasing Atlanta United fullback George Bello, according to a report in a London newspaper, the Telegraph.
Bello, 19, has 52 appearances, including 47 starts, with thee goals and four assists for the MLS side.
Atlanta United declined to comment on the report.
Bello earned his first call-ups to the U.S. men's national team this year, appearing in six games.
His value, according to transfrmarket.us, is $4.4 million.
Bello signed as a Homegrown player with the club before the 2018 season.
The transfer window opens in January.
Should Atlanta United sell Bello, it has Andrew Gutman and Mikey Ambrose on the depth chart at left fullback.
Doug Roberson
Doug Roberson covers the Atlanta United and Major League Soccer.
Pineda, Barco not with Atlanta United on first day of camp
Atlanta United signs Wiley to Homegrown deal
Atlanta United confirms acquisition of Hernandez


Interested in this Tiling, Tiles Request?
Need Tiling, Tiles Testing or Scientific Research?
Save time and money searching. Simply, submit a Tiling, Tiles request to find the laboratories or lab suppliers that best meet your needs.


Cathedral Outreach - Participating in Lunch in the Park and Church by the Pond.
South Park Inn Homeless Shelter, Hartford - Addressing basic needs of the homeless and monetary support.
Copyright © 2019 Trinity Episcopal Church - All Rights Reserved.


Task Force is responsible for the lawn and property maintenance of the estimated 10,000 blighted homes in over 20 parishes.We perform approximately 25% of the work in-house and subcontract the remainder to subcontractors from affected areas. The principle mission of the Louisiana Land Trust is to stabilize and maintain properties then ultimately transfer ownership to local parish redevelopment agencies. Contractually we are responsible for securing properties, addressing imminent health and safety hazards, removing existing debris and maintaining the properties to a groomed condition.


The appointee to this position will be part of a team responsible for educating future speech pathologists at one of the world's leading educational institutions focusing on the tropics. The appointee will be a speech pathologist with academic, clinical and/or clinical teaching experience. Duties will include teaching in both clinical education and academic subjects, research, and academic and service tasks as directed.
The Office of the Division of Tropical Health and Medicine (DTHM) provides collaborative leadership with the Colleges and ensures that the Colleges are able to deliver the core business of learning and teaching, research and engagement and contribute effectively to the strategic agenda. The Division office drives the strategic objectives of the Division and also services a proportion of College administrative operations.
As part of the Division of Tropical Health and Medicine the College of Healthcare Sciences promotes, fosters, supports and administers quality teaching and research at JCU in the areas of Physiotherapy, Speech Pathology, Occupational Therapy, Nursing and Midwifery, Psychology, Sport and Exercise Science and Clinical Exercise Physiology. Working in a collaborative leadership model with the Office of the Division, other DTHM Colleges and the Mount Isa Centre for Rural and Remote Health, the College of Healthcare Sciences contributes to advancing the strategic agenda and to strengthening partnerships and engagement.
Support the University's commitment to the principles of reconciliation, which exemplify respect for Aboriginal and Torres Strait Islander heritage and the valuing of justice and equity for all Australians.
The Lecturer is required to observe the lawful and reasonable directions, policies and decisions of the University Council, understand and comply with the Enterprise Agreement, the Statutes and Rules of the University, the policies and decisions of the University Council and other appropriate University authorities, as in force from time to time.
The Lecturer is required to demonstrate a personal commitment to ensure personal safety and the safety of others and contribute to the continuous improvement of our Workplace Health and Safety performance. This includes the effective implementation and compliance with James Cook University Workplace Health and Safety policies, procedures and safe systems of work, together with all relevant legislation, duties and obligations. Contribute to the continuous improvement of our WHS performance.
The Lecturer is required to exercise proper discretion in all matters affecting the well being of the University which involve public writing or speaking in accordance with the University's Code of Conduct.
Skills in time management, oral and written communication, problem solving, and the use of computers for professional and academic purposes.
Willingness to undertake a tertiary teaching qualification.


A National Science Foundation Research Traineeship (NRT) program.
We prepare graduate researchers for careers that integrate science with management and policy while advancing Climate Adaptation Science for the threatened landscape of the Interior West.
Skills emphasized in the Climate Adaptation Science (CAS) program align with many of the attributes of an "ideal, student-centered STEM graduate education system," as described in the Consensus Study Report, "Graduate STEM Education for the 21st Century." The report was produced in 2018 by the National Academies of Science, Engineering, and Medicine. Key attributes of revitalized graduate STEM education include the potential for students to: acquire broad technical literacy, encounter a variety of points of view about science, have opportunities to communicate their results to diverse audiences, think about broader impacts, work on projects in teams, and explore diverse career options in a context where nonacademic careers are not stigmatized.
The Climate Adaptation Science program provides trainees with direct experience in actionable science through an internship-research cycle. Each trainee will complete a two-part internship with a government agency, NGO, or industry partner. Internship experiences bracket a year-long research studio course. Through the internships, and a series of Science-Management-Policy Exchange meetings, trainees learn the cultures, opportunities and constraints, and science needs of the many workplaces in which climate adaptation science is created and used.
Ability to Think Comprehensively about climate, geo-hydrology, biology, social sciences and the models, concepts, and analyses that integrate these.
Trainees will have a research-based and experiential curriculum supported with elective short-courses (0.25 to 1 credit) that are flexible in length, timing, and format. These short, focused, content-rich courses respond to interests and needs of students, promote cross-participation of faculty, and deliver emerging tools and perspectives.
The Jeanne X. Kasperson Award is given to the winners of the student paper competition in the Hazards, Risk, and Disasters Specialty Group of the American Association of Geographers.
Extreme heat poses a growing threat to human health. New research by Peter Howe and colleagues shows that perceptions vary among vulnerable populations, and detailed results of perception studies can provide insights for targeted risk reduction policies.
The team used a survey tool to identify key bottlenecks to making work more reproducible.


Mold Damage Spring TX Experts (281) 990-1048 BEST Choice!
Experiencing A Spring Mold Damage Dry-Out Issue?
Mold is possibly highly dangerous and should be assigned to the service providers.
However, in order to help tutor anyone, we have included the following content below.
Dangerous molds are really actually unsafe parasite fungis circulated thru air.
Indeed, every kinds of molds can possibly be bad molds. They flourish with the help of oxygen and water and occur naturally in nature.
Molds accumulate its nutrients from dead plants and rotten foods. They possess quite a few varieties being poisonous and non-poisonous.
Black molds are among the infamous dangerous molds. The toxic details of black molds cause several physical ailments such as nasal and sinus congestion, burning eyes, watery and blurry vision, skin irritation , long term tiredness and continuous migraines. In certain cases dangerous molds can distress the entire immune system of the physical body leading to high temperature.
In such a way, it is always a good idea to get rid of molds at their very first sight itself through the assistance of experts.
Flooding is just one of the significant contributors to mold expansion. There are a variety of reasons why flooding could occur. Flooding may be likely the effects of a natural tragedy like a hurricane , tidal wave or heavy rain storms.
The only way to avoid the painful results of flooding is to strengthen your house structure. You can raise the home build the floors at a slant that one may let the water out quickly.
A further reason might be negligence. Sometimes, we neglect to shut off the spouts, hence creating flooding from inside the residence.
Additionally, a hose could burst as a result of poor repair and maintenance or construction , causing flooding.
Therefore, nature and human negligence are the particular reasons for floods in houses.
Health effects of mold are numerous caused due to mold developing in the house. Health effects of mold may come with the signs which include sniffily nose, cough, allergic reactions, eye irritation, sinus and nasal blockage , exhaustion and headache. Allergic feelings include things like fever.
Other health results of mold, particularly developing from hazardous mold are throat inflammation, memory impairment, skin hives, food intolerances , bloodied or watery eyes, respiration problems for instance asthma, mood swings and irritable bowel syndrome. These health impacts of mold may lead to substantial issues in your physical body.
Additional wellness consequences of mold may well be athlete's foot and yeast contaminations.
Even though fire and mold do not contain a straight link, the harm from a fire can develop well-suited circumstances for the mold to thrive. Damage to the house's construction could very well also add to this unexpected relationship between fire and mold. Water pipes and plumbing in your residence may go through damage in a fire and mold will be able to evolve.
As water is useful to overcome fires, the wood structures of a property may retain the water. If one does not dry the houses thoroughly, of course, there is a chance of mold expansion.
Fire and mold, even though not linked, are most definitely a dangerous mixture. Due to the fact that fire and mold have an indirect causal relationship, it is most effectively to take suitable precautions right after a fire.
A dehumidifier is a device used to dehumidify the moist air and to hinder mold invasions. A dehumidifier also helps in drying up any particular area (floor) or corner of a room. In countries, where the weather is rainy and damp throughout the year, dehumidifiers work as condensers too.
It is critical to do away with mold as soon as you find it. Also there are several ways to eliminate mold. Mold can grow anywhere . It needs a bit of water and air to thrive. On occasion it expands without the knowledge of the home owner.
One can easily begin with taking care of any leakage that is causing wet environment. Utilizing of exhaust ventilators can assist in eradicating the damp indoor air from kitchen area or bathroom to end mold progression.
Increase the flow of air in the places, where there is increased amount of humidity to eliminate possible mold development in that space. Certainly, a dehumidifier is the greatest machine to eliminate mold in its very early growth phases.
In subsequent stages of visible mold, that may be behind wall structures or in A/C ducts, skilled Mold removal experts should be consulted. Look for Mold. You are certain to find mold in your property if anybody reports that some allergic reaction symptoms fade away right after they travel away from your house.
Another sign that you will likely locate mold is a mildewy smell. Many service providers too utilize their nose to seek out mold. An additional quite easy technique to locate mold is to inspect the source of wetness or the source of water dilemma.
Mold flourishes in humidity. In the case that you presume the mold within the wall surface, you may make a hole inside the wall surface and test the dust particles to identify mold. You can surely find mold certainly making using of the home-test kits sold in the market place.
Garage area mold begins to grow on the surfaces in garage area. Garage mold may even proliferate further into garage walls. Inside the walls, garage mold may progress uninterrupted, making the air impure and endangering health. There are certain techniques for deterrence.
Number one, isolate your garage, especially if it attached to your home. Do not transfer contaminated items to your auto or house. If the roof structure has leaks, inspect and mend, to ensure that even more moisture does not go in your garage.
Seal the doors and windows and add weather stripping. Park your automobile off the garage, particularly on stormy days. Examine your garage everyday for reoccuring garage mold. Make it possible for air flow in the garage. Allow adequate light come in by keeping doors open.
Hidden mold most often grows in dank areas and go unrecognized. The typical spots for hidden mold are the base of pads and floor coverings, ceiling tiles and its top side, roof covering materials, A/C ductwork, dry wall , dryers, wallpaper back and refrigerator.
Actually a smallest water leak, which we do not notice and fail to fix, suffices for hidden mold to develop. When it comes to reducing the chances of hidden mold, a super technique indeed is staying conscious about its existence. Mold may remain hidden in the air and may well affect your health in a negative way. Hence, you have to detect hidden mold, especially on smelling any unexplained smell in your home.
1. Containing the mold from infecting further unpolluted locations.
4. Sheltering all of the possessions infected by the mold.
The most efficient step to contain the mold is to remove the source of the mold trouble. If the mold trouble develops in your HVAC unit, clearing away mold out of there will certainly complete most of your job.
Use airtight walls to contain the mold in the affected place prior to you begin wiping out mold.
People usually feel that they will be able to exterminate the mold effectively using bleach. But unfortunately, bleach is not an effective killing agent. The very best item to eradicate mold is simply boric acid.
There is in addition cutting-edge techniques that professional Mold contractors employ to clear away huge amounts of mold.
When eliminating mold that is dead, you really should use safety measures. Making use of respirators and if possible full body coveralls as well as gloves, that will keep all of the mold spores from coming in contact with your skin.
Lastly, Block the location from the rest of the home with a plastic shield, guard future from mold by protecting the household furniture utilizing a fungicidal coating and covering. One might likewise use a clear coat of polyurethane acrylic to complete the elimination action. This will secure the place.
Flood and mold often go hand in hand. If your residence was a casualty of flooding, mold is sure to multiply in your residency until you dry it thoroughly.
As a result of a flood, water seeps into the walls and surfaces of the home. The walls absorb this water and it delivers moisture content for the mold. Hence, flood and mold may cause a dual challenge regarding the property owner.
A flood may in addition harm some structures in your house. These crevices offer ideal damp places for mold growth. Flood and mold are a powerful fusion.
Minimizing the risk of mold development just after a flood is hard unless a person takes prompt action.
Flooring mold describes the mold in the floor. Floor mold usually carries on unknown as a result of tiles and carpets and rugs which hide it. By no means ignore even the tiniest mold indicators.
Mold progression might be as tiny as in the grout lines, yet indicative of a broader issue below the flooring. Moreover, wooden floor are more at risk to floor mold. Floor mold may increase very rapidly whenever one does not discover its existence soon enough.
The gaps in the flooring are really cozy with regard to the mold's expansion. So, the instant one spots any signs of floor mold he/she should take steps mitigate it.
Water Damage Spring Repair Pros On Duty.
Fungicide is an chemical, that hampers or destroys the progression of fungi and anyone could apply fungicide in your grass and for your shrubs. It comes in many types including the contact fungicide, penetrant fungicide and systemic fungicide. The contact type is for eradicating pores, which are exposed to the agent.
It stays for a much longer timeframe on the plant's surface . Penetrant type is utilized as one precautionary maintenance option and not as a treatment option. You might utilize systemic fungicide to a particular location, that then moves by means of a plant's circulation system for safeguarding it. Make use of fungicide for managing plant contaminations. People can administer it using a garden sprayer.
We take care of water damage Spring dry outs, flood water concerns, fire damage resolutions, fire damage resolutions around Spring. We also manage mold difficulties. We work with commercial and residential work around the Spring area. Crawl Space flooding and sub-pump failings, emergency plumbing, broken pipes too.


text:
Q: Display data in a React component from an object where the keys are different but the values are the same I have some data that is in JSON format where the keys are different, but the objects nested inside have a keys that are the same (in this case I want a title and a description).
How do I display this data in a React component?
I've seen that you can 'map' through items in an object similar to how you would in an array using Object.keys(objectName).map() however since the keys at the next level are all unique, I'm not sure how to go down to the next level to get to the data I need.
The JSON data I'm working with looks something like this:
const data = {
  dataINeed: {
    firstObject: {
      id: 'one',
      title: 'First title',
      description: 'First description',
    },
    secondObject: {
      id: 'two',
      title: 'Second title',
      description: 'Second description',
    },
    thirdObject: {
      id: 'three',
      title: 'Third title',
      description: 'Third description',
    },
  },
};

And 'mapping' through the data in React looks something like this:
{Object.keys(data.dataINeed).map((data) => {
  return (

{data.*.title}

{data.*.description}

  );
})}

Which obviously doesn't work as I can't use a wildcard selector.
Any suggestions on how to get to that next level of data?

A:
where the keys are different but the values are the same

Just use Object.values() directly.
{
  Object.values(data.dataINeed).map((data) => (

{data.title}

{data.description}

  ))
}

SAMPLE JS

 const a = {
  dataINeed: {
    firstObject: {
      id: 'one',
      title: 'First title',
      description: 'First description',
    },
    secondObject: {
      id: 'two',
      title: 'Second title',
      description: 'Second description',
    },
    thirdObject: {
      id: 'three',
      title: 'Third title',
      description: 'Third description',
    },
  }
}

console.log(Object.values(a.dataINeed))

A: In your map function you are getting key in each map call (firstObject, secondObject, etc.), so you need to extract your item by that key.
{Object.keys(data.dataINeed).map(key => {
    const item = data.dataINeed[key];
    return (

{item.title}

{item.description}

    );
})}

Here is example.

A: You might find Object.entries more useful for this than Object.keys, just note that it's ES2017 so you'll need to use the correct transpiler preset. It will return an array for each entry containing the key at index 0 and the object itself at index 1.
So for example:
Object.entries(dataObject).map([key, value])

will give you
[
    ["firstObject": {...firstObject}],
    ["secondObject": {...secondObject}]
]

A: Please check out the following snippet and refer Template string is JS
Basically, in your map, you are getting key and hence you need to access the value using that key.

const data = {
  dataINeed: {
    firstObject: {
      id: 'one',
      title: 'First title',
      description: 'First description',
    },
    secondObject: {
      id: 'two',
      title: 'Second title',
      description: 'Second description',
    },
    thirdObject: {
      id: 'three',
      title: 'Third title',
      description: 'Third description',
    },
  },
};

const value = Object.keys(data.dataINeed).map((item) => {
  const myData = data.dataINeed[item];
  return (
    `

      <
      dt > {
        ${myData.title}
      }
 <
      dd > {
        ${myData.description}
      }

`
  );
})

console.log(value)

redpajama_set_name: RedPajamaStackExchange


text:
3-D mammography detects 34% more breast cancers
Oct 16, 2018 2:56 pm by taso
In the traditional mammogram examination, all of the breast tissue is captured in one image. On the other hand, breast transplantation is three-dimensional and works according to the same principle as what is known as tomography.
This means that many low dose x-rays are taken from the chest from different angles, which are reconstructed into a computer to show thin layers of the breast. With more and improved image information and less overlapping tissue structures, the chance of detecting tumor tumors increases. Furthermore, the radiation dose may be reduced under certain conditions.
"With breast augmentation, 34% more tumors were detected compared to current mammogram testing, while at the same time we managed to reduce breast compression during the examination, which may encourage more women to participate in the test," said Sophia Zackrisson, associate professor at Lund University and radiologist at Skåne University Hospital (SUS), Sweden.
But she added: "However, we have to call back some women for more tests than traditional mammography. Confirm that these women did not have cancer, as this method finds more chest structures in general. There is a need to improve the detection of cancer and for many women breast reconstruction is clearly the most appropriate method. The synthesis is something that will be introduced as the prevailing method, the question is simply when and to what extent. "
Tummosis is already being used at the Skåne University Hospital, among others, to investigate breast cancer. Prior to a possible large-scale introduction to the general screening program, the research team is now conducting a cost-benefit study.
All types of detection involve the risk of overdiagnosis, which in turn can lead to unnecessary therapies. As a result, researchers, in collaboration with their colleagues from Europe, will carry out a meta-analysis by bringing together and examining the overall results so far.
One problem for the introduction of 3D mammography is the lack of radiologists who can diagnose the increased image material produced by the method. However, the method used at the Skåne University Hospital may be more effective than those examined in previous international studies in which 3-D was combined with traditional mammogram testing. This led to more image material and a higher dose of radiation.
"We have shown that we can achieve the same result with a simpler and perhaps even better method," said Zackrisson.
In the future, part of the diagnosis of breast augmentation images can be automated by computer, but it will take time for that. Currently there is a lack of suitable and tried-and-tested software, but studies are under way.
Deeper Into the Secrets of Breast Cancer
A new study suggests that some women are just more vulnerable to some of the…
Men: You can get breast cancer
Every year in the UK thousands of women are diagnosed with breast cancer. What…
Nighttime Snacks May Increase Return Risk of Breast Cancer
As if we needed an extra reason to cut that bad habit! New research by…
Author: taso
Serial killer Charles Manson died today at Bakerfield hospital 1180447 views
Joe Perry, Aerosmith guitarist was hospitalized at New York hospital 775014 views
Pele Brazilian football legend dies at 78 in Paris hospital 406526 views
Doctors were shocked when they opened a girl's belly. They did not expect to find something like this 198743 views
Tom Jones was diagnosed with a brain tumor 158462 views
13-year-old becomes the youngest dad in the world. DNA test, however, proved something more shocking 105494 views
She was expelled from school due to her clothes. When you see what she was wearing you'll be shocked 101773 views
Ringo Starr, drummer of Beatles was hospitalized due to heart problems 88174 views
Parents left their baby alone with a wild pitt bull. When they returned they could not believe what they saw! 69126 views
This girl published this shocking photo on Facebook! You won't believe who did that 49054 views
Weekly Observer
Copyright © 2020 Weekly Observer. Designed by WPZOOM
http://theweeklyobserver.com/3-d-mammography-detects-34-more-breast-cancers/64193">


NIA 24: What is NIA 24? - Shop at Skin1!
NIA 24: What is NIA 24?
The Pro- Niacin molecule breakthrough is the result of 25 years of research into cellular DNA damage in the formula of cancer. So beneficial, it's been chosen by the National Cancer Institute for development as a potential skin cancer prevention agent. How does NIA 24 work?
By stimulating skin's natural barrier function, NIA 24 builds stronger, better skin that's more resilient and resistant to damage. By improving the skin's barrier function, overall skin tone and texture improve. NIA 24 reduces the appearance of visible brown spots, hyperpigmentation and lines specifically associated with sun damage. Without it, skin falls prey to daily sun and environment stresses that slow skin's self- protective function and speed the visible signs of aging. Why does NIA 24 work?
During research partially funded by the National Institutes of Health, scientists identified an important role for the active form of Niacin in how cells respond to genetic damage. NIA 24 introduces that breakthrough: patented Pro- Naicin. While Niacin is used in other products on the market, Pro- Niacin is the first and only patented Niacin molecule that converts to its active form to regenerate skin cell layers. How are NIA 24 products different?
Double-blinded, placebo-controlled trials show that Pro-Niacin strengthens the skin barrier. Skin biopsy analysis of patients' cheek shows a dramatic thickening of the stratum corneum and epidermal layers of Pro-Niacin which result in improved skin barrier and integrity. In addition, the lower dermal layer shows a healthier, tighter cellular matrix after 12 weeks of Pro-Niacin.


Rockpooling in Devon is an activity that can be enjoyed all year round, although there are certain times of year that can be more fruitful than others. Late spring to early autumn is a good time of year as (hopefully) you won't be standing around with your teeth chattering.
Marine researchers tend to go on field trips during the equinox, or when there's a full moon (as this is when the tides are at their lowest). However, for most of us, heading on a rockpooling excursion at low tide will do nicely.
Rockpooling is serious business – so it's best to be prepared! Ditch the flip flops and slip your feet into some trainers or walking sandals. Wet rocks can be sharp and slippy so you'll need some shoes with a thick sole and grip.
If you want to easily identify your marine marvels, bring a pocket-sized identification guide. Depending on the weather it's also good to have suncream, a hat, a warm jumper or a waterproof to hand.
Choose a clear bucket and you'll be able to observe any creatures you find. Be considerate of the marine life that is living in the rockpools. Don't use a net as sea creatures can get easily tangled in it and it can end up causing them harm. Instead, place your bucket into the pool and see what swims in, or use it to gently scoop up any interesting finds. Make sure that you carefully return any sea critters to where you found them.
We would recommend packing a small first aid kit for any tumbles that might occur. Finally, pack some snacks or a picnic – rockpooling can be hungry work!
If you are staying in Salcombe, North Sands is a great option with plenty of rockpooling and beach combing opportunities. It's an easy 15-minute walk from the centre and is popular with locals and holidaymakers. There's even an alfresco dining opportunity nearby for when you've had your fill of rockpooling – The Winking Prawn is famous for its buckets of prawns and summer evening BBQ menu.
Jump on the East Portlemouth Ferry from Salcombe and when you reach the other side, walk along the foreshore for about half a mile keeping the sea to your right. First, you'll pass Smalls (another good rock pooling beach!), but keep going for and you'll reach Mill Bay. At low tide the beach is sandy with plenty of rockpools to explore.
Just a short journey from Salcombe you'll find Soar Mill Cove, a hidden beach that is only accessible by foot. There are no facilities and no lifeguards, but if you're looking for an unspoilt spot with plenty of natural treasure to be found, Soar Mill Cove is a great option. Just make sure you remember your picnic – you won't want to have to walk back up the hill to the car to get it!
Rockpooling is a fascinating and free activity that can be done all year round. Uncovering and identifying marine species will get inquisitive young minds whirring – and Salcombe, with its family-friendly beaches, is the perfect backdrop. Happy rockpooling!


Meet thousands of local Wildomar singles, as the worlds largest dating site we make dating in Wildomar easy! Plentyoffish is 100% Free, unlike paid dating sites. You will get more interest and responses here than all paid dating sites combined!
Start meeting new people in Wildomar with POF!
Have enough fun in your life?
Are you fun N easy to get along with?


I have been so busy since my friends and I started our business--an events and talents management company just last February 18. But we were not all work of course, 'coz we also know how to play while working.
Being together 24/7 resulted to so much attachment to each other. We're not just business partners, nor friends, but we consider ourselves siblings! I feel so lucky to have them with me.
Aki refused to have his photo taken; good thing Carlo didn't haha!
Work and play made possible!


A hospitalist is a doctor who specializes in caring for patients while they are in the hospital. Our hospitalists are Board Certified/Board Eligible in Internal Medicine, Combined Internal Medicine/Pediatrics, or Family Practice. They also have additional training or experience in caring for hospitalized patients. Once a patient leaves the hospital, they do not continue to provide medical care to that patient. They do, however, communicate closely with your primary care physician at the time of discharge so he or she is aware of what occurred during your hospital stay. This will also help your primary care physician to seamlessly assume your care once discharged.
Our Hospitalist Service is staffed by physicians, nurse practitioners and physician assistants. The service is available 24/7.
Your hospitalist physician will spend extra time learning about you. At the time of your admission he or she will review any past medical records that you may have at the hospital and will gather information from you and your family. Your hospitalist physician will use all this information to help them provide you the best possible medical care.
What can I expect from my experience being cared for by a hospitalist?
You can expect your Hospitalist to treat you with kindness and respect; listen carefully to your concerns, and explain things in a way that you understand.
When will I see my primary care physician?
During the course of your hospitalization, your hospitalist and primary care physician may talk further regarding your treatment. At discharge your hospitalist will communicate with your primary care physician to discuss your further treatment needs, help arrange follow-up, and prescribe the needed medications. In addition, your hospital records will be accessible to your primary care physician. During your hospital stay, you will be seen by a Hospitalist. You will see your regular doctor shortly after discharge from the hospital.
What are the advantages of a hospitalist program?
Members of our hospitalist team have experience and expertise navigating the systems of care at a hospital. Simply put, they know how to get things done in the hospital. In addition, hospitalists spend all of their time caring for patients in the hospital, so they do not need to go back and forth between an office to see patients for appointments. This means they are available all day to answer you and your family's questions, get immediate test results, and consult with other specialists as needed.
Because hospitalists are dedicated to seeing only hospitalized patients, your primary care doctor is able to be with you in the office with fewer delays and interruptions. Your primary care doctor will be able to devote more time to keeping you and your family healthy, and be more accessible when you need them.
What if I do not have a primary care physician?
At the time of your discharge, the hospitalist will refer you to a primary care physician and provide them with your hospital information. As ongoing medical care is necessary to keep you healthy, it is important that you establish a relationship and follow-up with a primary care physician.


Pre-owned Ford Edge AGENCY WARRANTY FULL SERVICE HISTORY GCC for sale in Sharjah. Blue 2016 model, available at Mawater Motors. This car has automatic transmission, 6 cylinders, 18″ wheels and black interior. 36,000 km, GCC specs.


Book Review – Creation or Evolution: Do We Have To Choose?
More than a year ago I was lent this book by the pastor and I have eventually finished it (http://www.amazon.co.uk/Creation-Evolution-Do-Have-Choose/dp/1854247468). The book is held up by some as a refreshing view on the relationship between Christianity and Evolution.
I found the book mixed and ultimately disappointing, but there are some good bits in it.
On first handling the book it is clear that the intent is going to be to show how acceptance of evolution does not have to be at the expense of religious belief, specifically Christianity. This aspect interested me, given my journey, so I started the book specifically looking for how it would answer that specific challenge.
Most of the book is devoted to explanations of various bits of evolution. By necessity they have to contain a certain amount of technical language. However, I found on the whole that the passages on evolution are lay friendly and do a good job of explaining why evolution is not only a valid theory, but an accurate description of observed fact as best we know it.
The book explains well how evolution is a naturalised process and our knowledge of it has no pre-requisite of any god. The processes we understand are fully explained and there are no missing bits that require the invocation of the supernatural.
Creationism and ID are also dealt with effectively, albeit with far fewer pages. They are accurately shown to be scientifically deficient and their need to have a god directly be involved to 'push the process along' is shown to be a limiting factor for which there is nothing to show.
One good point that is made in the book is the argument for beauty. Many creationists will look at the world we see now and argue that the beauty there can only have been put there directly by god. I once made precisely those arguments. The book counters by saying that the processes that made us and all we see around us are no less beautiful and they too came from god. When a creationist views the world and sees beauty and says it must come from god, they are by implication saying that the long processes that made the beauty they see can not be beautiful because they don't believe god did it that way.
This is a dangerous way of thinking because it creates a closed mind and stops that believer from fully appreciating the glory of their god's creation.
The book explains well why creationism and ID are not valid.
So the big question I wanted to book to answer was, given the above, how does the author, who professes his faith at several points throughout the book, demonstrate that belief in god is consistent with evolution and, more specifically, show that there is a logical reason to hold that view. Sadly, the answer just doesn't come.
No matter how much I wanted to see an argument for god, it just didn't happen.
The book successfully argues for the science of evolution and against the god of creationism. As a result it has confirmed my position as an atheist and done nothing at all to tempt me back to faith. I suspect the author would be disappointed, but he should not be surprised.


Connectivity, valuable apps, and the "anywhere brand" are some of the essentials you should be focusing on in your mobile strategy.
I found myself furiously taking notes because the themes and questions that Emily shared struck me as absolutely essential for developing a winning mobile strategy.
Below are 10 of the nuggets I took away, along with my take on their implications. I hope you find this as useful as I did.
Mobile increases consumer expectations of connectedness. We tend to evaluate new opportunities with a tipping point mentality, asking ourselves "when is the opportunity big enough to take seriously?" The statistics already tell us that mobile has reached that point, but I loved how Emily reframed the issue away from hard facts and toward a very clear picture of the way behavior has changed as a result of the powerful computers we carry with us in our pockets and purses.
Simply put, we expect more, all the time. Instead of thinking about whether mobile is big enough, we should be thinking about what expectations we'd actually be failing to meet without a thoughtful approach to mobile in place.
Connectivity makes things more useful. When thinking about the expectations consumers have, start here. What useful thing could we do if we added connectivity to existing experiences? Take an inventory of all the places your brand exists and insert a connected experience wherever it adds value.
Presence at the point of need. Every product or service exists to serve a consumer need. Think about the time or place that the need manifests itself, and how mobile can play a helpful role. Whether it's in a store, at an airport, in the home, or anyplace else, it's a good bet that mobile could enhance the experience. What better place for the brand to exist than at the point where the need for it becomes apparent?
It's not a screen, it's a partner. Mobile is certainly a media channel – and one that's about to get a lot more interesting with the launch of the iAd platform – but thinking of mobile predominantly as another screen to deliver messages misses the real benefit. Instead, think of mobile as an extension of your team.
Think about problem solving. As opposed to messaging, or branding, or anything else that's primarily driven by your brand's objectives. If you want to be a go-to app that stays on the first screen, solve a problem for consumers in a way that makes sense for your brand.
The mobile Web isn't the mini-Internet. Ten years ago, the mantra was: "a website is not an online version of your brochure." Today, we similarly need to remind ourselves that the mobile Web experience shouldn't be a pocket-sized version of the desktop. Mobile sites should be created ground-up, prioritizing the information mobile consumers need. A useful (and maybe unflattering) exercise to go through is to access your company's Web content on a mobile device. If you find a same-but-smaller version of the desktop site, you'll know you're not giving consumers what they need.
Use mobile's embedded tools. To differentiate from the desktop experience and develop something mobile-worthy, think about how you can use the tools that mobile devices increasingly come equipped with, including GPS, accelerometer, camera, video, speakers, etc. For thought starters, read this insanely long but very useful post by mobile guru Tomi Ahonen about the eight unique properties of the mobile device and how they can be put to good use.
Don't rely on your brand name. Brands shouldn't assume that their heritage or prior success will lead to more of the same within mobile. Your brand can't do the work for you; you have to provide an enriching experience…or someone else will. If the brand name was all that mattered, Zagat would be the leading source for mobile restaurant reviews, but that space has now been claimed by players like Yelp.
Become an anywhere brand. Emily closed her presentation with a compelling, aspirational definition of the "anywhere brand." She described an anywhere brand as one that appears in meaningful ways, on appropriate devices, wherever the consumers needs it.
What would it take to transform your brand into an "anywhere brand"?


Some parts of the country have now been without their favourite fried chicken for a full week, and today KFC have finally apologised for the great KFC Crisis.
The fast food chain has been inundated with complaints after it started closing the majority of its 900 stores last Friday due to a supply and delivery error.
And today, KFC has released a hilarious apology which has gone down a storm with its customers on social media.
One described it as 'the perfectly pitched apology', while another posted: 'KFC' apology in the newspapers.
An issue with the company's delivery system meant that a number of its outlets in the county had to shut, Devon Live reports.
It was also revealed that the store were closed after a mix up was caused when a new supplier was ushered, leading to no chips being delivered.
A KFC spokesperson said: "We deliver fresh chicken to our restaurants, but we're having a few hiccups with our delivery system at the moment.


text:
Ardyth DeBruyn
Author. Artist. Anthropologist.
Calico Avengers
Captain Bull and the Calico Avengers
Calico Avengers – Chapter Two
Captain Calico and the Pirate Treasure
Chosen Sister
Chosen Sister Excerpt
Chose Sister Excerpt chapter 2
Dark Lord Academy
A School for Villains
Thief in the Night
The moon lit the waters of Port Mews, turning the waves silver. Sailing ships, their lamps long put out, were now dark shapes that bobbed up and down where they lay at anchor. Past them, the town too was dark. The only light was a dull glow from the watchtower near the castle that loomed over the city. There guard-cats stood on watch, protecting the king of Catland and his nobles where they lay sleeping in their beds. Otherwise, all the city was quiet.
Down at the docks stirred two dark shapes wrapped in cloaks. They hunched down by the pier, the taller of the two pointing out across the dock at the largest, most impressive ship.
"There she be. The Killer Whale. One of the finest vessels to sail the seven seas."
"I've heard she has a new name now," the other figure said. "The Calico Avenger. And what's more, a new captain and crew."
"That won't matter," said the first. "The map will still be there."
"You mean you hope it's still there. But don't worry; if it is, I'll find it."
And with that the second cloaked figure moved out across the dock, a low shadow stooped against the ground. It zigzagged from post to post until it reached the end of the dock. The Calico Avenger had her gangplank drawn up, but the thief took out a grappling hook on a long cord. No one aboard the ship heard it clink as it hit the railing, or saw the thief climb aboard, paw over paw.
Out at sea the night watch would be awake on the decks, keeping the ship's course true, but here in the safety of the docks everyone was sound asleep in their bunks. The thief swung over the railing, landing on soft padded feet on the deck. Then the thief crept forward to the captain's cabin and pressed an ear to the door.
Soft snores came from within. The thief eased open the door. At the far end of the cabin were two bunks, one on top of the other. Captain Calico Patrick slept in the bottom one; his first mate Nathanial, usually known as Natty, was in the top. The thief tip-pawed into the room. The floor creaked and Natty stirred, one paw hanging over the edge of his bunk. The thief froze, waiting until Natty's breathing returned to normal.
The thief moved over to the cupboards on the far side and opened the third one on the right, then started to remove the items silently. A candlestick, however, was jostled free, and fell to the floor with a clatter.
Natty sat up at the noise, rubbing his eyes. He was used to the motion of the ship at sea knocking things over, but the ship was still. He blinked, his eyes blurry, and stared at the dark shape across the room. "Patrick?"
Something glinted in the moonlight and hissed through the air. Natty was thrown backwards as something sharp and painful dug into his shoulder. He cried out, reaching up with his other paw to touch it. A knife was lodged there. The realization made his head spin, and he mewed pitifully.
Patrick woke up at Natty's cry, just in time to see something, someone dash across the cabin. He jumped out of bed and lunged at the intruder, catching the thief by the hind paw. He tried to hold on, but the thief stomped down hard, hurting his paw and forcing it open. The thief pulled free and burst out onto the deck.
"Stop! Intruder! Intruder on the ship!" yelled Patrick, scrambling to his feet. He rushed out of the cabin.
All he could see was the dark, hooded form bounding away from him. He dashed after it. Some of the ship's crew came running, but none of them were fast enough. The thief dived over the side of the ship. They heard a splash, but by the time they reached the railing the thief had vanished.
"Natty!" Patrick remembered his brother and rushed back to the cabin.
Natty lay on the bed, his breathing rough and painful. "Got a knife in my sh-shoulder," mewed the kitten.
Patrick wasn't sure what to do. The sight of the knife and the blood scared him. Still, he didn't want his brother to know, so he carefully lifted him down from the bunk. "Quick! Someone help! Natty's been wounded."
Armando the raccoon came in with a lantern. "I've called Tat, he knows about injuries."
The older cat was there quickly. He pulled back Natty's nightshirt to look at the wound.
"It hurts," mewed Natty.
"Don't worry, young one," said Tat. "It's not too deep. It'll mend in no time. Just clench your teeth and be brave while I get this out."
Patrick stayed close, holding his brother's paw on his unwounded side. "You can do it."
Natty bravely nodded.
Tat got a bandage ready, then slowly counted to three and yanked out the knife.
Natty screamed and squeezed Patrick's paw so hard he pricked him with his claws, but Patrick just stayed close, purring to encourage his brother.
"You'll be okay," Patrick promised.
Natty took a deep breath. It hurt less now that it was over with and Tat was bandaging his shoulder. He hoped it would heal quickly. When Tat was done, Natty let Patrick help him to sit up and carefully touched the bandage with a paw.
"You'll need lots of rest. Try not to use your arm if you can help it," said Tat.
Armando was picking up the things the thief had dropped and putting them back in the cupboard. "Well, the intruder certainly made a mess. The question is, what was he after?"
"And did he get it or not?" mused Tat.
"Well, I'm going to find out," said Patrick. "No one breaks into my ship and hurts my brother and gets away with it! I'm going to the city watch first thing in the morning."
Also available from B&N, Kobo, and Smashwords.