text:
namespace TestCases.SS.UserModel
{
    using System;
    using NUnit.Framework;
    using NPOI.SS;
    using NPOI.SS.Util;
    using NPOI.SS.UserModel;
    using System.Collections;
    using NPOI.HSSF.UserModel;

    /**
     * Common superclass for Testing {@link NPOI.xssf.UserModel.XSSFCell}  and
     * {@link NPOI.HSSF.UserModel.HSSFCell}
     */
    [TestFixture]
    public class BaseTestSheet
    {
        private static int ROW_COUNT = 40000;
        private ITestDataProvider _testDataProvider;
        public BaseTestSheet()
            : this(TestCases.HSSF.HSSFITestDataProvider.Instance)
        { }
        protected BaseTestSheet(ITestDataProvider TestDataProvider)
        {
            _testDataProvider = TestDataProvider;
        }
        [Test]
        public void TestCreateRow()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            Assert.AreEqual(0, sheet.PhysicalNumberOfRows);

            //Test that we Get null for undefined rownumber
            Assert.IsNull(sheet.GetRow(1));

            // Test row creation with consecutive indexes
            IRow row1 = sheet.CreateRow(0);
            IRow row2 = sheet.CreateRow(1);
            Assert.AreEqual(0, row1.RowNum);
            Assert.AreEqual(1, row2.RowNum);
            IEnumerator it = sheet.GetRowEnumerator();
            Assert.IsTrue(it.MoveNext());
            Assert.AreSame(row1, it.Current);
            Assert.IsTrue(it.MoveNext());
            Assert.AreSame(row2, it.Current);
            Assert.AreEqual(1, sheet.LastRowNum);

            // Test row creation with non consecutive index
            IRow row101 = sheet.CreateRow(100);
            Assert.IsNotNull(row101);
            Assert.AreEqual(100, sheet.LastRowNum);
            Assert.AreEqual(3, sheet.PhysicalNumberOfRows);

            // Test overwriting an existing row
            IRow row2_ovrewritten = sheet.CreateRow(1);
            ICell cell = row2_ovrewritten.CreateCell(0);
            cell.SetCellValue(100);
            IEnumerator it2 = sheet.GetRowEnumerator();
            Assert.IsTrue(it2.MoveNext());
            Assert.AreSame(row1, it2.Current);
            Assert.IsTrue(it2.MoveNext());
            IRow row2_ovrewritten_ref = (IRow)it2.Current;
            Assert.AreSame(row2_ovrewritten, row2_ovrewritten_ref);
            Assert.AreEqual(100.0, row2_ovrewritten_ref.GetCell(0).NumericCellValue, 0.0);
        }

        [Test]
        public void TestRemoveRow()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet1 = workbook.CreateSheet();
            Assert.AreEqual(0, sheet1.PhysicalNumberOfRows);
            Assert.AreEqual(0, sheet1.FirstRowNum);
            Assert.AreEqual(0, sheet1.LastRowNum);

            IRow row0 = sheet1.CreateRow(0);
            Assert.AreEqual(1, sheet1.PhysicalNumberOfRows);
            Assert.AreEqual(0, sheet1.FirstRowNum);
            Assert.AreEqual(0, sheet1.LastRowNum);
            sheet1.RemoveRow(row0);
            Assert.AreEqual(0, sheet1.PhysicalNumberOfRows);
            Assert.AreEqual(0, sheet1.FirstRowNum);
            Assert.AreEqual(0, sheet1.LastRowNum);

            sheet1.CreateRow(1);
            IRow row2 = sheet1.CreateRow(2);
            Assert.AreEqual(2, sheet1.PhysicalNumberOfRows);
            Assert.AreEqual(1, sheet1.FirstRowNum);
            Assert.AreEqual(2, sheet1.LastRowNum);

            Assert.IsNotNull(sheet1.GetRow(1));
            Assert.IsNotNull(sheet1.GetRow(2));
            sheet1.RemoveRow(row2);
            Assert.IsNotNull(sheet1.GetRow(1));
            Assert.IsNull(sheet1.GetRow(2));
            Assert.AreEqual(1, sheet1.PhysicalNumberOfRows);
            Assert.AreEqual(1, sheet1.FirstRowNum);
            Assert.AreEqual(1, sheet1.LastRowNum);

            IRow row3 = sheet1.CreateRow(3);
            ISheet sheet2 = workbook.CreateSheet();
            try
            {
                sheet2.RemoveRow(row3);
                Assert.Fail("Expected exception");
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual("Specified row does not belong to this sheet", e.Message);
            }
        }
        [Test]
        public void TestCloneSheet()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ICreationHelper factory = workbook.GetCreationHelper();
            ISheet sheet = workbook.CreateSheet("Test Clone");
            IRow row = sheet.CreateRow(0);
            ICell cell = row.CreateCell(0);
            ICell cell2 = row.CreateCell(1);
            cell.SetCellValue(factory.CreateRichTextString("Clone_test"));
            cell2.CellFormula = (/*setter*/"SIN(1)");

            ISheet clonedSheet = workbook.CloneSheet(0);
            IRow clonedRow = clonedSheet.GetRow(0);

            //Check for a good clone
            Assert.AreEqual(clonedRow.GetCell(0).RichStringCellValue.String, "Clone_test");

            //Check that the cells are not somehow linked
            cell.SetCellValue(factory.CreateRichTextString("Difference Check"));
            cell2.CellFormula = (/*setter*/"cos(2)");
            if ("Difference Check".Equals(clonedRow.GetCell(0).RichStringCellValue.String))
            {
                Assert.Fail("string cell not properly Cloned");
            }
            if ("COS(2)".Equals(clonedRow.GetCell(1).CellFormula))
            {
                Assert.Fail("formula cell not properly Cloned");
            }
            Assert.AreEqual(clonedRow.GetCell(0).RichStringCellValue.String, "Clone_test");
            Assert.AreEqual(clonedRow.GetCell(1).CellFormula, "SIN(1)");
        }

        /** Tests that the sheet name for multiple Clones of the same sheet is unique
         * BUG 37416
         */
        [Test]
        public void TestCloneSheetMultipleTimes()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ICreationHelper factory = workbook.GetCreationHelper();
            ISheet sheet = workbook.CreateSheet("Test Clone");
            IRow row = sheet.CreateRow(0);
            ICell cell = row.CreateCell(0);
            cell.SetCellValue(factory.CreateRichTextString("Clone_test"));
            //Clone the sheet multiple times
            workbook.CloneSheet(0);
            workbook.CloneSheet(0);

            Assert.IsNotNull(workbook.GetSheet("Test Clone"));
            Assert.IsNotNull(workbook.GetSheet("Test Clone (2)"));
            Assert.AreEqual("Test Clone (3)", workbook.GetSheetName(2));
            Assert.IsNotNull(workbook.GetSheet("Test Clone (3)"));

            workbook.RemoveSheetAt(0);
            workbook.RemoveSheetAt(0);
            workbook.RemoveSheetAt(0);
            workbook.CreateSheet("abc ( 123)");
            workbook.CloneSheet(0);
            Assert.AreEqual("abc (124)", workbook.GetSheetName(1));
        }

        /**
         * Setting landscape and portrait stuff on new sheets
         */
        [Test]
        public void TestPrintSetupLandscapeNew()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheetL = workbook.CreateSheet("LandscapeS");
            ISheet sheetP = workbook.CreateSheet("LandscapeP");

            // Check two aspects of the print Setup
            Assert.IsFalse(sheetL.PrintSetup.Landscape);
            Assert.IsFalse(sheetP.PrintSetup.Landscape);
            Assert.AreEqual(1, sheetL.PrintSetup.Copies);
            Assert.AreEqual(1, sheetP.PrintSetup.Copies);

            // Change one on each
            sheetL.PrintSetup.Landscape = (/*setter*/true);
            sheetP.PrintSetup.Copies = (/*setter*/(short)3);

            // Check taken
            Assert.IsTrue(sheetL.PrintSetup.Landscape);
            Assert.IsFalse(sheetP.PrintSetup.Landscape);
            Assert.AreEqual(1, sheetL.PrintSetup.Copies);
            Assert.AreEqual(3, sheetP.PrintSetup.Copies);

            // Save and re-load, and check still there
            workbook = _testDataProvider.WriteOutAndReadBack(workbook);
            sheetL = workbook.GetSheet("LandscapeS");
            sheetP = workbook.GetSheet("LandscapeP");

            Assert.IsTrue(sheetL.PrintSetup.Landscape);
            Assert.IsFalse(sheetP.PrintSetup.Landscape);
            Assert.AreEqual(1, sheetL.PrintSetup.Copies);
            Assert.AreEqual(3, sheetP.PrintSetup.Copies);
        }

        /**
         * Test Adding merged regions. If the region's bounds are outside of the allowed range
         * then an ArgumentException should be thrown
         *
         */
        [Test]
        public void TestAddMerged()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();
            Assert.AreEqual(0, sheet.NumMergedRegions);
            SpreadsheetVersion ssVersion = _testDataProvider.GetSpreadsheetVersion();

            CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
            sheet.AddMergedRegion(region);
            Assert.AreEqual(1, sheet.NumMergedRegions);

            try
            {
                region = new CellRangeAddress(-1, -1, -1, -1);
                sheet.AddMergedRegion(region);
                Assert.Fail("Expected exception");
            }
            catch (ArgumentException)
            {
                // TODO           Assert.AreEqual("Minimum row number is 0.", e.Message);
            }
            try
            {
                region = new CellRangeAddress(0, 0, 0, ssVersion.LastColumnIndex + 1);
                sheet.AddMergedRegion(region);
                Assert.Fail("Expected exception");
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual("Maximum column number is " + ssVersion.LastColumnIndex, e.Message);
            }
            try
            {
                region = new CellRangeAddress(0, ssVersion.LastRowIndex + 1, 0, 1);
                sheet.AddMergedRegion(region);
                Assert.Fail("Expected exception");
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual("Maximum row number is " + ssVersion.LastRowIndex, e.Message);
            }
            Assert.AreEqual(1, sheet.NumMergedRegions);
        }

        /**
         * When removing one merged region, it would break
         *
         */
        [Test]
        public void TestRemoveMerged()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();
            CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
            sheet.AddMergedRegion(region);
            region = new CellRangeAddress(1, 2, 0, 1);
            sheet.AddMergedRegion(region);

            sheet.RemoveMergedRegion(0);

            region = sheet.GetMergedRegion(0);
            Assert.AreEqual(1, region.FirstRow, "Left over region should be starting at row 1");

            sheet.RemoveMergedRegion(0);

            Assert.AreEqual(0, sheet.NumMergedRegions, "there should be no merged regions left!");

            //an, Add, Remove, Get(0) would null pointer
            sheet.AddMergedRegion(region);
            Assert.AreEqual(1, sheet.NumMergedRegions, "there should now be one merged region!");
            sheet.RemoveMergedRegion(0);
            Assert.AreEqual(0, sheet.NumMergedRegions, "there should now be zero merged regions!");
            //add it again!
            region.LastRow = (/*setter*/4);

            sheet.AddMergedRegion(region);
            Assert.AreEqual(1, sheet.NumMergedRegions, "there should now be one merged region!");

            //should exist now!
            Assert.IsTrue(1 <= sheet.NumMergedRegions, "there isn't more than one merged region in there");
            region = sheet.GetMergedRegion(0);
            Assert.AreEqual(4, region.LastRow, "the merged row to doesnt match the one we Put in ");
        }
        [Test]
        public void TestShiftMerged()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ICreationHelper factory = wb.GetCreationHelper();
            ISheet sheet = wb.CreateSheet();
            IRow row = sheet.CreateRow(0);
            ICell cell = row.CreateCell(0);
            cell.SetCellValue(factory.CreateRichTextString("first row, first cell"));

            row = sheet.CreateRow(1);
            cell = row.CreateCell(1);
            cell.SetCellValue(factory.CreateRichTextString("second row, second cell"));

            CellRangeAddress region = new CellRangeAddress(1, 1, 0, 1);
            sheet.AddMergedRegion(region);

            sheet.ShiftRows(1, 1, 1);

            region = sheet.GetMergedRegion(0);
            Assert.AreEqual(2, region.FirstRow, "Merged region not Moved over to row 2");
        }

        /**
         * Tests the display of gridlines, formulas, and rowcolheadings.
         * @author Shawn Laubach (slaubach at apache dot org)
         */
        [Test]
        public void TestDisplayOptions()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            Assert.AreEqual(sheet.DisplayGridlines, true);
            Assert.AreEqual(sheet.DisplayRowColHeadings, true);
            Assert.AreEqual(sheet.DisplayFormulas, false);
            Assert.AreEqual(sheet.DisplayZeros, true);

            sheet.DisplayGridlines = (/*setter*/false);
            sheet.DisplayRowColHeadings = (/*setter*/false);
            sheet.DisplayFormulas = (/*setter*/true);
            sheet.DisplayZeros = (/*setter*/false);

            wb = _testDataProvider.WriteOutAndReadBack(wb);
            sheet = wb.GetSheetAt(0);

            Assert.AreEqual(sheet.DisplayGridlines, false);
            Assert.AreEqual(sheet.DisplayRowColHeadings, false);
            Assert.AreEqual(sheet.DisplayFormulas, true);
            Assert.AreEqual(sheet.DisplayZeros, false);
        }
        [Test]
        public void TestColumnWidth()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            //default column width measured in characters
            sheet.DefaultColumnWidth = (/*setter*/10);
            Assert.AreEqual(10, sheet.DefaultColumnWidth);
            //columns A-C have default width
            Assert.AreEqual(256 * 10, sheet.GetColumnWidth(0));
            Assert.AreEqual(256 * 10, sheet.GetColumnWidth(1));
            Assert.AreEqual(256 * 10, sheet.GetColumnWidth(2));

            //set custom width for D-F
            for (char i = 'D'; i <= 'F'; i++)
            {
                //Sheet#setColumnWidth accepts the width in units of 1/256th of a character width
                int w = 256 * 12;
                sheet.SetColumnWidth(/*setter*/i, w);
                Assert.AreEqual(w, sheet.GetColumnWidth(i));
            }
            //reset the default column width, columns A-C Change, D-F still have custom width
            sheet.DefaultColumnWidth = (/*setter*/20);
            Assert.AreEqual(20, sheet.DefaultColumnWidth);
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(0));
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(1));
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(2));
            for (char i = 'D'; i <= 'F'; i++)
            {
                int w = 256 * 12;
                Assert.AreEqual(w, sheet.GetColumnWidth(i));
            }

            // check for 16-bit signed/unsigned error:
            sheet.SetColumnWidth(/*setter*/10, 40000);
            Assert.AreEqual(40000, sheet.GetColumnWidth(10));

            //The maximum column width for an individual cell is 255 characters
            try
            {
                sheet.SetColumnWidth(/*setter*/9, 256 * 256);
                Assert.Fail("expected exception");
            }
            catch (ArgumentException e)
            {
                Assert.AreEqual("The maximum column width for an individual cell is 255 characters.", e.Message);
            }

            //serialize and read again
            wb = _testDataProvider.WriteOutAndReadBack(wb);

            sheet = wb.GetSheetAt(0);
            Assert.AreEqual(20, sheet.DefaultColumnWidth);
            //columns A-C have default width
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(0));
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(1));
            Assert.AreEqual(256 * 20, sheet.GetColumnWidth(2));
            //columns D-F have custom width
            for (char i = 'D'; i <= 'F'; i++)
            {
                short w = (256 * 12);
                Assert.AreEqual(w, sheet.GetColumnWidth(i));
            }
            Assert.AreEqual(40000, sheet.GetColumnWidth(10));
        }
        [Test]
        public void TestDefaultRowHeight()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            sheet.DefaultRowHeightInPoints = (/*setter*/15);
            Assert.AreEqual((short)300, sheet.DefaultRowHeight);
            Assert.AreEqual(15.0F, sheet.DefaultRowHeightInPoints, 0.01F);

            IRow row = sheet.CreateRow(1);
            // new row inherits  default height from the sheet
            Assert.AreEqual(sheet.DefaultRowHeight, row.Height);

            // Set a new default row height in twips and Test Getting the value in points
            sheet.DefaultRowHeight = (/*setter*/(short)360);
            Assert.AreEqual(18.0f, sheet.DefaultRowHeightInPoints, 0.01F);
            Assert.AreEqual((short)360, sheet.DefaultRowHeight);

            // Test that defaultRowHeight is a tRuncated short: E.G. 360inPoints -> 18; 361inPoints -> 18
            sheet.DefaultRowHeight = (/*setter*/(short)361);
            Assert.AreEqual((float)361 / 20, sheet.DefaultRowHeightInPoints, 0.01F);
            Assert.AreEqual((short)361, sheet.DefaultRowHeight);

            // Set a new default row height in points and Test Getting the value in twips
            sheet.DefaultRowHeightInPoints = (/*setter*/17.5f);
            Assert.AreEqual(17.5f, sheet.DefaultRowHeightInPoints, 0.01F);
            Assert.AreEqual((short)(17.5f * 20), sheet.DefaultRowHeight);
        }

        /** cell with formula becomes null on cloning a sheet*/
        [Test]
        public void Test35084()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet s = wb.CreateSheet("Sheet1");
            IRow r = s.CreateRow(0);
            r.CreateCell(0).SetCellValue(1);
            r.CreateCell(1).CellFormula = (/*setter*/"A1*2");
            ISheet s1 = wb.CloneSheet(0);
            r = s1.GetRow(0);
            Assert.AreEqual(r.GetCell(0).NumericCellValue, 1, 0, "double"); // sanity check
            Assert.IsNotNull(r.GetCell(1));
            Assert.AreEqual(r.GetCell(1).CellFormula, "A1*2", "formula");
        }

        /** Test that new default column styles Get applied */
        [Test]
        public virtual void TestDefaultColumnStyle()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ICellStyle style = wb.CreateCellStyle();
            ISheet sheet = wb.CreateSheet();
            sheet.SetDefaultColumnStyle(/*setter*/0, style);
            Assert.IsNotNull(sheet.GetColumnStyle(0));
            Assert.AreEqual(style.Index, sheet.GetColumnStyle(0).Index);

            IRow row = sheet.CreateRow(0);
            ICell cell = row.CreateCell(0);
            ICellStyle style2 = cell.CellStyle;
            Assert.IsNotNull(style2);
            Assert.AreEqual(style.Index, style2.Index, "style should match");
        }
        [Test]
        public void TestOutlineProperties()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();

            ISheet sheet = wb.CreateSheet();

            //TODO defaults are different in HSSF and XSSF
            //Assert.IsTrue(sheet.RowSumsBelow);
            //Assert.IsTrue(sheet.RowSumsRight);

            sheet.RowSumsBelow = (/*setter*/false);
            sheet.RowSumsRight = (/*setter*/false);

            Assert.IsFalse(sheet.RowSumsBelow);
            Assert.IsFalse(sheet.RowSumsRight);

            sheet.RowSumsBelow = (/*setter*/true);
            sheet.RowSumsRight = (/*setter*/true);

            Assert.IsTrue(sheet.RowSumsBelow);
            Assert.IsTrue(sheet.RowSumsRight);

            wb = _testDataProvider.WriteOutAndReadBack(wb);
            sheet = wb.GetSheetAt(0);
            Assert.IsTrue(sheet.RowSumsBelow);
            Assert.IsTrue(sheet.RowSumsRight);
        }

        /**
         * Test basic display properties
         */
        [Test]
        public void TestSheetProperties()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            Assert.IsFalse(sheet.HorizontallyCenter);
            sheet.HorizontallyCenter = (/*setter*/true);
            Assert.IsTrue(sheet.HorizontallyCenter);
            sheet.HorizontallyCenter = (/*setter*/false);
            Assert.IsFalse(sheet.HorizontallyCenter);

            Assert.IsFalse(sheet.VerticallyCenter);
            sheet.VerticallyCenter = (/*setter*/true);
            Assert.IsTrue(sheet.VerticallyCenter);
            sheet.VerticallyCenter = (/*setter*/false);
            Assert.IsFalse(sheet.VerticallyCenter);

            Assert.IsFalse(sheet.IsPrintGridlines);
            sheet.IsPrintGridlines = (/*setter*/true);
            Assert.IsTrue(sheet.IsPrintGridlines);

            Assert.IsFalse(sheet.DisplayFormulas);
            sheet.DisplayFormulas = (/*setter*/true);
            Assert.IsTrue(sheet.DisplayFormulas);

            Assert.IsTrue(sheet.DisplayGridlines);
            sheet.DisplayGridlines = (/*setter*/false);
            Assert.IsFalse(sheet.DisplayGridlines);

            //TODO: default "guts" is different in HSSF and XSSF
            //Assert.IsTrue(sheet.DisplayGuts);
            sheet.DisplayGuts = (/*setter*/false);
            Assert.IsFalse(sheet.DisplayGuts);

            Assert.IsTrue(sheet.DisplayRowColHeadings);
            sheet.DisplayRowColHeadings = (/*setter*/false);
            Assert.IsFalse(sheet.DisplayRowColHeadings);

            //TODO: default "autobreaks" is different in HSSF and XSSF
            //Assert.IsTrue(sheet.Autobreaks);
            sheet.Autobreaks = (/*setter*/false);
            Assert.IsFalse(sheet.Autobreaks);

            Assert.IsFalse(sheet.ScenarioProtect);

            //TODO: default "fit-to-page" is different in HSSF and XSSF
            //Assert.IsFalse(sheet.FitToPage);
            sheet.FitToPage = (/*setter*/true);
            Assert.IsTrue(sheet.FitToPage);
            sheet.FitToPage = (/*setter*/false);
            Assert.IsFalse(sheet.FitToPage);
        }
        public void BaseTestGetSetMargin(double[] defaultMargins)
        {
            double marginLeft = defaultMargins[0];
            double marginRight = defaultMargins[1];
            double marginTop = defaultMargins[2];
            double marginBottom = defaultMargins[3];
            double marginHeader = defaultMargins[4];
            double marginFooter = defaultMargins[5];

            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet 1");
            Assert.AreEqual(marginLeft, sheet.GetMargin(MarginType.LeftMargin), 0.0);
            sheet.SetMargin(MarginType.LeftMargin, 10.0);
            //left margin is custom, all others are default
            Assert.AreEqual(10.0, sheet.GetMargin(MarginType.LeftMargin), 0.0);
            Assert.AreEqual(marginRight, sheet.GetMargin(MarginType.RightMargin), 0.0);
            Assert.AreEqual(marginTop, sheet.GetMargin(MarginType.TopMargin), 0.0);
            Assert.AreEqual(marginBottom, sheet.GetMargin(MarginType.BottomMargin), 0.0);
            sheet.SetMargin(/*setter*/MarginType.RightMargin, 11.0);
            Assert.AreEqual(11.0, sheet.GetMargin(MarginType.RightMargin), 0.0);
            sheet.SetMargin(/*setter*/MarginType.TopMargin, 12.0);
            Assert.AreEqual(12.0, sheet.GetMargin(MarginType.TopMargin), 0.0);
            sheet.SetMargin(/*setter*/MarginType.BottomMargin, 13.0);
            Assert.AreEqual(13.0, sheet.GetMargin(MarginType.BottomMargin), 0.0);

            sheet.SetMargin(MarginType.FooterMargin, 5.6);
            Assert.AreEqual(5.6, sheet.GetMargin(MarginType.FooterMargin), 0.0);
            sheet.SetMargin(MarginType.HeaderMargin, 11.5);
            Assert.AreEqual(11.5, sheet.GetMargin(MarginType.HeaderMargin), 0.0);

            // incorrect margin constant
            try
            {
                sheet.SetMargin((MarginType)65, 15);
                Assert.Fail("Expected exception");
            }
            catch (InvalidOperationException e)
            {
                Assert.AreEqual("Unknown margin constant:  65", e.Message);
            }
        }
        [Test]
        public void TestRowBreaks()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            //Sheet#getRowBreaks() returns an empty array if no row breaks are defined
            Assert.IsNotNull(sheet.RowBreaks);
            Assert.AreEqual(0, sheet.RowBreaks.Length);

            sheet.SetRowBreak(1);
            Assert.AreEqual(1, sheet.RowBreaks.Length);
            sheet.SetRowBreak(15);
            Assert.AreEqual(2, sheet.RowBreaks.Length);
            Assert.AreEqual(1, sheet.RowBreaks[0]);
            Assert.AreEqual(15, sheet.RowBreaks[1]);
            sheet.SetRowBreak(1);
            Assert.AreEqual(2, sheet.RowBreaks.Length);
            Assert.IsTrue(sheet.IsRowBroken(1));
            Assert.IsTrue(sheet.IsRowBroken(15));

            //now remove the Created breaks
            sheet.RemoveRowBreak(1);
            Assert.AreEqual(1, sheet.RowBreaks.Length);
            sheet.RemoveRowBreak(15);
            Assert.AreEqual(0, sheet.RowBreaks.Length);

            Assert.IsFalse(sheet.IsRowBroken(1));
            Assert.IsFalse(sheet.IsRowBroken(15));
        }
        [Test]
        public void TestColumnBreaks()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            Assert.IsNotNull(sheet.ColumnBreaks);
            Assert.AreEqual(0, sheet.ColumnBreaks.Length);

            Assert.IsFalse(sheet.IsColumnBroken(0));

            sheet.SetColumnBreak(11);
            Assert.IsNotNull(sheet.ColumnBreaks);
            Assert.AreEqual(11, sheet.ColumnBreaks[0]);
            sheet.SetColumnBreak(12);
            Assert.AreEqual(2, sheet.ColumnBreaks.Length);
            Assert.IsTrue(sheet.IsColumnBroken(11));
            Assert.IsTrue(sheet.IsColumnBroken(12));

            sheet.RemoveColumnBreak((short)11);
            Assert.AreEqual(1, sheet.ColumnBreaks.Length);
            sheet.RemoveColumnBreak((short)15); //remove non-existing
            Assert.AreEqual(1, sheet.ColumnBreaks.Length);
            sheet.RemoveColumnBreak((short)12);
            Assert.AreEqual(0, sheet.ColumnBreaks.Length);

            Assert.IsFalse(sheet.IsColumnBroken(11));
            Assert.IsFalse(sheet.IsColumnBroken(12));
        }
        [Test]
        public void TestGetFirstLastRowNum()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet 1");
            sheet.CreateRow(9);
            sheet.CreateRow(0);
            sheet.CreateRow(1);
            Assert.AreEqual(0, sheet.FirstRowNum);
            Assert.AreEqual(9, sheet.LastRowNum);
        }
        [Test]
        public void TestGetFooter()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet 1");
            Assert.IsNotNull(sheet.Footer);
            sheet.Footer.Center = (/*setter*/"test center footer");
            Assert.AreEqual("test center footer", sheet.Footer.Center);
        }
        [Test]
        public void TestGetSetColumnHidden()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet 1");
            sheet.SetColumnHidden(2, true);
            Assert.IsTrue(sheet.IsColumnHidden(2));
        }
        [Test]
        public void TestProtectSheet()
        {

            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();
            Assert.IsFalse(sheet.Protect);
            sheet.ProtectSheet("Test");
            Assert.IsTrue(sheet.Protect);
            sheet.ProtectSheet(null);
            Assert.IsFalse(sheet.Protect);

        }
        [Test]
        public void TestCreateFreezePane()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            // create a workbook
            ISheet sheet = wb.CreateSheet();
            Assert.IsNull(sheet.PaneInformation);
            sheet.CreateFreezePane(0, 0);
            // still null
            Assert.IsNull(sheet.PaneInformation);

            sheet.CreateFreezePane(2, 3);

            PaneInformation info = sheet.PaneInformation;

            Assert.AreEqual(PaneInformation.PANE_LOWER_RIGHT, info.ActivePane);
            Assert.AreEqual(3, info.HorizontalSplitPosition);
            Assert.AreEqual(3, info.HorizontalSplitTopRow);
            Assert.AreEqual(2, info.VerticalSplitLeftColumn);
            Assert.AreEqual(2, info.VerticalSplitPosition);

            sheet.CreateFreezePane(0, 0);
            // If both colSplit and rowSplit are zero then the existing freeze pane is Removed
            Assert.IsNull(sheet.PaneInformation);

            sheet.CreateFreezePane(0, 3);

            info = sheet.PaneInformation;

            Assert.AreEqual(PaneInformation.PANE_LOWER_LEFT, info.ActivePane);
            Assert.AreEqual(3, info.HorizontalSplitPosition);
            Assert.AreEqual(3, info.HorizontalSplitTopRow);
            Assert.AreEqual(0, info.VerticalSplitLeftColumn);
            Assert.AreEqual(0, info.VerticalSplitPosition);

            sheet.CreateFreezePane(3, 0);

            info = sheet.PaneInformation;

            Assert.AreEqual(PaneInformation.PANE_UPPER_RIGHT, info.ActivePane);
            Assert.AreEqual(0, info.HorizontalSplitPosition);
            Assert.AreEqual(0, info.HorizontalSplitTopRow);
            Assert.AreEqual(3, info.VerticalSplitLeftColumn);
            Assert.AreEqual(3, info.VerticalSplitPosition);

            sheet.CreateFreezePane(0, 0);
            // If both colSplit and rowSplit are zero then the existing freeze pane is Removed
            Assert.IsNull(sheet.PaneInformation);
        }
        [Test]
        public void TestGetRepeatingRowsAndColumns()
        {
            IWorkbook wb = _testDataProvider.OpenSampleWorkbook(
                "RepeatingRowsCols."
                + _testDataProvider.StandardFileNameExtension);

            CheckRepeatingRowsAndColumns(wb.GetSheetAt(0), null, null);
            CheckRepeatingRowsAndColumns(wb.GetSheetAt(1), "1:1", null);
            CheckRepeatingRowsAndColumns(wb.GetSheetAt(2), null, "A:A");
            CheckRepeatingRowsAndColumns(wb.GetSheetAt(3), "2:3", "A:B");
        }

        [Test]
        public void TestSetRepeatingRowsAndColumnsBug47294()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet1 = wb.CreateSheet();
            sheet1.RepeatingRows = (CellRangeAddress.ValueOf("1:4"));
            Assert.AreEqual("1:4", sheet1.RepeatingRows.FormatAsString());

            //must handle sheets with quotas, see Bugzilla #47294
            ISheet sheet2 = wb.CreateSheet("My' Sheet");
            sheet2.RepeatingRows = (CellRangeAddress.ValueOf("1:4"));
            Assert.AreEqual("1:4", sheet2.RepeatingRows.FormatAsString());
        }
        [Test]
        public void TestSetRepeatingRowsAndColumns()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet1 = wb.CreateSheet("Sheet1");
            ISheet sheet2 = wb.CreateSheet("Sheet2");
            ISheet sheet3 = wb.CreateSheet("Sheet3");

            CheckRepeatingRowsAndColumns(sheet1, null, null);

            sheet1.RepeatingRows = (CellRangeAddress.ValueOf("4:5"));
            sheet2.RepeatingColumns = (CellRangeAddress.ValueOf("A:C"));
            sheet3.RepeatingRows = (CellRangeAddress.ValueOf("1:4"));
            sheet3.RepeatingColumns = (CellRangeAddress.ValueOf("A:A"));

            CheckRepeatingRowsAndColumns(sheet1, "4:5", null);
            CheckRepeatingRowsAndColumns(sheet2, null, "A:C");
            CheckRepeatingRowsAndColumns(sheet3, "1:4", "A:A");

            // write out, read back, and test refrain...
            wb = _testDataProvider.WriteOutAndReadBack(wb);
            sheet1 = wb.GetSheetAt(0);
            sheet2 = wb.GetSheetAt(1);
            sheet3 = wb.GetSheetAt(2);

            CheckRepeatingRowsAndColumns(sheet1, "4:5", null);
            CheckRepeatingRowsAndColumns(sheet2, null, "A:C");
            CheckRepeatingRowsAndColumns(sheet3, "1:4", "A:A");

            // check removing repeating rows and columns
            sheet3.RepeatingRows = (null);
            CheckRepeatingRowsAndColumns(sheet3, null, "A:A");

            sheet3.RepeatingColumns = (null);
            CheckRepeatingRowsAndColumns(sheet3, null, null);
        }

        private void CheckRepeatingRowsAndColumns(
            ISheet s, String expectedRows, String expectedCols)
        {
            if (expectedRows == null)
            {
                Assert.IsNull(s.RepeatingRows);
            }
            else
            {
                Assert.AreEqual(expectedRows, s.RepeatingRows.FormatAsString());
            }
            if (expectedCols == null)
            {
                Assert.IsNull(s.RepeatingColumns);
            }
            else
            {
                Assert.AreEqual(expectedCols, s.RepeatingColumns.FormatAsString());
            }
        }
        [Test]
        public void TestBaseZoom()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            // here we can only verify that setting some zoom values works, range-checking is different between the implementations
            sheet.SetZoom(3, 4);
        }

        [Test]
        public void TestBaseShowInPane()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();
            sheet.ShowInPane(2, 3);
        }

        [Test]
        public void TestBug55723()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            CellRangeAddress range = CellRangeAddress.ValueOf("A:B");
            IAutoFilter filter = sheet.SetAutoFilter(range);
            Assert.IsNotNull(filter);
            // there seems to be currently no generic way to check the Setting...

            range = CellRangeAddress.ValueOf("B:C");
            filter = sheet.SetAutoFilter(range);
            Assert.IsNotNull(filter);
            // there seems to be currently no generic way to check the Setting...
        }

        [Test]
        public void TestBug55723_Rows()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            CellRangeAddress range = CellRangeAddress.ValueOf("A4:B55000");
            IAutoFilter filter = sheet.SetAutoFilter(range);
            Assert.IsNotNull(filter);

            wb.Close();
        }

        [Test]
        public void TestBug55723d_RowsOver65k()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            CellRangeAddress range = CellRangeAddress.ValueOf("A4:B75000");
            IAutoFilter filter = sheet.SetAutoFilter(range);
            Assert.IsNotNull(filter);

            wb.Close();
        }

        /**
     * XSSFSheet autoSizeColumn() on empty RichTextString fails
     * @
     */
        [Test]
        public void Bug48325()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet("Test");
            ICreationHelper factory = wb.GetCreationHelper();

            IRow row = sheet.CreateRow(0);
            ICell cell = row.CreateCell(0);

            IFont font = wb.CreateFont();
            IRichTextString rts = factory.CreateRichTextString("");
            rts.ApplyFont(font);
            cell.SetCellValue(rts);

            sheet.AutoSizeColumn(0);

            Assert.IsNotNull(_testDataProvider.WriteOutAndReadBack(wb));

            wb.Close();
        }

        [Test]
        public void GetCellComment()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            IDrawing dg = sheet.CreateDrawingPatriarch();
            IComment comment = dg.CreateCellComment(workbook.GetCreationHelper().CreateClientAnchor());
            ICell cell = sheet.CreateRow(9).CreateCell(2);
            comment.Author = (/*setter*/"test C10 author");
            cell.CellComment = (/*setter*/comment);

            Assert.IsNotNull(sheet.GetCellComment(9, 2));
            Assert.AreEqual("test C10 author", sheet.GetCellComment(9, 2).Author);

            Assert.IsNotNull(_testDataProvider.WriteOutAndReadBack(workbook));

            workbook.Close();
        }

        [Test]
        public void newMergedRegionAt()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet();
            CellRangeAddress region = CellRangeAddress.ValueOf("B2:D4");
            sheet.AddMergedRegion(region);
            Assert.AreEqual("B2:D4", sheet.GetMergedRegion(0).FormatAsString());
            Assert.AreEqual(1, sheet.NumMergedRegions);

            Assert.IsNotNull(_testDataProvider.WriteOutAndReadBack(workbook));

            workbook.Close();
        }

        [Test]
        public void ShowInPaneManyRowsBug55248()
        {
            IWorkbook workbook = _testDataProvider.CreateWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet 1");

            sheet.ShowInPane(0, 0);
            int i;
            for (i = ROW_COUNT / 2; i < ROW_COUNT; i++)
            {
                sheet.CreateRow(i);
                sheet.ShowInPane(i, 0);
                // this one fails: sheet.ShowInPane((short)i, 0);
            }

            i = 0;
            sheet.ShowInPane(i, i);

            IWorkbook wb = _testDataProvider.WriteOutAndReadBack(workbook);
            CheckRowCount(wb);
        }

        private void CheckRowCount(IWorkbook wb)
        {
            Assert.IsNotNull(wb);
            ISheet sh = wb.GetSheet("Sheet 1");
            Assert.IsNotNull(sh);
            Assert.AreEqual(ROW_COUNT - 1, sh.LastRowNum);
        }

        [Test]
        public void TestRightToLeft()
        {
            IWorkbook wb = _testDataProvider.CreateWorkbook();
            ISheet sheet = wb.CreateSheet();

            Assert.IsFalse(sheet.IsRightToLeft);
            sheet.IsRightToLeft = (/*setter*/true);
            Assert.IsTrue(sheet.IsRightToLeft);
            sheet.IsRightToLeft = (/*setter*/false);
            Assert.IsFalse(sheet.IsRightToLeft);

            wb.Close();
        }

    }

}

redpajama_set_name: RedPajamaGithub


text:
Home·People·Dr Albert Godetzky
Dr Albert Godetzky
Associate Lecturer
Albert Godetzky's research concentrates on Northern European art of the early modern period. He received his PhD from the Courtauld with a thesis on the political dimensions of the works of Hendrick Goltzius and Cornelis van Haarlem in light of the Dutch Revolt, positioning their depictions of the human body within a moment of unprecedented social change. As Associate Lecturer at the Courtauld and Visiting Lecturer at the Victoria & Albert Museum, he teaches on topics related to sixteenth- through eighteenth-century art, including portraiture in Northern Europe, cultural legacies of the Reformation, imperialism and its sites of global exchange.
Through research, publications and lectures, Albert's interests broach a variety of topics including Kunst- and Wunderkammern, depictions of the animal, the corporeal fragment, and, recently, musical instruments and the politics of musical performance in the early modern period. Moving beyond the temporal framework of his specialism, Albert frequently hosts dialogues on art historical topics with contemporary artists.
Before joining the Courtauld, Albert was the Harry M. Weinrebe Curatorial Fellow at the National Gallery, London, where he contributed to exhibitions including Rembrandt: The Late Works and Vermeer and Music: The Art of Love and Leisure. He gained further curatorial experience with works on paper at the Courtauld Gallery's collection of Prints and Drawings. Albert also works as a cultural advisor to several international corporate institutions and private individuals, drawing on his experience in the field and using education to widen understanding of and participation in the study of art history.
Ph.D, The Courtauld Institute of Art, London, 2020 (Supervised by Professor Joanna Woodall)
MA, Institute of Art History, Jagiellonian University, Krakow, 2012
History of Art Research Scholarship, École pratique des hautes études, (Sorbonne IV), Paris, 2011-2012
BA, Department of Art History, New York University, New York, 2007
Northern European Art, 1400-1800
Early Modern ideas of nature
Rudolfine art, patronage and cultural exchanges with the Netherlands
'Mannerism'
History of collecting
The body; fragmentation
Book review: Marisa Bass, Insect Artifice: Nature and Art in the Dutch Revolt (Princeton, 2019) in The Burlington Magazine March 2020:162, pp. 260-61.
Catalogue contributions: The National Gallery Catalogue of 18th-century French Paintings by Humphrey Wine (National Gallery, London, 2018).
Article: "Jean Etienne Liotard and seventeenth-century Dutch Painting," The Burlington Magazine February 2017:159, pp. 117-21.
Article: "Countenances of the Deepest Attentiveness: The Historical Reputation of Jan van Scorel's Portraits," in R. Woodfield and M. Grzeda (eds.), "Reconsidering the Origins of Portraiture." Journal of Art Historiography, No. 17 (2017).
Book review: Marisa Bass, Jan Gossart and the Invention of Netherlandish Antiquity, (Princeton, 2016) in Art History May 2017:40 no. 3, pp. 675-76.
Exhibition and catalogue review: Sally Metzler, Bartholomeus Spranger: Splendor and Eroticism in Imperial Prague (2014), in The Burlington Magazine March 2015:157, pp. 216-17.
Book review: Christopher D.M. Atkins, The Signature Style of Frans Hals: Painting, Subjectivity, and the Market in Early Modernity (2011), in The Burlington Magazine February, 2014:156, p. 115.

redpajama_set_name: RedPajamaCommonCrawl


Kitchen. Kitchen Design Colors Ideas. Published on February 27th, 2018 by Lance.
Look for you Kitchen? Kitchen Design Colors Ideas will inspire you on how to set up and also got the idea to make it look more attractive. At kitchen design colors ideas there are some ideas that can help Kitchen as some of other picture ideas.
Marked with kitchen design diagram, kitchen design education or kitchen design for 2018, this Kitchen Design Colors Ideas together with 20 best quality photos, Such as arrangement, colors, and ideas.. Please view all 20 best photos that you do not lose information by clicking the image below.


The SQL 2014 Developer P2: VS 2012 and Data Types course is the second course in the three course series on SQL Server 2014. This series of courses is a comprehensive series covering all the intermediate to advanced level topics of SQL Server 2014. The topics covered in part 2 of this series are related to the Visual Studio 2012 and focuses on the data types available in SQL Server 2014. The course covers the related sub-topics in a great detail and enables the students to implement the gained knowledge in their everyday tasks. The SQL 2014 Developer P2: VS 2012 and Data Types course covers the fundamental topics necessary to build, manage, and maintain databases in SQL Server 2014. The course enables the students to efficiently perform the management tasks on their databases and learn the new and advanced features available in SQL Server 2014. The course series comprises of three courses which combine to give a complete and comprehensive knowledge base to the students working with SQL Server 2014.


text:
Why Isn't the FLSA Minimum Wage Really $33 Per Hour?
By John E. Thompson March 26, 2013 July 22, 2015
By John E. Thompson
U.S. Sen. Elizabeth Warren, D-MA, recently asked during a Senate committee hearing why the federal Fair Labor Standards Act's $7.25-per-hour minimum wage has not already increased over time to the level of $22 an hour.
A professor appearing at the hearing opined that a case could be made for a current rate of $33 an hour.
So why isn't the FLSA minimum wage more than 450 percent higher than it is today?
Maybe the more relevant points to ponder in evaluating this are why President Obama proposed an increase to only $9.00 per hour, and, why those who criticized this as being too low are seeking to raise the minimum wage only to $10.10 per hour – and even then to do so in three steps, instead of immediately (links to House and Senate bills are here and here)?
Not explained by the poverty rationale
President Obama's stated reason for an increase, echoed in one form or another by many others, is that no one who works full-time should have to live in poverty. But the 2013 federal poverty threshold for an individual is a little less than $11,500 annually, which would be achieved by working 40 hours a week at a wage rate of approximately $5.53 per hour, or about 24 percent less than today's FLSA minimum wage.
By contrast, the current poverty level for a family of four is set at a bit more than $23,500. A $10.10 minimum wage (which under current proposals would not even be reached until 2015) would produce about $2,500 less than that – only around $21,000 annually at 40 hours per week.
And the Economic Policy Institute projects that over 47 percent of the workers who would be affected by a rise to $10.10 per hour already have annual family incomes of $40,000 or more – a range that starts at 170 percent of the family-of-four poverty threshold. EPI estimates that 30 percent of those family incomes fall into the range of $60,000 or more, with nearly 21 percent at $75,000 or more.
Whatever else one thinks about the proposed minimum-wage rates, they have no readily-apparent connection to poverty considerations.
The more likely explanation
Those who take the view that a jump in the minimum wage is ill-advised in the current economic climate do so for a variety of reasons, foremost among them being the prospects that such action will curtail future hiring and will increase already-high unemployment levels.
Many critics of these concerns allow no room even for honest, good-faith, reasonable disagreement on the matter. The U.S. Department of Labor has been so bold as to impugn opponents' veracity and/or intellectual rigor in e-newsletters labeling their concerns as being "myths" that are "false."
Nevertheless, the far-more-likely explanation for why the FLSA minimum wage is not already much higher than $7.25, and why even most of those who propose to increase it do not advocate doubling or tripling it and doing so right away, is the awareness that in fact opponents' concerns cannot be summarily dismissed as "myths" or as being "false."
These concerns must be especially troubling today, when indications are that employers are already contemplating reductions in their workforces and in their employees' hours worked for other reasons. Perhaps the unstated for-the-greater-good aim is to fine-tune an increase in the minimum wage to a supposedly "acceptable" level and kind of reduced and forgone employment.
This was originally published on Fisher & Phillips' Wage and Hour Laws blog.
John E. Thompson
John Thompson is a partner in the Atlanta office of the law firm Fisher & Phillips. His practice focuses on wage and hour law, assisting employers in preventive efforts designed to ensure compliance, and he handles both investigations conducted by government agencies and litigation in the wage and hour area. John has served as a Special Assistant Attorney General for wage-hour matters for the State of Georgia. Contact him at jthompson@laborlawyers.com.
Compensation & BenefitsHR ManagementHR NewsHR TrendsOrganizational LeadershipWages, Pay, & SalaryHR Basics


text:
Q: MVC, collection owner in the model or the controller ?  This questions is conceptual, around the MVC pattern in OOP. Here is the plot: We are in an rich client application which works with a REST webservice. We do a GET request to a ressource on the server, the server return a response formatted in XML. The response look like an RSS feed.
The client application need to parse and display this XML into a readable mod.
I've made a model object, which basically reflect a server database table, I also have a parser and a view controller (and obviously a view).
Here is how it works today.
The view controller tell the parser to start parsing, the parser (SAX type) read the XML, and instantiate a model object and load detail in it properties. Each time the parser is done with an item it notify the view controller troughs delegate method. It send the parsed item (the type is the model object) to the view controller. THe view controller add this item into a collection .
When the parser finished parsing the XML, it notify the view controller, then the view controller read each item if the collection and build the view.
Here are my questions.

*

*Is this a good implementation ?

*I think that the collection owner should be the model directly, so
the view controller ask the model to start parsing, the parser
notify the model instead of the view controller, and finally the model send back the collection to the view controller. Is this better ?

*Should I merge the model and the parser ?

A: Here are some points about your question:

*

*MVC comes in variations. There is no strict rule as to whether the Model or Controller should notify the view about the state change, or an event. It all depends on specifics of application.

*Communication between Parser and View, the way you described it first, is probably not the right way to do it. It is better that the view gets a populated collection, instead of communicating back and forth with the Parser to build it. This is not the job of the View. And also, to spread a single function (like building the collection) across multiple components is not a good practice.

*Whether to include the Parsing in the model, or have a separate component, a Parser? I suggest you think of the Model in isolation from other parts of the application (for example that the view needs to display it etc). In that isolation, see if parsing is something that naturally belongs to the Model. If so, then include it in the model. Else, make it a separate component. My guess is that it does not belong to the Model and should be a separate component.

A: A model generally does not create itself. The controller calls a repository which returns one or more objects from the model. You could read some more about the repository pattern.

redpajama_set_name: RedPajamaStackExchange


text:
Thurman Made a Statement, but What Now for the Champ?
By Harry Hogg
Keith Thurman (28-0)claimed a split decision victory over Danny Garcia (33-1) in New York on Saturday night to unify the WBA (super) and WBC welterweight titles. The victoryin front a record crowd at the Barclays center consolidates Thurman's position as the number one fighter in the 147lbs division.
Thurman's display was well worth the victory, his incredible movement and eye catching punch power was there for all to see. In the end he was far too classy fora pretty ordinary Garcia, who seemed to lack any real ideas as to how to deal with Thurman.
Thurman's performance was not without its flaws however. Seemingly cruising towards victory, Thurman faded late on giving Garcia the last few rounds. In the end this almost cost Thurman on the cards. He was in control for the majority of the fight and should have claimed the win unanimously. But his reluctance to engage late on and tendency to play safe almost backfired on the unbeaten American.
Never the less there is no denying he was the better fighter and deserved to be the first unifiedwelterweight champion since Floyd Mayweather in 2015. He was smart and picked his shots well, combined with some impressive footwork and movement, he was difficult to pin down for a largely inactive Garcia. The Philadelphiaman was resilient and kept coming forward, but very rarely troubledThurman.
Thurman is now the number 1 fighter at 147, and is the man to beat. And while Garcia expressed his desire for a rematch, it is difficult to see this one happening again. The fight started well enough but never really kicked into gear, with Garcia leaving himself far too much to do in the later rounds.
But the American will surely be keeping a close eye on events in London in May, when Kell Brook defends his IBF belt against the dangerous Errol Spence Jr.The prospect of a second unification fight in a year would prove tempting for Thurman should he face the winner.
Or he could turn to the WBO champion in Filipino Legend Manny Pacquiao, whose April 23rd bout against Amir Khan is still without a venue.
Before any thoughts of another unification however, Lamont Peterson is likely to be announced as the next mandatory challenger for Thurman. Peterson, who picked up the WBA (regular) belt recently by beating David Avanesyan, would prove a tricky test for the new unified king.
The possibility of Thurman moving up to 154 would not be out of the question either. The champ looked bigger and stronger in comparison to Garcia on Saturday, and it would seem like he would have little trouble making the 154 limit. If he chooses to do so, a huge fight against Saúl Canelo Álvarez or Erislandy Laracould present itself.
Whatever Thurman decides do, he has put himself in a position of power and there are endless options open to him. He is the number one in the division and the route to welterweight supremacy will go through him.


text:
Una jacquerie és el terme francès que designa dins la història de França les rebel·lions camperoles que es van fer a França durant l'edat mitjana, l'Antic Règim i durant la Revolució francesa.

El terme prové de la Grande Jacquerie del 1358. La crònica que en va fer el cronista medieval Jean Froissart anomenava als camperols "Jacques Bonhomme" (Jacques Gentilhome, en català) probablement per la jaqueta que acostumaven a portar, la "jaque". De la mateixa manera, els nobles denominaven de forma desdenyosa amb el "Jacques" els serfs i els camperols que treballaben les terres.

Es consideren jacqueries:

 La Grande Jacquerie del 1358
 Jacqueries del segle XVI
 Jacqueries sota Lluís XIII
 Jacqueries sota Lluís XIV

Referències
 Porchnev, Boris, Les soulèvements populaires en France au XVIIe siècle, Flammarion, París, 1972

Història de França
Revoltes pageses

redpajama_set_name: RedPajamaWikipedia


Here's news of a great kids' event coming up soon for those of you in the UK who are interested in science and technology – that's pretty much everybody, right?
And the good news is – it's all completely free to attend.
The Big Bang UK Young Scientists & Engineers Fair, the largest celebration of science, technology, engineering and maths (STEM) for young people in the UK will be held at the NEC Birmingham, on the 16th to the 19th of March 2016.
The Big Bang Fair is an award-winning combination of exciting theatre shows, over 150 interactive workshops and exhibits, as well as careers information from STEM professionals.
The annual event is designed to inspire young people to consider a career in science, technology, engineering and maths (STEM).
The fair is aimed primarily at 11-14 year old children, their teachers and parents. Saturday 19th March is the day for the public and families to attend. For the first time, the Saturday of the Big Bang Fair will have a special focus on the many exciting careers in engineering and science that are out there for young people.
The Fair offers experiences in virtual reality, medicine, marine biology, film and TV, space exploration, explosive chemistry, crime-solving, robots, computer coding, microscopic bugs, giant trucks and more.
Sounds like a fun day out, doesn't it?
STEM employers will also be in attendance to show how these exciting experiences can be part of a whole range of real world job opportunities.
Will you be going along to this event? Is there anything like this happening where you live? Leave a comment below.
We think it was an amazing experience for young children to help them with their future and understanding of science! We realy wish we were there because of your descriptive explination of the event. By the pictures shown, we can see the smiles on everyones faces and that proves what an amazing day it was. Not only did it give the children an educational oppertunity, but a fun one to! Thankyou for sharing we realy enjoyed your story!


Smeg and Dolce & Gabbana: how important is the look of a product?
The way something looks doesn't influence the test scores, but how important is the appearance to you when it comes to buying a product?
The Italian appliance manufacturer Smeg has announced that it is collaborating with the iconic Italian fashion brand Dolce & Gabbana to produce a range of small kitchen appliances.
But is the look of a product enough to persuade you to buy it?
The wild and vibrant Dolce & Gabbana prints and motifs have been designed for Smeg's 50's Retro Style range. The flair added by Dolce & Gabbana to these already fairly stylish products results in a beguiling collection of appliances that would be sure to brighten any kitchen.
We've tested most of the Smeg 50's Retro Style range, including the KLF01 kettle and the TSF01 toaster. Some of the Smeg small kitchen appliances do well in our testing (the top scoring appliance earned a 77%, making it a Best Buy in its category). While some of the range performs less well at their primary function than their competitors (our lowest scoring Smeg appliance in this range has a test score of 50%).
But if you're like me, you might sometimes choose form over function despite the knowledge that you might be paying more for a product that doesn't work as well. For those of you interested in these products, they're expected to be on sale by the end of the year.
If a product features a new, impressive technology you may be swayed into buying the product because of the novelty it offers.
Dyson introduced its pioneering bladeless technology into a range of products and appliances. They offer heaters, fans, air purifiers and even a hairdryer that have no moving parts.
However, you pay a premium for a Dyson bladeless product as they're generally more expensive than their rivals. The Dyson Supersonic hair dryer, for example, is about £300, which is 11 times more expensive than one of our Best Buys.
There can be many reasons that you might choose to ignore sense and buy something based on looks.
It may be that you're trying to match your appliances to the overall look of a room. You might be interested in a new technology (for example Dyson's bladeless technology). Or, as is the case with me and the Smeg/Dolce & Gabbana range, you might simply be charmed by the look of the product.
Is style important to you when buying a product?
So tell us, do you ever opt to buy a product based on its looks?
I think it is more important to buy products that work well and will last a long time.
Although it depends on the product, looks and durability can be equally important.
Needing a new kettle recently, it took several trips to the shops to find what I wanted. The first thing to strike you about kettles, is how ugly most of them look. Living in a hard water area, means kettles have a relatively short life-span, so not worth spending mega-money on them, then you also consider their size then any plastic inside that is probably what is behind smelly kettles, and there is very little to choose from. As a kettle gets used several times a day, and it is permanently on show, you have to like how it looks, so yes, looks are important in this case.
I love the looks of these new Smeg/Dolce & Gabbana products. I have a cupboard full of small appliances that once looked new but now have an aged dirty cream look. Trouble is, they still work so I cannot justify replacing them. What would I rather use, my old aged cream food processor or one of these bright colourful ones?
This is annoying – who are those people who by for Bling ?? who have zero practical sense and are heavily influenced by TV adverts . I despair that the British public have been "downgraded " so much into automatons – buy our glossy product , soon people will be bred for big business who react to every advert , every body telling them to buy-buy- buy . Is there anybody left in this country who is practical/ down to earth / apart from bankers , of course . Are we now just Americans but not in name yet ? Removing the "industrial mindset " of Britain which made this country an Empire has a lot to answer for.
The Brits have brains duncan – at least the vast majority – so marketing armaggedon is unlikely to happen in my humble opinion.
I put utility before style. My cars are testimony to that, as my family remind me – practical and sensible over looks. Having chosen a car I then did look at the styling options, partly for my benefit but also with an eye on the practicality of resale appeal. I look at some of the revolting styling of some models (in my eyes) and wonder why on earth some are attracted by muscular bodywork with exaggerated plastic bulges. The fact is others have different priorities and probably have a less serious approach to life than me – and perhaps more disposable cash.
However, if I am buying a present for someone I would pay greater attention to style as well as function and alter the compromise a little between function, durability and looks and these appliances have the sort of fun look that might appeal.
I regard Dyson products as heavily overpriced, as witness by the personal wealth accumulated, and see no point at spending £300 on a hair drier that does little more – if anything – than a regular model, whether for me or anyone else.
Malcolm said: The Brits have brains duncan – at least the vast majority. Nice to see an optimist around.
Now that would be a meaty subject. The strength of mega-corporations over society has increased dramatically in the last decade and governments are slowly becoming aware of the need for control.
Arguably consumers would be better served by consumer bodies being more involved in this arena rather than the relative importance of design.
However on Manette's Conversation article.
The 77% score is for a Best Buy toaster. There are several brands that score better but perhaps significantly the reviews from subscribers give it a one star as the wires burnt out. Another case of short-term testing being shown up.
As it has seven SMEG toasters [different colours] in the top 39 Best Buys one would have to read all seven to see all the comments. A rather foolish way of displaying subscriber reviews as the colour is immaterial to the failed functionality. One wonders how Which? do not have words with the testing company and also review the Best Buy tag. Of three reviews three one star scores – but given the number they experienced faults with – eight – you might think a fairly useful sample.
I have been a critic of Which? toaster testing as it is flawed, and invariably never mentions toasters were you have replacement parts available.
We prefer simpler styling on domestic appliances, mostly in the Northern European and Scandinavian taste, so would probably not select the models pictured. The actual designs [shapes, functionality] look good, however, especially the kettle, so if they are available in plain colours we would probably consider them if a replacement for our existing apparatus was required [subject to price]. The mixer reminded me of those coloured patterned wellies that some people wear so it would probably appeal to them, and you only have to look inside any 'homemaking' magazine to see the desire of people to follow the latest trend and to show off their statement equipment. If we had a Romany caravan or a traditional canal barge wired into the mains I think these pieces would be ideal. I think they will also find favour in the Asian market where colour and floral patterns are popular.
in household items eg washing machine to toaster function comes first ie does it do the work it says it will and to the level it says it will. design then takes over and the item should be easy and simple to use.
Years ago I was given a set of six rather jolly canalware mugs, hand painted with stylised roses. I now have four of them and two plain blue ones that had accidentally been put in the dishwasher. 🙁 I'm not sure that I could cope with something as large as a coffee-maker or food processor that were gaily painted.
What concerns me more is the name 'Smeg'. The nickname for Mycobacterium smegmatis is 'smeg'. It is related to those bacteria that cause TB and leprosy, and is found in genital secretions. Sometimes it is best not to know about science.
Your second para says why we have never considered Smeg appliances when things called Neff or Bosch are available. Many product names evolved from their inventor's or manufacturer's, so is (was) there a Mr Smeg?
SMEG was founded by Vittorio Bertazzoni from Guastalla, a town near Reggio Emilia in northern Italy, and is today one of the world's leading home appliance manufacturers. The Bertazzoni family's entrepreneurial history began way back in the 19th century. Starting out as blacksmiths, the Bertazzonis soon branched out into metal enamelling. The very first Bertazzoni cookers were put on show at the World Expo held in Milan in 1906.In 1948, in an era of economic growth and rapid urbanisation, Smeg was established as an enamelling plant working with metals. Today, the acronym of Smeg (Smalterie Metallurgiche Emiliane Guastalla) continues to serve as a memory of the initial activity carried out by the company.
Perhaps the livery of the new Smeg products is proper enamel, as befits their heritage.
Thank you for that background information, Wavechange.
The outer surface of SMEG products always looks good quality; whether it is vitreous enamel I don't know – modern three-pack paint treatments have been developed to give a surface coating that will last as long as the likely life-cycle of the appliance.
I tend to think the best refrigerators and air conditioners are more likely to come from hot countries.
The look of the product is very important to me, but it's functionality and durability is also very important too.
I would love to find out how thorough Which? tests are, and hopefully be reassured, as I have been when further information has been forthcoming on Which? Conversation.
It would not be difficult to publish detailed specifications for current tests carried out on household products. Most people might not be interested but a sizeable minority of Which? subscribers would be. I can see why some aspects of the work of Which? are not disclosed, but I can see no valid reason for not publishing full details of how washing machines etc. are tested.
Hopefully you can get some more of the detail you are looking for there.
Hi Manette – Thank you for your comments.
I'm familiar with the information provided about tests including the one about washing machines, and that's both helpful and at a level that will be comprehensible to all users. What I am looking for is more detail in tests of individual products.
Which? has reported that modern washing machines often wash at temperatures well below the temperature settings shown on the machine. That does not seem to have been followed up in reports on individual machines. It might not affect the washing performance but low temperature washing can mean very long cycles and accumulation of a slime containing bacteria on the inside of the machine.
Which? has reported that many washing machines contain integrated assemblies such as sealed tanks and sealed doors. Bearing failure on a machine with a sealed tank is unlikely to be economically repairable and a sealed door will require replacement of the whole door if anything goes wrong. Some of the 'regulars' on Which? Convo would love to have some assessment of repairability of washing machines and other appliances.
I'm not sure if Which? reports which machines are hot & cold fill, which is useful information to those who have solar water heating, even if it is not important for the rest of us.
I bought a washing machine that has an option to use extra water, but this option is only on some programmes. Had I known, I might have looked for a different model.
For washing coloured fabrics I use gel capsules containing a pre-measured amount of laundry detergent. Sometimes they quickly get trapped in the door seal and continue to release detergent during rinses, so that I need to put the machine on again. It does not happen every time but it is annoying when it does.
I'll bet that the Which? tests collect a great deal of information that we never get to see, but perhaps it could be put on the website for those who are looking for more detail.
The point about dual-fill is well-made as with 391 washing machines listed there is no filter to find the dual-fill models of Which I suspect there are only 20. Seems faintly insulting you can have a filter for pink machines but not one for a more practical use.
I did recommend strongly to Which? testing team at the last AGM this needed to be fixed. It is interesting to see that after six months a green electricity saving item has not been added. And before anyone quibbles about solar heated water and electricity saving I suggest you read a Miele manual which provides the figures.
Which? has no complaints procedure. In the last century it was suggested there should be a Members' Ombudsman .
Why do Which? not report on the accuracy of the claimed temperature? The German testing body have found machines that are over 30% off from claimed washing temperatures. For people where hygienic cleanliness is far more important than optical cleanliness where can this information be obtained other than through a consumer body. And this consumer body measures but does not report it !!??!
Hot & cold fill machines may not use hot water on lower temperature programmes. My very old machine only took in cold water on a 40°C wash and took in both hot and cold water on a 60°C wash. I don't know about modern computer-controlled machines but it's certainly something worth investigating if you do have free hot water. Details of how individual machines handle hot water could be provided in supplementary information on the Which? website.
I wish Which? would push manufacturers to stop using temperature settings in washing machine instructions and control panels unless they represent temperatures achieved.
In view of the confusing information from manufacturers, it's worth having frequent guidances, especially as low temperature washing is becoming increasingly common and some fabrics will not withstand higher temperatures. Low temperature washing is OK for most purposes most of the time provided that regular maintenance washes are carried out. If it is necessary to wash nurses' uniforms or clothing soiled with faeces, something like a nappy sanitiser should be used. I would not trust washing them at 60°C. Using a powder laundry detergent containing a bleach will help to keep the machine free of bacterial contamination between maintenance washes and is not a bad idea for washing underwear and anything that is not dark coloured.


text:
package com.primateer.daikoku.ui.dialogs;

import java.util.HashMap;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

import com.primateer.daikoku.Event;
import com.primateer.daikoku.Event.Listener;

public class TabView extends LinearLayout implements DialogView {

	private HashMap<String, View> tabs = new HashMap<String, View>();
	private HashMap<String, View> pages = new HashMap<String, View>();

	private LinearLayout tabLine;
	private String currentPage = null;
	private String title = null;

	private Event.SimpleDispatcher dispatcher = new Event.SimpleDispatcher();

	public TabView(Context context) {
		this(context, null);
	}

	public TabView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.setOrientation(VERTICAL);

		tabLine = new LinearLayout(context);
		tabLine.setOrientation(HORIZONTAL);

		this.addView(tabLine, new LayoutParams(LayoutParams.MATCH_PARENT,
				LayoutParams.WRAP_CONTENT));
	}

	public void selectPage(String selectedID) {
		for (String pageID : pages.keySet()) {
			if (pageID.equals(selectedID)) {
				pages.get(pageID).setVisibility(View.VISIBLE);
				((Button) tabs.get(pageID)).setTypeface(null, Typeface.BOLD);
			} else {
				pages.get(pageID).setVisibility(View.GONE);
				((Button) tabs.get(pageID)).setTypeface(null, Typeface.NORMAL);
			}
		}
		currentPage = selectedID;
	}

	public void add(final DialogView page) {
		pages.put(page.getTitle(), page.getView());
		page.getView().setVisibility(View.GONE);
		page.addEventListener(DialogView.DismissedEvent.class, new Event.Pipe(
				dispatcher));
		this.addView(page.getView(), new LayoutParams(
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

		Button tab = new Button(getContext());
		tab.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				selectPage(page.getTitle());
			}
		});
		tab.setText(page.getTitle());
		tabs.put(page.getTitle(), tab);
		tabLine.addView(tab, new LayoutParams(0, LayoutParams.MATCH_PARENT,
				1.0f));

		selectPage(currentPage == null ? page.getTitle() : currentPage);
	}

	public void removePage(String title) {
		View page = pages.remove(title);
		if (page != null) {
			this.removeView(page);
			View tab = tabs.remove(title);
			tabLine.removeView(tab);
		}

		if (currentPage == title) {
			currentPage = null;
		}
		if (currentPage == null && pages.size() > 0) {
			for (String pageID : pages.keySet()) {
				selectPage(pageID);
				break;
			}
		}
	}

	@Override
	public void addEventListener(Class<? extends Event> type, Listener listener) {
		dispatcher.addEventListener(type, listener);
	}

	@Override
	public void removeEventListener(Class<? extends Event> type,
			Listener listener) {
		dispatcher.removeEventListener(type, listener);
	}

	public void setTitle(String title) {
		this.title = title;
	}

	@Override
	public String getTitle() {
		return title == null ? currentPage : title;
	}

	@Override
	public View getView() {
		return this;
	}
}


SHIPPENSBURG, PA – 09-25-2018 (PRDistribution.com) — The apple appeal for silicone elastic is accepted to acceleration 5 % in amount and 3 % in aggregate annually through 2021 according to Kent Furst, Freedonia Group.
"No silicone elastic area curtailment at American Actual Supply", claims Mike Staggs, Owner. American Actual Accumulation (AMS) has added account levels to action the abridgement of accumulation domestically. Ranging in array – amplitude and length, the options are many. With this affluence of stock, advance times for the actual are abbreviate acceptance for a faster accomplishment time.
AMS additionally carries altered forms such as silicone rolls, silicone strips, and A-A-59588 silicone rubber. As with all rubber, quick ship, absorption to detail and authentic cuts are aboriginal and foremost in the AMS assembly units. Adhering to austere guidelines and assembly protocols, AMS ships the absolute product. AMS has a library of silicone elastic blueprint and admission to abounding types of commercial, automated and aggressive silicone elastic materials.
For the aboriginal account story, amuse appointment https://prdistribution.com/news/no-need-to-worry-about-the-silicone-sheet-shortage-american-material-supply-has-plenty-of-stock.html.


text:
The Inheritance
Previewed 2 March 2018, Opened 28 March 2018, Closed 19 May 2018 at the Young Vic Theatre
Previewed 21 September 2018, Opened 13 October 2018, Closed 19 January 2019 at the Noel Coward Theatre
The West End transfer of the acclaimed Young Vic production of Matthew Lopez's new two-part play Inheritance in London for a strictly limited 15 week season
A generation after the peak of the AIDs crisis, what is it like to be a young gay man in New York? How many words are there now for pain and for love? Inheritance explores profound themes through the turbulent and often hilarious experiences of a group of young, ambitious New Yorkers. What is the legacy left to them by previous generations? What do they owe the future and each other?
Spanning generations and interlinking lives, Matthew Lopez's play transposes EM Forster's novel Howards End to 21st century New York.
PLEASE NOTE: This is a two-part play: Part 1 is approximately 3 hours and 15 minutes long (including two short intervals); and Part 2 is approximately 3 hours and 20 minutes long (including one short interval and one short 'pause').
The cast features Kyle Soller as 'Eric Glass', Andrew Burnap as 'Toby Darling', John Benjamin Hickey as 'Henry Wilcox', Hubert Burton as 'Young Henry', Paul Hilton as 'Walter' / 'Morgan (EM Forster)', Samuel H Levine as 'Adam' / 'Leo', Vanessa Redgrave as 'Margaret', Hugo Bolton as 'Jasper', Robert Boulter as 'Toby's Agent', Syrus Lowe as 'Tristan', Michael Marcus as 'Jason', and Michael Walters - who are all reprising their roles from the Young Vic season. Joining them in the West End is Jack Riddiford as 'Young Walter'.
Directed by Stephen Daldry with designs by Bob Crowley, lighting by Jon Clark, music by Paul Englishby, sound by Paul Arditti, and Chris Reid.
When this production opened here at the Noel Coward Theatre in October 2018, Fiona Mountford in the London Evening Standard praised how "Stephen Daldry directs a production of remarkable fluidity and suppleness, which unspools on a bare raised platform." Dominic Maxwell in the Times explained that "it could so easily be heavy weather yet the fluid theatricality of Stephen Daldry's production, played on a stylishly stark set by Bob Crowley, keeps this thoroughly consumable... The entire ensemble excels... A glorious achievement."
The entire original cast from the Young Vic Theatre transferred to the West End, with the exception of Luke Thallon who played 'Young Walter', but was replaced in the role by Jack Riddiford for the West End season at the Noel Coward Theatre.
When this production was originally seen at the Young Vic Theatre in March 2018, Henry Hitchings in the London Evening Standard hailed "Matthew Lopez's witty, frequently outrageous and deeply moving play," adding that "Stephen Daldry directs with rigorous simplicity and affords the writing plenty of breathing space... it's also the sort of play that invites you to think afresh about what it means to lead a purposeful life." Quentin Letts in the Daily Mail exclaimed: "Seven hours! But with its soap-opera plot and some phenomenally good acting, the show whizzes along... Director Stephen Daldry has assembled a cracking Anglo-American cast." Paul Taylor in the i newspaper explained that "in Stephen Daldry's lucid, remarkably involving production... there are many different tones in the play which the production captures beautifully... the acting of the American and British cast is extraordinarily accomplished." Ann Treneman in the Times said that "Stephen Daldry superbly directs an ensemble production... The play could do with a trim but it has a box-set binge feel to it. It's about conscience and the ghosts of the past but it's also about fame, desire, betrayal and, deliciously, property... If you can only see one part, see the first. You won't regret it." Dominic Cavendish in th Daily Telegraph commented that "to watch The Inheritance is to move from engaged but detached interest to a state of emotionally shattered but elated awe... Stephen Daldry's fleet, astute production is sparing in its visual elements and 'big' moments so that when they land, they land hard." Michael Billington in the Guardian described how the play, "in Stephen Daldry's crystalline production, pierces your emotional defences, raises any number of political issues and enfolds you in its narrative... I admired its rollercoaster energy and high entertainment value, but I found its exclusive maleness limiting."
"Over two parts and seven hours, Matthew Lopez's rhapsodic deep dive into the ties that bind the gay community to its past asks how to love, how to live and how to do those well, despite a legacy of damage. It's captivating. The Inheritance wears its source on its sleeve. It doesn't merely draw from Howards End, it even introduces EM Forster (Paul Hilton, never better) as an occasionally prissy presiding spirit. Forster's model enables long-breathed eloquence and melodramatic touches (a will destroyed, a sex worker redeemed), nudging people into useful conjunction rather than freewheeling mess... In Stephen Daldry's spare, beautifully paced staging, this is a play about hearts and minds, not real estate. Visual surprises are rationed so that every pop of colour detonates. The final surprise is Vanessa Redgrave, the cast's only woman, bringing her own crotchety grace. Despite obvious kinship, this isn't another Angels in America. It's less wild, more sentimental. It asks about love — and how being unloved shapes you. It wonders if, to love yourself, you must first love the world. It ends with an audience quietly sobbing." The Sunday Times
"American playwright Matthew Lopez's new work is ambitious, clever and gay. Directed by Stephen Daldry, it turns these ingredients into a rare treat, and I haven't even mentioned Vanessa Redgrave yet. Lopez's heroes are a cross section of New York's current generation of gay men. The play's title refers partly to the civil rights won by generations before them, but also the legacy of the 1980s Aids epidemic. If that sounds heavy going, well, it's not. This two-part play is articulate, witty and inventive. It begins with ten male, wannabe writers, lolling with notepads as they look for inspiration. The baggy-suited Englishman who appears from the wings is novelist EM Forster (Paul Hilton), who delivers a masterclass in bringing characters alive... Lopez has probably written one of the finest plays of his generation." The London Metro
The Inheritance in London at the Noel Coward Theatre previewed from 21 September 2018, opened on 13 October 2018 and closed on 19 January 2019


text:
BattleRat vs. Crash Test Dummy, Little Sister vs. Biohazard, Little Drummer Boy vs. Blade Runner
BattleRat vs. Crash Test Dummy, Little Sister vs. Biohazard, Little Drummer Boy vs. Blade Runner (S0... More BattleRat vs. Crash Test Dummy, Little Sister vs. Biohazard, Little Drummer Boy vs. Blade Runner (S03E06) is the sixth episode of season three of "BattleBots" released on Tue Jul 24, 2001. BattleBots stars Traci Bingham, Tony Rock and Arj Barker.


text:
Hammond — miasto w Stanach Zjednoczonych, w północno-zachodniej części stanu Indiana, hrabstwie Lake County w zespole miejskim Gray-Hammond (region metropolitalny Chicago). W 2008r. miasto liczyło ok. 76 tys. mieszkańców.

W mieście rozwinął się przemysł środków transportu, chemiczny, maszynowy oraz hutniczy.

Miasta partnerskie
  Gałacz, Rumunia

Przypisy

Miasta w stanie Indiana


MTV Networks has promoted Colleen Fahey Rush to executive vice president, research.
Rush had been senior VP, research, managing the research teams at VH1 and Country Music Television.
In her new role, she will also provide oversight, guidance and counsel for MTVN research at the divisional level and coordinate all cross-channel and cross-audience research initiatives.


text:
phoebejournal|	February 2, 2016| Fiction, From the Archive
A Brief Excerpt from "The Spa"
I learn about Dustin's death through Facebook. I am at work, taking a lunch of grilled chicken and broccolini at my desk, a diet prescribed by my pregnant Trisha, who now insists that I eat for posterity. The message was posted five hours ago. Five hours ago: I had my morning mug in a hoodie and boxers, making grabs at Trisha as she collected her pointed-toe pumps. Words cannot express how deeply I feel this loss. I don't remember who this person is, this unspeakably sad person. He must have worked at the water park one summer, erased from my memory after I left Sparks, Nevada, buried by the algorithm except for this dark speech bubble.
I write a comment that I edit and eventually delete. Messaging the poster—he sold funnel cakes, it comes back to me now—I find out that it was an aneurysm. The funeral is tomorrow. It's an eight-hour drive from Santa Barbara, so I leave straight from work that evening.
"You're going to whose funeral?" says Trisha, her voice grainy through the Bluetooth.
Her reaction cuts through gauzy layers of shock and denial. Threads of pain radiate from my chest as I realize how much distance I've put between myself and my life in Sparks.
"Dustin Reynolds. My old boss at the water park. I've told you about him."
"You told me you and his daughter used to bone in the water slides, that's for sure."
"He really took me in, Trish."
"Sorry. I'm feeling on edge for some reason. You okay?"
"I'm okay. I'll be okay."
She pauses. "Well, be safe. I don't like you on the road so late."
Recent rains have lacquered the asphalt. After an hour, I turn down the music until it is barely audible, just stray notes and an incoherent thumping. Dustin staggers in my mind as in the spinning frames of a zoetrope, his movements convulsive, out of order, until I find my most recent memory of him: he's singing Bing Crosby into the mouth of his beer bottle, leaning into his wife's ear at the dinner table. Lindsay and I are holding hands. She squeezes my knuckles as she laughs and hops to the back of her seat. I'm home from Dartmouth for Christmas. In a week or so, she'll know everything—the usual transgressions, girls and vanity; I think I said be my own man—and that will be the last I see of her or Dustin. I was mean; I was cowardly. I was nineteen and doing most everything wrong.
The needle ticks towards 90 miles per hour. I switch to an inside lane.
After leaving Sparks for college, I had little reason to go back. My parents reconciled after a decade's war and moved to northern California, escaping the mean airs of our house, the skylights always clogged with leaves and grime. It had stopped feeling like home long before they sold it, anyway.
My mom was an investment banker and still lived in Shanghai, where I had grown up.
I'd left with my dad when I was six because he was convinced that in America, he'd find his calling: "The air is better," he used to say, as if it were smog keeping him from work. Once distant, my mother made increasingly frequent visits to the house when I was a teenager. She was like a bad spirit clapping the cabinet doors and trembling the tines of forks in the drawers. I must have known about her stays beforehand, but in my memory she materializes on a closet hanger, her shoulders hooked high by her ears. Suddenly she is sniffing over my schoolwork and auditing our lives, what we've done with her money. Despite his efforts, my dad never worked for more than two months at a time. His back was bad for physical work, and he was too ill-tempered for anything else.
After we started going steady, I stayed at Lindsay's house to escape my own. Her mom was a nurse whose hours barred her from chaperoning, and when Dustin got home we caught an airing of Jeopardy! together. Dustin the father and Dustin the General Manager of Wild Island were the same—a riotous six-foot-four with wild blond hair, always surprising with how much he'd figured out about you in five minutes. You didn't feel vulnerable; you felt confirmed. He was a ham about practicing the saxophone, throwing his body back and forth as he went down the hall. Occasionally he told me to go home, just like that—"Go home, Ryan." Sometimes I would, and sometimes I drove to the 24-hour Korean spa at the edge of town, where twenty bucks got you a night of hassle-free sleep.
Ironically, it was my mom who'd alerted me to Seoul Spa. She had gone expecting sleek, luminous pools and plush arrangements of lounge chairs, and she'd come home waving her hand under her nose, exclaiming, "Luan qi bao zao!" and promising never to go back.
Want more? Order issue 45.1 to read "The Spa" in its entirety
Or read more excerpts from this issue.
Jenny Xie is a recent graduate of the MFA program at Johns Hopkins University, where she now teaches creative writing. Her fiction has appeared or is forthcoming in Riddle Fence, Front Porch Journal, Necessary Fiction, Ninth Letter Online, PANK Online, and Adroit Journal. Devil's Lake awarded her the Driftless Prize in fiction, and she was a finalist in Narrative's 30 Below Contest.


If you're in the habit of driving every day, whether to work or school, getting your Texas driver's license suspended can be a gigantic hassle. Suddenly you're forced to spend money on taxis, decipher cryptic bus schedules, or rely on friends and family for rides. Plus, the whole process can be confusing and vague for a first-time suspension. The information below should hopefully shed some light on the ins and outs of having your license suspended, and getting it reinstated again—as soon as possible.
Why does a license get withheld, anyway?
First of all, there are two different ways a license can be withheld. In Texas, "revocation" refers to the withholding of driving privileges for an indefinite amount of time, whereas "suspension" generally means driving privileges are withheld for one year.
I'm not sure if my license is suspended—how do I check?
In Texas, the Department of Public Safety (DPS) will notify you by mail if your license has been suspended. However, if you haven't received anything in the mail and would still like to check, you can go about this in a few different ways. The state of Texas allows you to order your driving record online through a third party, or by mailing in an "Application for Copy of Driver Record" form. The fee ranges from $4 to $10, and takes 2 to 3 weeks to get a reply.
Naturally, the very first question anyone has is: "How—and how fast—can I get my suspended license reinstated?" As you might imagine, it's a tricky process and depends greatly on the original offense. You'll almost certainly have to pay a reinstatement fee, and submit proof of insurance to the Department of Public Safety. From there, you may have to take any number of classes. This is at the discretion of the court, so you may want to consult an attorney to help with your appeal.
If appealing doesn't work, you'll probably want to invest in some comfortable walking shoes. You do not want to get caught driving on a suspended license!
What happens if I get caught driving with a suspended license?
As you may have guessed, the penalties for driving on a suspended Texas driver's license are severe. If you're caught in the state of Texas, you could face a fine of anywhere from $100 – $500, and/or jail time, for no less than 72 hours and no more than 6 months.
How do I make sure this never happens to me?
Great question! Apart from the obvious answer (don't do any of the things listed above), you can take extra precautions to make sure you are driving as safely as possible. There are many Texas online defensive driving courses you can take to keep your skills sharp. A little effort now could save you a colossal pain down the road.


Size: 18mm Colour: Silver No sew magnetic bag clasps/fasteners. Each set has two snaps and two washers. Simply push the snap prongs through the fabric of your bag or other item, slip the washer over the prongs and fold the prongs back on themselves to keep the clasp securely in place. Once the 2 snaps are in place - the magnets hold the bag top together.


Sustainable agriculture development perspective has kept in mind on the project however; other social and economic improvements are obvious. Agricultural bio-security (food safety, soil fertility, and plant and animal health) and socio-economy (improved mass scale communal farming, strengthened networking/production/income, assured market chain, entrepreneurship, etc.,) are major consideration. The project is applied for how increased quality agro products are produced without losing soil fertility and plant as well as livestock health. Similarly, project is supportive to improve income of local farmers by reducing invest cost and maximizing return of agriculture products is another project focus. Projectis reliability, effective, and efficiency are guaranteed by secure market chain, entrepreneurship, networking extension. The project is experiential base including couple of socio-economic and agriculture theories. Farmers community, farmland, livestock, farm technologies, market, and agriculture service center are operational areas. Existing knowledge, practice, and perception of local farmers, agriculture experts, and development activists have been incorporated and will be kept accordingly. In coordination and guidance of experts, major sustainability parameters will be set. Main efforts of the project is to utilize the better opportunities and potentiality rather than solving the problem alone. Objectives: Increase secure market access for quality agro production with developed farmers capacity is main objective of the project. Followings are specific objectives; 1). Farmers capacities develop 2). Increase sustainable agriculture production (livestock and farm).


text:
Why Is The Madison Square Garden Company (MSG) Up 2.2% Since Last Earnings Report?
It has been about a month since the last earnings report for The Madison Square Garden Company (MSG - Free Report) . Shares have added about 2.2% in that time frame, outperforming the S&P 500.
Will the recent positive trend continue leading up to its next earnings release, or is The Madison Square Garden Company due for a pullback? Before we dive into how investors and analysts have reacted as of late, let's take a quick look at its most recent earnings report in order to get a better handle on the important catalysts.
Madison Square Garden's Q1 Loss Wider Than Expected
The Madison Square Garden Company reported first-quarter fiscal 2020 results, with earnings and revenues lagging the Zacks Consensus Estimate. The bottom line fell short of the Zacks Consensus Estimate for the second consecutive quarter, whereas the top line lagged the same for the third straight quarter.
In the quarter under review, the company incurred a loss of $3.36 per share, wider than the Zacks Consensus Estimate of a loss of $2.29. In the prior-year quarter, Madison Square Garden had incurred a loss of $1.36 per share. Net revenues totaled $214.8 million, which missed the consensus mark of $234 million and dipped 1.5% year over year.
Segmental Performance
Madison Square Garden operates under two segments — MSG Entertainment and MSG Sports.
Revenues from the Entertainment segment totaled $159 million, down 2% year over year. The downside was caused by decline in event-related revenues at the company's venues. The winding down of Obscura Digital's third-party business impacted the segment's revenues.
The segment's adjusted operating income came in at $6.2 million compared with operating income of $9 million in the prior-year quarter. The metric fell primarily due to a sharp decline in revenues.
Revenues in the Sports segment inched up 1% to $56 million, courtesy of robust revenues from other live sporting events. However, the gain was partially overshadowed by decline in ticket-related revenues.
The segment's adjusted operating loss came in at $13.7 million compared with operating income of $0.6 million in the prior-year quarter. The loss was caused by higher direct operating expenses and selling, general and administrative expenses.
In the quarter under review, Madison Square Garden incurred adjusted operating loss of $41.1 million compared with operating loss of $9.9 million in the year-ago quarter.
Cash and cash equivalents totaled $952.2 million as of Sep 30, 2019 compared with $1.1 billion as of Jun 30, 2019. The company ended the fiscal first quarter with long-term debt of nearly $47.4 million compared with $48.6 million at the end of Jun 30, 2019.
In the past month, investors have witnessed an upward trend in estimates revision.
Currently, The Madison Square Garden Company has a poor Growth Score of F, however its Momentum Score is doing a lot better with a B. However, the stock was allocated a grade of F on the value side, putting it in the bottom 20% quintile for this investment strategy.
Overall, the stock has an aggregate VGM Score of F. If you aren't focused on one strategy, this score is the one you should be interested in.
Estimates have been trending upward for the stock, and the magnitude of this revision looks promising. Notably, The Madison Square Garden Company has a Zacks Rank #5 (Strong Sell). We expect a below average return from the stock in the next few months.
The Madison Square Garden Company (MSG) - free report >>
Why Is UGI (UGI) Up 4.9% Since Last Earnings Report?


Aligned with its four-year transformation strategy.
Private banking arm sees no harm in The LaunchPad.
Saudi Arabian Monetary Authority and UAE's central bank unveil Aber project.
It will use the Axia platform for wealth management.
Sweden-based platform granted approval for 2019 start.
Its digital activity comes at a heavy price.
The consolidation of FGB and NBAD systems is now complete.
Multi-year agreement means Liv will use Verrency's cloud-based payments.
Says it's the first bank in the UAE to introduce such a platform.
"The world's first digitally-enabled trade bank" will open for business in early 2019.