text:
/*
 * Created on 12.02.2005
 *
 */
package de.lessvoid.nifty.examples.defaultcontrols;

import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.render.batch.BatchRenderDevice;
import de.lessvoid.nifty.render.batch.spi.BatchRenderBackend;
import de.lessvoid.nifty.builder.*;
import de.lessvoid.nifty.controls.button.builder.ButtonBuilder;
import de.lessvoid.nifty.controls.console.builder.ConsoleBuilder;
import de.lessvoid.nifty.controls.dropdown.builder.DropDownBuilder;
import de.lessvoid.nifty.controls.label.builder.LabelBuilder;
import de.lessvoid.nifty.controls.slider.builder.SliderBuilder;
import de.lessvoid.nifty.examples.LwjglInitHelper;
import de.lessvoid.nifty.examples.NiftyExample;
import de.lessvoid.nifty.examples.defaultcontrols.chatcontrol.ChatControlDialogDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.common.CommonBuilders;
import de.lessvoid.nifty.examples.defaultcontrols.common.DialogPanelControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.common.MenuButtonControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.dragndrop.DragAndDropDialogDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.dropdown.DropDownDialogControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.eventconsume.EventConsumeDialogDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.listbox.ListBoxDialogControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.messagebox.MessageBoxDialogDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.scrollpanel.ScrollPanelDialogControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.sliderandscrollbar.SliderAndScrollbarDialogControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.tabs.TabsControlDialogDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.textfield.TextFieldDialogControlDefinition;
import de.lessvoid.nifty.examples.defaultcontrols.treebox.TreeBoxControlDialogDefinition;
import de.lessvoid.nifty.examples.resolution.ResolutionControl;
import de.lessvoid.nifty.examples.resolution.ResolutionControlLWJGL;
import de.lessvoid.nifty.renderer.lwjgl.render.LwjglRenderDevice;
import de.lessvoid.nifty.renderer.lwjgl.render.LwjglBatchRenderBackendFactory;
import de.lessvoid.nifty.renderer.lwjgl.render.LwjglBatchRenderBackendCoreProfileFactory;
import de.lessvoid.nifty.screen.DefaultScreenController;
import de.lessvoid.nifty.screen.Screen;
import de.lessvoid.nifty.sound.openal.OpenALSoundDevice;
import de.lessvoid.nifty.spi.time.impl.AccurateTimeProvider;
import de.lessvoid.nifty.tools.Color;
import org.lwjgl.opengl.DisplayMode;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class ControlsDemo<T> implements NiftyExample {
  @Nonnull
  private static final CommonBuilders builders = new CommonBuilders();
  private final ResolutionControl<T> resolutionControl;

  // this will enable the batched renderer when set to true
  private final static boolean useBatchedRenderer = true;

  // this will enable the CoreProfile renderer (please note that currently this required useBatchedRenderer set to true)
  private final static boolean useCoreProfile = false;

  public ControlsDemo(final ResolutionControl<T> resControl) {
    resolutionControl = resControl;
  }

  public static void main(final String[] args) {
    // init lwjgl
    if (!LwjglInitHelper.initSubSystems("Nifty Controls Demonstation", useCoreProfile)) {
      System.exit(0);
    }

    // create Nifty and load default styles and controls
    Nifty nifty;
    if (useBatchedRenderer) {
      BatchRenderDevice renderDevice = new BatchRenderDevice(createBatchRenderBackend(useCoreProfile));
      renderDevice.enableLogFPS();

      nifty = new Nifty(
          renderDevice,
          new OpenALSoundDevice(),
          LwjglInitHelper.getInputSystem(),
          new AccurateTimeProvider());
    } else {
      nifty = new Nifty(
          new LwjglRenderDevice(true),
          new OpenALSoundDevice(),
          LwjglInitHelper.getInputSystem(),
          new AccurateTimeProvider());
    }
    ControlsDemo<DisplayMode> demo = new ControlsDemo(new ResolutionControlLWJGL(useCoreProfile));
    demo.prepareStart(nifty);

    nifty.gotoScreen("start");

    // start the render loop
    LwjglInitHelper.renderLoop(nifty, null);
    LwjglInitHelper.destroy();
  }

  @Nonnull
  private static BatchRenderBackend createBatchRenderBackend(final boolean useCoreProfile) {
    if (useCoreProfile) {
      return LwjglBatchRenderBackendCoreProfileFactory.create();
    } else {
      return LwjglBatchRenderBackendFactory.create();
    }
  }

  @Nonnull
  private static Screen createIntroScreen(@Nonnull final Nifty nifty) {
    return new ScreenBuilder("start") {{
      controller(new DefaultScreenController() {
        @Override
        public void onStartScreen() {
          nifty.gotoScreen("demo");
        }
      });
      layer(new LayerBuilder("layer") {{
        childLayoutCenter();
        onStartScreenEffect(new EffectBuilder("fade") {{
          length(3000);
          effectParameter("start", "#0");
          effectParameter("end", "#f");
        }});
        onStartScreenEffect(new EffectBuilder("playSound") {{
          startDelay(1400);
          effectParameter("sound", "intro");
        }});
        onActiveEffect(new EffectBuilder("gradient") {{
          effectValue("offset", "0%", "color", "#66666fff");
          effectValue("offset", "85%", "color", "#000f");
          effectValue("offset", "100%", "color", "#44444fff");
        }});
        panel(new PanelBuilder() {{
          alignCenter();
          valignCenter();
          childLayoutHorizontal();
          width("856px");
          panel(new PanelBuilder() {{
            width("300px");
            height("256px");
            childLayoutCenter();
            text(new TextBuilder() {{
              text("Nifty 1.4 Core");
              style("base-font");
              alignCenter();
              valignCenter();
              onStartScreenEffect(new EffectBuilder("fade") {{
                length(1000);
                effectValue("time", "1700", "value", "0.0");
                effectValue("time", "2000", "value", "1.0");
                effectValue("time", "2600", "value", "1.0");
                effectValue("time", "3200", "value", "0.0");
                post(false);
                neverStopRendering(true);
              }});
            }});
          }});
          panel(new PanelBuilder() {{
            alignCenter();
            valignCenter();
            childLayoutOverlay();
            width("256px");
            height("256px");
            onStartScreenEffect(new EffectBuilder("shake") {{
              length(250);
              startDelay(1300);
              inherit();
              effectParameter("global", "false");
              effectParameter("distance", "10.");
            }});
            onStartScreenEffect(new EffectBuilder("imageSize") {{
              length(600);
              startDelay(3000);
              effectParameter("startSize", "1.0");
              effectParameter("endSize", "2.0");
              inherit();
              neverStopRendering(true);
            }});
            onStartScreenEffect(new EffectBuilder("fade") {{
              length(600);
              startDelay(3000);
              effectParameter("start", "#f");
              effectParameter("end", "#0");
              inherit();
              neverStopRendering(true);
            }});
            image(new ImageBuilder() {{
              filename("defaultcontrols/yin.png");
              onStartScreenEffect(new EffectBuilder("move") {{
                length(1000);
                startDelay(300);
                timeType("exp");
                effectParameter("factor", "6.f");
                effectParameter("mode", "in");
                effectParameter("direction", "left");
              }});
            }});
            image(new ImageBuilder() {{
              filename("defaultcontrols/yang.png");
              onStartScreenEffect(new EffectBuilder("move") {{
                length(1000);
                startDelay(300);
                timeType("exp");
                effectParameter("factor", "6.f");
                effectParameter("mode", "in");
                effectParameter("direction", "right");
              }});
            }});
          }});
          panel(new PanelBuilder() {{
            width("300px");
            height("256px");
            childLayoutCenter();
            text(new TextBuilder() {{
              text("Nifty 1.4 Standard Controls");
              style("base-font");
              alignCenter();
              valignCenter();
              onStartScreenEffect(new EffectBuilder("fade") {{
                length(1000);
                effectValue("time", "1700", "value", "0.0");
                effectValue("time", "2000", "value", "1.0");
                effectValue("time", "2600", "value", "1.0");
                effectValue("time", "3200", "value", "0.0");
                post(false);
                neverStopRendering(true);
              }});
            }});
          }});
        }});
      }});
      layer(new LayerBuilder() {{
        backgroundColor("#ddff");
        onStartScreenEffect(new EffectBuilder("fade") {{
          length(1000);
          startDelay(3000);
          effectParameter("start", "#0");
          effectParameter("end", "#f");
        }});
      }});
    }}.build(nifty);
  }

  @Nonnull
  private static <T> Screen createDemoScreen(@Nonnull final Nifty nifty, final ResolutionControl<T> resControl) {
    final CommonBuilders common = new CommonBuilders();
    return new ScreenBuilder("demo") {{
      controller(
          new ControlsDemoScreenController<T>(
              resControl,
              "menuButtonListBox", "dialogListBox",
              "menuButtonDropDown", "dialogDropDown",
              "menuButtonTextField", "dialogTextField",
              "menuButtonSlider", "dialogSliderAndScrollbar",
              "menuButtonScrollPanel", "dialogScrollPanel",
              "menuButtonDragAndDrop", "dialogDragAndDrop",
              "menuButtonChatControl", "dialogChatControl",
              "menuButtonMessageBox", "dialogMessageBox",
              "menuButtonTabsControl", "dialogTabsControl",
              "menuButtonTreeBoxControl", "dialogTreeBoxControl",
              "menuButtonEventConsumeControl", "dialogEventConsumeControl"));
      // this will enable Keyboard events for the screen controller
      inputMapping("de.lessvoid.nifty.input.mapping.DefaultInputMapping");
      layer(new LayerBuilder("layer") {{
        backgroundImage("defaultcontrols/background-new.png");
        childLayoutVertical();
        panel(new PanelBuilder("navigation-1") {{
          width("100%");
          height("43px");
          backgroundColor("#5588");
          childLayoutHorizontal();
          paddingLeft("20px");
          paddingRight("20px");
          paddingTop("10px");
          paddingBottom("10px");
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonListBox", "ListBox",
              "ListBox demonstration\n\nThis example shows adding and removing items from a ListBox\nas well as the " +
                  "different selection modes that are available."));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonDropDown", "DropDown",
              "DropDown and RadioButton demonstration\n\nThis shows how to dynamically add items to the\nDropDown " +
                  "control as well as the change event."));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonTextField", "TextField",
              "TextField demonstration\n\nThis example demonstrates the Textfield example using the password\nmode " +
                  "and the input length restriction. It also demonstrates\nall of the new events the Textfield " +
                  "publishes on the Eventbus."));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonSlider", "Slider & Scrollbars",
              "Sliders and Scrollbars demonstration\n\nThis creates sliders to change a RGBA value and it\ndisplays a" +
                  " scrollbar that can be customized."));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonScrollPanel", "ScrollPanel",
              "ScrollPanel demonstration\n\nThis simply shows an image and uses the ScrollPanel\nto scroll around its" +
                  " area. You can directly input\nthe x/y position you want the ScrollPanel to scroll to."));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilder("menuButtonDragAndDrop", "Drag and Drop",
              "Drag and Drop demonstration\n\nDrag and Drop has been extended with Nifty 1.3"));
          panel(builders.hspacer("10px"));
          control(
              MenuButtonControlDefinition.getControlBuilder("menuButtonCredits", "?", "Credits\n\nCredits and Thanks!",
                  "25px"));
        }});
        panel(new PanelBuilder("navigation-2") {{
          width("100%");
          height("33px");
          backgroundColor("#5588");
          childLayoutHorizontal();
          paddingLeft("20px");
          paddingRight("20px");
          paddingTop("0px");
          paddingBottom("10px");
          control(MenuButtonControlDefinition.getControlBuilderUser("menuButtonChatControl", "ChatControl",
              "Chat Control demonstration\n\nThis control was contributed by Nifty User ractoc. It demonstrates\nhow " +
                  "you can combine Nifty standard controls to build more\ncomplex stuff. In this case we've just " +
                  "included his work as\nanother standard control to Nifty! :)"));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilderUser("menuButtonMessageBox", "MessageBox",
              "MessageBox demonstration\n\nThis control was contributed by Nifty User ractoc. It demonstrates\nhow " +
                  "you can combine Nifty standard controls to build more\ncomplex stuff. In this case we've just " +
                  "included his work as\nanother standard control to Nifty! :)"));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilderUser("menuButtonTabsControl", "TabGroupControl",
              "TabGroup Control demonstration\n\nThis control was contributed by Nifty User ractoc. It " +
                  "demonstrates\nhow you can combine Nifty standard controls to build more\ncomplex stuff. In this " +
                  "case we've just included his work as\nanother standard control to Nifty! :)"));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilderUser("menuButtonTreeBoxControl", "TreeBoxControl",
              "TreeBox Control demonstration\n\nThis control was contributed by Nifty User ractoc. It " +
                  "demonstrates\nhow you can combine Nifty standard controls to build more\ncomplex stuff. In this " +
                  "case we've just included his work as\nanother standard control to Nifty! :)"));
          panel(builders.hspacer("10px"));
          control(MenuButtonControlDefinition.getControlBuilderSpecial("menuButtonEventConsumeControl", "Event Consuming",
              "Nifty Event Consuming demonstration\n\nThis demonstrates how Nifty consumes events and how you can" +
                  "influence\nthe event processing to block certain elements from\nreceiving events."));
        }});
        panel(new PanelBuilder("dialogParent") {{
          childLayoutOverlay();
          width("100%");
          alignCenter();
          valignCenter();
          control(new ControlBuilder("dialogListBox", ListBoxDialogControlDefinition.NAME));
          control(new ControlBuilder("dialogDropDown", DropDownDialogControlDefinition.NAME));
          control(new ControlBuilder("dialogTextField", TextFieldDialogControlDefinition.NAME));
          control(new ControlBuilder("dialogSliderAndScrollbar", SliderAndScrollbarDialogControlDefinition.NAME));
          control(new ControlBuilder("dialogScrollPanel", ScrollPanelDialogControlDefinition.NAME));
          control(new ControlBuilder("dialogDragAndDrop", DragAndDropDialogDefinition.NAME));
          control(new ControlBuilder("dialogChatControl", ChatControlDialogDefinition.NAME));
          control(new ControlBuilder("dialogMessageBox", MessageBoxDialogDefinition.NAME));
          control(new ControlBuilder("dialogTabsControl", TabsControlDialogDefinition.NAME));
          control(new ControlBuilder("dialogTreeBoxControl", TreeBoxControlDialogDefinition.NAME));
          control(new ControlBuilder("dialogEventConsumeControl", EventConsumeDialogDefinition.NAME));
        }});
      }});
      layer(new LayerBuilder() {{
        childLayoutVertical();
        panel(new PanelBuilder() {{
          height("*");
        }});
        panel(new PanelBuilder() {{
          childLayoutCenter();
          height("50px");
          width("100%");
          backgroundColor("#5588");
          panel(new PanelBuilder() {{
            paddingLeft("25px");
            paddingRight("25px");
            height("50%");
            width("100%");
            alignCenter();
            valignCenter();
            childLayoutHorizontal();
            control(new LabelBuilder() {{
              label("Screen Resolution:");
            }});
            panel(common.hspacer("7px"));
            control(new DropDownBuilder("resolutions") {{
              width("200px");
            }});
            panel(common.hspacer("20px"));
            control(new LabelBuilder() {{
              label("Scale Resolution:");
            }});
            panel(common.hspacer("7px"));
            control(new SliderBuilder(false) {{
              id("scale-resolution");
              min(0.5f);
              max(1.5f);
              initial(1.0f);
              stepSize(0.01f);
              buttonStepSize(0.01f);
            }});
            panel(common.hspacer("*"));
            control(new ButtonBuilder("resetScreenButton", "Restart Screen") {{
            }});
          }});
        }});
      }});
      layer(new LayerBuilder("whiteOverlay") {{
        onCustomEffect(new EffectBuilder("renderQuad") {{
          customKey("onResolutionStart");
          length(350);
          neverStopRendering(false);
        }});
        onStartScreenEffect(new EffectBuilder("renderQuad") {{
          length(300);
          effectParameter("startColor", "#ddff");
          effectParameter("endColor", "#0000");
        }});
        onEndScreenEffect(new EffectBuilder("renderQuad") {{
          length(300);
          effectParameter("startColor", "#0000");
          effectParameter("endColor", "#ddff");
        }});
      }});
    }}.build(nifty);
  }

  private static void registerMenuButtonHintStyle(@Nonnull final Nifty nifty) {
    new StyleBuilder() {{
      id("special-hint");
      base("nifty-panel-bright");
      childLayoutCenter();
      onShowEffect(new EffectBuilder("fade") {{
        length(150);
        effectParameter("start", "#0");
        effectParameter("end", "#d");
        inherit();
        neverStopRendering(true);
      }});
      onShowEffect(new EffectBuilder("move") {{
        length(150);
        inherit();
        neverStopRendering(true);
        effectParameter("mode", "fromOffset");
        effectParameter("offsetY", "-15");
      }});
      onCustomEffect(new EffectBuilder("fade") {{
        length(150);
        effectParameter("start", "#d");
        effectParameter("end", "#0");
        inherit();
        neverStopRendering(true);
      }});
      onCustomEffect(new EffectBuilder("move") {{
        length(150);
        inherit();
        neverStopRendering(true);
        effectParameter("mode", "toOffset");
        effectParameter("offsetY", "-15");
      }});
    }}.build(nifty);

    new StyleBuilder() {{
      id("special-hint#hint-text");
      base("base-font");
      alignLeft();
      valignCenter();
      textHAlignLeft();
      color(new Color("#000f"));
    }}.build(nifty);
  }

  private static void registerStyles(@Nonnull final Nifty nifty) {
    new StyleBuilder() {{
      id("base-font-link");
      base("base-font");
      color("#8fff");
      interactOnRelease("$action");
      onHoverEffect(new HoverEffectBuilder("changeMouseCursor") {{
        effectParameter("id", "hand");
      }});
    }}.build(nifty);

    new StyleBuilder() {{
      id("creditsImage");
      alignCenter();
    }}.build(nifty);

    new StyleBuilder() {{
      id("creditsCaption");
      font("defaultcontrols/verdana-48-regular.fnt");
      width("100%");
      textHAlignCenter();
    }}.build(nifty);

    new StyleBuilder() {{
      id("creditsCenter");
      base("base-font");
      width("100%");
      textHAlignCenter();
    }}.build(nifty);
  }

  private static void registerConsolePopup(@Nonnull Nifty nifty) {
    new PopupBuilder("consolePopup") {{
      childLayoutAbsolute();
      panel(new PanelBuilder() {{
        childLayoutCenter();
        width("100%");
        height("100%");
        alignCenter();
        valignCenter();
        control(new ConsoleBuilder("console") {{
          width("80%");
          lines(25);
          alignCenter();
          valignCenter();
          onStartScreenEffect(new EffectBuilder("move") {{
            length(150);
            inherit();
            neverStopRendering(true);
            effectParameter("mode", "in");
            effectParameter("direction", "top");
          }});
          onEndScreenEffect(new EffectBuilder("move") {{
            length(150);
            inherit();
            neverStopRendering(true);
            effectParameter("mode", "out");
            effectParameter("direction", "top");
          }});
        }});
      }});
    }}.registerPopup(nifty);
  }

  private static void registerCreditsPopup(@Nonnull final Nifty nifty) {
    final CommonBuilders common = new CommonBuilders();
    new PopupBuilder("creditsPopup") {{
      childLayoutCenter();
      panel(new PanelBuilder() {{
        width("80%");
        height("80%");
        alignCenter();
        valignCenter();
        onStartScreenEffect(new EffectBuilder("move") {{
          length(400);
          inherit();
          effectParameter("mode", "in");
          effectParameter("direction", "top");
        }});
        onEndScreenEffect(new EffectBuilder("move") {{
          length(400);
          inherit();
          neverStopRendering(true);
          effectParameter("mode", "out");
          effectParameter("direction", "top");
        }});
        onEndScreenEffect(new EffectBuilder("fadeSound") {{
          effectParameter("sound", "credits");
        }});
        onActiveEffect(new EffectBuilder("gradient") {{
          effectValue("offset", "0%", "color", "#00bffecc");
          effectValue("offset", "75%", "color", "#00213cff");
          effectValue("offset", "100%", "color", "#880000cc");
        }});
        onActiveEffect(new EffectBuilder("playSound") {{
          effectParameter("sound", "credits");
        }});
        padding("10px");
        childLayoutVertical();
        panel(new PanelBuilder() {{
          width("100%");
          height("*");
          childLayoutOverlay();
          childClip(true);
          panel(new PanelBuilder() {{
            width("100%");
            childLayoutVertical();
            onActiveEffect(new EffectBuilder("autoScroll") {{
              length(100000);
              effectParameter("start", "0");
              effectParameter("end", "-3200");
              inherit(true);
            }});
            panel(common.vspacer("800px"));
            text(new TextBuilder() {{
              text("Nifty 1.3");
              style("creditsCaption");
            }});
            text(new TextBuilder() {{
              text("Standard Controls Demonstration using JavaBuilder pattern");
              style("creditsCenter");
            }});
            panel(common.vspacer("30px"));
            text(new TextBuilder() {{
              text("\"Look ma, No XML!\" :)");
              style("creditsCenter");
            }});
            panel(common.vspacer("70px"));
            panel(new PanelBuilder() {{
              width("100%");
              height("256px");
              childLayoutCenter();
              panel(new PanelBuilder() {{
                alignCenter();
                valignCenter();
                childLayoutHorizontal();
                width("656px");
                panel(new PanelBuilder() {{
                  width("200px");
                  height("256px");
                  childLayoutCenter();
                  text(new TextBuilder() {{
                    text("Nifty 1.3 Core");
                    style("base-font");
                    alignCenter();
                    valignCenter();
                  }});
                }});
                panel(new PanelBuilder() {{
                  width("256px");
                  height("256px");
                  alignCenter();
                  valignCenter();
                  childLayoutOverlay();
                  image(new ImageBuilder() {{
                    filename("defaultcontrols/yin.png");
                  }});
                  image(new ImageBuilder() {{
                    filename("defaultcontrols/yang.png");
                  }});
                }});
                panel(new PanelBuilder() {{
                  width("200px");
                  height("256px");
                  childLayoutCenter();
                  text(new TextBuilder() {{
                    text("Nifty 1.3 Standard Controls");
                    style("base-font");
                    alignCenter();
                    valignCenter();
                  }});
                }});
              }});
            }});
            panel(common.vspacer("70px"));
            text(new TextBuilder() {{
              text("written and performed\nby void");
              style("creditsCenter");
            }});
            panel(common.vspacer("100px"));
            text(new TextBuilder() {{
              text("Sound Credits");
              style("creditsCaption");
            }});
            text(new TextBuilder() {{
              text(
                  "This demonstration uses creative commons licenced sound samples\nand music from the following " +
                      "sources");
              style("creditsCenter");
            }});
            panel(common.vspacer("30px"));
            image(new ImageBuilder() {{
              style("creditsImage");
              filename("defaultcontrols/freesound.png");
            }});
            panel(common.vspacer("25px"));
            text(new TextBuilder() {{
              text("19546__tobi123__Gong_mf2.wav");
              style("creditsCenter");
            }});
            panel(common.vspacer("50px"));
            image(new ImageBuilder() {{
              style("creditsImage");
              filename("defaultcontrols/cc-mixter-logo.png");
              set("action", "openLink(http://ccmixter.org/)");
            }});
            panel(common.vspacer("25px"));
            text(new TextBuilder() {{
              text("\"Almost Given Up\" by Loveshadow");
              style("creditsCenter");
            }});
            panel(common.vspacer("100px"));
            text(new TextBuilder() {{
              text("Additional Credits");
              style("creditsCaption");
            }});
            text(new TextBuilder() {{
              text("ueber awesome Yin/Yang graphic by Dori\n(http://www.nadori.de)\n\nThanks! :)");
              style("creditsCenter");
            }});
            panel(common.vspacer("100px"));
            text(new TextBuilder() {{
              text("Special thanks go to");
              style("creditsCaption");
            }});
            text(new TextBuilder() {{
              text(
                  "The following people helped creating Nifty with valuable feedback," +
                      "\nfixing bugs or sending patches.\n(in no particular order)\n\n" +
                      "chaz0x0\n" +
                      "Tumaini\n" +
                      "arielsan\n" +
                      "gaba1978\n" +
                      "ractoc\n" +
                      "bonechilla\n" +
                      "mdeletrain\n" +
                      "mulov\n" +
                      "gouessej\n");
              style("creditsCenter");
            }});
            panel(common.vspacer("75px"));
            text(new TextBuilder() {{
              text("Greetings and kudos go out to");
              style("creditsCaption");
            }});
            text(new TextBuilder() {{
              text("Ariel Coppes and Ruben Garat of Gemserk\n(http://blog.gemserk.com/)\n\n\n" +
                  "Erlend, Kirill, Normen, Skye and Ruth of jMonkeyEngine\n(http://www.jmonkeyengine.com/home/)\n\n\n" +
                  "Brian Matzon, Elias Naur, Caspian Rychlik-Prince for lwjgl\n(http://www.lwjgl.org/\n\n\n" +
                  "KappaOne, MatthiasM, aho, Dragonene, darkprophet, appel, woogley, Riven, " +
                  "NoobFukaire\nfor valuable input and discussions at #lwjgl IRC on the freenode network\n\n\n" +
                  "... and Kevin Glass\n(http://slick.cokeandcode.com/)\n\n\n\n\n\n\n\n" +
                  "As well as everybody that has not yet given up on Nifty =)\n\n" +
                  "And again sorry to all of you that I've forgotten. You rock too!\n\n\n");
              style("creditsCenter");
            }});
            panel(common.vspacer("350px"));
            image(new ImageBuilder() {{
              style("creditsImage");
              filename("defaultcontrols/nifty-logo.png");
            }});
          }});
        }});
        panel(new PanelBuilder() {{
          width("100%");
          paddingTop("10px");
          childLayoutCenter();
          control(new ButtonBuilder("creditsBack") {{
            label("Back");
            alignRight();
            valignCenter();
          }});
        }});
      }});
    }}.registerPopup(nifty);
  }

  @Nonnull
  @Override
  public String getStartScreen() {
    return "start";
  }

  @Nullable
  @Override
  public String getMainXML() {
    return null;
  }

  @Nonnull
  @Override
  public String getTitle() {
    return "Nifty Controls Demonstration";
  }

  @Override
  public void prepareStart(@Nonnull Nifty nifty) {
    nifty.loadStyleFile("nifty-default-styles.xml");
    nifty.loadControlFile("nifty-default-controls.xml");
    nifty.registerSound("intro", "defaultcontrols/sound/19546__tobi123__Gong_mf2.wav");
    nifty.registerMusic("credits", "defaultcontrols/sound/Loveshadow_-_Almost_Given_Up.ogg");
    nifty.registerMouseCursor("hand", "defaultcontrols/mouse-cursor-hand.png", 5, 4);
    nifty.enableAutoScaling(1024, 768);

    registerMenuButtonHintStyle(nifty);
    registerStyles(nifty);
    registerConsolePopup(nifty);
    registerCreditsPopup(nifty);

    // register some helper controls
    MenuButtonControlDefinition.register(nifty);
    DialogPanelControlDefinition.register(nifty);

    // register the dialog controls
    ListBoxDialogControlDefinition.register(nifty);
    DropDownDialogControlDefinition.register(nifty);
    ScrollPanelDialogControlDefinition.register(nifty);
    MessageBoxDialogDefinition.register(nifty);
    ChatControlDialogDefinition.register(nifty);
    TabsControlDialogDefinition.register(nifty);
    TreeBoxControlDialogDefinition.register(nifty);
    TextFieldDialogControlDefinition.register(nifty);
    SliderAndScrollbarDialogControlDefinition.register(nifty);
    DragAndDropDialogDefinition.register(nifty);
    EventConsumeDialogDefinition.register(nifty);

    createIntroScreen(nifty);
    createDemoScreen(nifty, resolutionControl);
  }
}

redpajama_set_name: RedPajamaGithub


A safe and secure NSW through effective firearms regulation.
To provide superior firearms and weapons licensing services to the community of New South Wales.
The Firearms Registry is part of the NSW Police Force and is responsible for administering the Firearms and Prohibited Weapons legislation.
Our mission is to increase community awareness and education in relation to firearm and prohibited weapon related requirements by providing the community with information on the possession, use and safe storage of firearms and prohibited weapons.
The Firearms Registry offers a range of services, including issuing firearm licences and permits to individuals, businesses, clubs and dealers, the registration of firearms and the monitoring of compliance of the Firearms Act 1996, the Weapons Prohibition Act 1998 and associated regulations.
Our website provides a range of online services, including the ability to verify a licence or permit, request licence application forms or duplicate firearm registration certificates. Also available are various Forms and FACT Sheets, including information on obtaining a firearms licence or permit and safe storage requirements.
The Firearms Registry has established a customer service line dedicated to providing customers with comprehensive information and guidance regarding firearm and prohibited weapon related matters. The NSW Police Force Firearms Registry Customer Service Line is open for business between 9:00am and 4:00pm Monday – Friday (except public holidays).


text:
NYTIX
New York SHOW Tickets
"The Gin Game" Opens at the John Golden Theatre
By Jennifer R Jones | Posted on October 22, 2015 6:36 PM
The Gin Game opened on October 14, 2015, receiving great reviews but mediocre box office.
James Earl Jones and Cicely Tyson Play a Game of Gin and Wits
This past week, The Gin Game opened at the John Golden Theatre. The show had been running in previews since September 23, 2015, and is scheduled for a limited engagement to close on January 10, 2016. Taking place in a nursing home in the present day, the play was originally written in 1976 when it had its first production in Hollywood, California. It then transferred to Broadway in 1977, also at the John Golden Theatre. In 1978, the play won the Pulitzer Prize for Drama, and was nominated for the Tony Award for Best Play. In 1997, a Broadway revival took place at the Lyceum Theatre starring Charles Durning and Julie Harris, at which point the production received Tony Award nominations for Best Revival of a Play, Best Direction of a Play, and Best Leading Actress in a Play. This Broadway revival may be the most star-studded production yet. Both James Earl Jones and Cicely Tyson – who are the only performers in this two-hander – are veteran stars of both stage and screen. James Earl Jones won his first Tony Award in 1969 with The Great White Hope. He also won a Tony for his 1987 performance in Fences, and two Primetime Emmys in 1990 for his performances in Heat Wave and Gabriel's Fire. At age 90, Cicely Tyson is a bona fide legend. She recently won a Tony Award for her performance in the 2013 production of The Trip to Bountiful.
The Critics Are Almost Unanimous in Their Praise
Upon seeing the production, Charles Isherwood of The New York Times called the revival excellent, deeming that the actors are still in their prime even if the play is not the finest he has seen. David Rooney of The Hollywood Reporter agreed the play was slight for a Pulitzer Prize winning drama, but relished in the opportunity to see James Earl Jones and Cicely Tyson in such infectiously delightful performances. Matt Windman from AM New York was impressed that at age 84, James Earl Jones was the youngest cast member on stage, enjoying the deep accomplishments of both actors in the play. Robert Kahn of NBC New York loved the play, calling it lonesome, raw, and naturalistic, warning that it may be frightening to see such a candid view of old age but loving it nonetheless. Only Adam Feldman from Time Out New York was more restrained in his praise, finding the interchange between Tyson and Jones to be less than compelling, and the dramatic tension between them not entirely believable. Still, the overall critical response was overwhelmingly positive.
A Difficult Sell at the Box Office
Even with such huge stars on the marquee, The Gin Game hasn't been doing very well at the box office. In the last reported week of box office figures, the week ending October 18, 2015, it brought in $344,764, which represents 50.68% of its gross potential. This was only a minor increase of $3,281 from the week before, when the gross was $341,483, or 50.20% of the gross potential. The week before that was slightly better, with a gross of $351,748 or 50.62% of its gross potential. And the highest percentage reached yet of gross potential was in the first partial week of six performances, with a weekly gross of $321,528, or 53.98% of gross potential. All in all, this is a slow paced sell at the box office, and it doesn't help that they are only playing seven performances a week. Time will tell whether sales will pick up as word of mouth spreads.
Also on NYTIX.com
Princess 'Diana' To Open On Broadway During Real-Life Royal Family Turmoil
Broadway Show Ticket Sales Analysis Chart w/e 01/12/2020
Broadway Week 2020 Launches With Limited Inventory & Technical Issues
Love Broadway? Connect with Us!
Copyright © 2020 New York Show Tickets Inc.
Get Added To Our Email List
Theatre Availability List
Discount Broadway Ticket Prices
Discount Broadway Ticket Guide
Lottery Schedule
Broadway Show List
Broadway Theatre List
TKTS Discount Ticket Booths
Broadway Articles

redpajama_set_name: RedPajamaCommonCrawl


Try this mashed sweet potato recipe that pairs well with pork and chicken.
These potatoes use ginger and cinnamon for flavoring with a few marshmallows on top, which helps to keep the sugar low.
This sweet potato side dish goes perfectly with ham or turkey.
Heat oven to 350°F. Spray a 1 1/2-quart casserole with vegetable cooking spray; set aside.
Combine potatoes, cinnamon and ginger in a 3-quart bowl. Beat with an electric mixer on medium speed until potatoes are fluffy and almost smooth. Stir in broth and beat until well-mixed.
Spoon sweet potato mixture into prepared dish. Sprinkle marshmallows over the top and bake for 20 minutes, or until potatoes are hot and marshmallows are golden brown.


text:
Beovision All-in-One Contour Brings the Theatre Home
Man of Many, 1 Jan 2021
Despite the nearly heroic efforts of people to make the most of the pandemic restrictions and recreate favourite experiences at home, it's hard to beat actually going to a theatre to enjoy a movie. There's just something about the theatre-going experience that just can't be replicated with a home entertainment system. But that doesn't mean that companies haven't come close, and one of the brands to be the most successful in their attempt is Bang & Olufsen. Their latest luxury TV, the Beovision Contour, provides everything but the ambience for a theatre experience in your home.
Samsung Unveils Astonishing 110-inch MicroLED TV Worth $200,000
LG SIGNATURE Series is Luxury Living Personified
Mi TV LUX Transparent TV is Completely See Through
The Beovision Contour is a full-featured home entertainment system centred around a 48-inch screen. The design is minimalist, much like the silver screen, and the modernist look will fit right in with the rest of your home décor. The screen features an OLED panel made by LG. The display makes full use of over 8 million pixels, providing a maximum resolution of 3840 x 2160.
Vibrant colours and deep blacks are made possible by the 4K a9 Gen3 AI Processor. Below the screen is a soundbar dressed elegantly in a wood slot and framed by an aluminium border. The speakers feature 11 power amplifiers and drivers, including a 4×4-inch custom-designed bass driver. The 3-channel audio system supports Dolby Atmos. You can get the TV with either a floor or table stand, or you can mount it to the wall.
Getting your favourite movie or TV show to the TV is accomplished via a bevy of connection options. You can use Bluetooth or WiFi to watch and listen. The Contour has Chromecast built-in, along with Apple Airplay 2, TuneIn and Deezer music services. You can also connect with other Bang & Olufsen compatible devices, including the Beoremote One.
The Beovision Contour will be available come February in either Silver or Black Anthracite for $5,900.
Bang & Olufsen Beolit Version 20 Update Offers More Crisp, Clear Sound
Rapha and Bang & Olufsen Head Indoor with E8 Sport Earphones
B&O Turns Back the Table for the Beogram 4000c
Bang & Olufsen Beoplay H95 Distills the Best into One Sound
ON Pairs with Bang & Olufsen for Marathon Session Running


text:
"We have been looking forward to this rematch," says Craig
Revenge on skipper's mind ahead of Peterborough's trip to The Den
It's more than six months since The Lions suffered their heaviest defeat of the season at the hands of the Posh, but captain Tony Craig admits the 5-1 humbling is still fresh in the minds of Millwall team-mates.
"It's an important game for us and a rematch we have been looking forward to," Craig told millwallfc.co.uk
"We certainly know their strengths and weaknesses and they will say the same about us.
"Our home record is very good and we hope that the fans will get behind us as we look to get back into the top six."
The Lions were held to a goalless draw at a rain-soaked Oldham on Saturday, but the skipper believes the result will be "valuable" as the club looks to keep touch with the play-off places.
"It was a valuable point, especially looking back at the conditions we had to play in. We couldn't play as fluently as we would have liked but it will be a good point at the end of the day."
Goalkeeper Tom King again drew praise for an impressive display between the sticks, keeping a second consecutive clean sheet since replacing the injured Jordan Archer.
"He's a very good, young keeper and he has a bright future ahead of him. He has pulled off some great saves and is settling in really well," Craig added.
"We start defending from the front and we have a great team that knows the importance of doing the little things right. We are getting clean sheets but unfortunately we haven't been scoring either, hopefully that will change on Tuesday night."
Tweets by @MillwallFC


text:
Q: transitioningDelegate never called after Segue transition So I'm trying to implement a custom animation as my app transitions from one View Controller to another, but for some reason the animateTransition function in my custom animation class is never called.
For the record, I'm using Xcode 8 and writing in Swift 3. The problem I'm trying to over come, is that the function is never called - I'll sort out the actual animation in the future, for now its
Here is the code in my CustomPresentAnimationController class, which should handle the transition animation...
import UIKit

class CustomPresentAnimationController: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate, UINavigationControllerDelegate {

    let duration = 0.5

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        print("Checking duration")
        return duration
    }

    func animationController(forPresented presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        print("This ran 1")
        return self
    }

    func presentationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        print("This ran 2")
        return self
    }

    func animationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        print("This ran 3")
        return self
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

        print("It's working!")

        guard let fromView = transitionContext.view(forKey: UITransitionContextViewKey.from) else {
            return
        }

        guard let toView = transitionContext.view(forKey: UITransitionContextViewKey.to) else {
            return
        }

        let container = transitionContext.containerView

        let screenOffDown = CGAffineTransform(translationX: 0, y: -container.frame.height)

        let screenOffUp = CGAffineTransform(translationX: 0, y: container.frame.height)

        container.addSubview(fromView)
        container.addSubview(toView)

        toView.transform = screenOffUp

        UIView.animate(withDuration: duration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.8, options: [], animations: {

            fromView.transform = screenOffDown
            fromView.alpha = 0.5
            toView.transform = CGAffineTransform.identity
            toView.alpha = 1

        }) { (success) in
            transitionContext.completeTransition(success)
        }

    }

}

Here is the code for my ViewController (which both of my View Controllers reference)...
import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        if transitioningDelegate != nil {
            print("Should do something...")
            print(transitioningDelegate)
        } else {
            print("Transitioing Delegate set to nil")
        }
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.navigationController?.delegate = self

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    let customPresentAnimationController = CustomPresentAnimationController()
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        print("doing our custom transition")
        print(segue.destination)
        let destination = segue.destination
        destination.transitioningDelegate = customPresentAnimationController
    }
}

When I run the code, and click on the button I provided, which links to my seance View Controller, and is set to 'Present Modally', the view changes with the standard transition (slides up from the bottom) - and the following is printed out to Xcode:
Transitioing Delegate set to nil
doing our custom transition
<moduleView.ViewController: 0x7fe427f09a40>
Should do something...
Optional(<moduleView.CustomPresentAnimationController: 0x60800002e980>)

Obviously the first line is just as the first view loads, all the rest shows that my transitionDelegate is set on the Segue destination, and is indeed loaded in as the second view loads, and that the transitionDelegate is set to CustomPresentAnimationController... yet none of the functions in that class are ever called as it never prints anything out from those functions.
Any help appreciated!

A: Ensure the method signature for implementing the delegate matches the updated Swift 3 syntax.

redpajama_set_name: RedPajamaStackExchange


Casey is a woman know nows exactly what she wants. She is quick, decisive and confident. While most bridal portrait sessions last closer to 2 hours, we captured all of these beautiful images at her venue in just under an hour. But when you look this fabulous, who needs more shooting time?
Enjoy a peek at the images we captured at Carmel Country Club just a handful of days before the wedding day. She nailed it!
Gown by Winnie Couture and Florals by Lily Greenthumbs.


The 2018 Mzansi Super League is an upcoming edition of the Mzansi Super League (MSL) Twenty20 (T20) franchise cricket tournament, planned to be held in South Africa. It is scheduled to start on 16 November and finish on 16 December 2018. Six teams are scheduled to take part, playing a total of thirty-two matches. A players' draft took place on 17 October 2018, with more than 200 international players expressing their interest to take part.


Want to dive in to Daniel Island history? We'd love for you to join us as we explore the inspiring stories of our past! Individuals can become members for as little as $20 a year. Once a member, you'll enjoy early notifications for special events, members-only receptions with guest speakers, seasonal newsletters, and other perks.
Click below for information on individual or family membership.
Click below to join our mailing list and catch up on everything DIHS.


this should be fixed. IDK what they are doing but look at how they nget the mobs stuck so they can easily clear the dungeon.
near fierce. So far only lifeless people have done this as it is full pk with no jeloc loss they are grieifing anyone who goes or tries to do it.
We all know they outgear us and outnumber us and STILL trashcan so they have to grief people to not get better gear lol. >>> of fierce I believe.


text:
Morning Shift
Erin Aleman On New Role As First Female Executive Director Of CMAP
Nereida Moreno
Chicago Metropolitan Agency for Planning/Twitter
Erin Aleman started her role as the new executive director of the Chicago Metropolitan Agency for Planning on Monday, July 15, 2019.
After a national search, Erin Aleman was hired as the new executive director of the Chicago Metropolitan Agency for Planning. She is the first woman to lead the agency, which is tasked with planning the region's transportation and housing systems.
Morning Shift sits down with Aleman to discuss her background and top priorities for the organization.
GUEST: Erin Aleman, executive director at the Chicago Metropolitan Agency for Planning
LEARN MORE: Chicago region gets a new chief planner (Crain's Chicago Business 6/21/19)
#Chicago Metropolitan Agency for Planning
#CMAP
#Erin Aleman
Preparing Chicago For The Effects Of Climate Change
Report: Inequality 'Impacting Our Economic Growth'
CMAP Seeks Feedback On Plan For The Future


Your dreams are big, but your tuition payments don't need to be. Funding your education is easier with the help of federal, state and private resources, and financial aid can be awarded for academic achievement and/or financial need.
At Waubonsee, we offer four types of financial aid.
Scholarships are educational funds that do not need to be repaid. Scholarships are available from a variety of sources, including the Waubonsee Community College Foundation and other organizations. They can be awarded based on a variety of criteria including academic achievement, financial need and area of study.
Grants are education funds that do not need to be repaid. They are awarded by state and federal government, and are often awarded based on financial need.
Loans must be repaid. Waubonsee students can receive direct loans from the federal government.
Work-Study involves a job on campus, which pays you a salary to help finance your education and other costs. Your FAFSA information determines your eligibility for a work-study job.
Applying for grants, loans and work-study jobs requires the completion of the Free Application for Federal Student Aid (FAFSA). Scholarships have a different application process.


(Not the anon, but curious regardless) If you did do a Gym Leaders series, you could do it like the anime and do two or three Gym Leaders at once, united by element or theme or region, and you could definitely talk about their anime incarnations at the same time. That way we could get your opinion on Leaders and their Gyms in nice little packets and if there did turn out to be ones who you find yourself with a lot to say about, they could have their own posts.
Hmm. Well, to be honest the likelihood of me doing this at any point in the near-to-medium future is slim to none, but if I ever find myself wanting ideas, I'll bear that in mind. Could be interesting to take it as a way of doing a thematic look at different types.


Are you swimming in Zucchini? We are! This year our garden has produced and produced zucchini. So as I am staring at literally over a dozen, thinking what can I do with this, it clicks! I have a recipe for Cabbage Lasagna that my friend Jen gave me years ago that is low-carb that we love. I adapted the recipe using zucchini and decided to give Zucchini Lasagna a whirl. Best of all for me is that this is naturally gluten free recipe!
This recipe is easy to make and tastes delicious. You can make it vegetarian or with meat, your choice. If you choose no meat then just omit and add additional veggies if you desire. I personally love Zucchini Lasagna Maybe even more than the cabbage version. It is perfect for low carb or Keto and tastes delicious! When cabbage is in season you can switch and use cabbage instead too.
You could also use carrots, red pepper, green pepper and other veggies that you have in your garden to the mix. We like to serve this with French Bread and a salad but in my opinion it is complete meal in itself. You can also use cottage cheese to cut costs and reduce the fat by using a fat free version.
Paleo and Dairy Free Adaption: You could use Tofutti Dairy Free Ricotta Cheese and Daiya Dairy Free Cheese to make this Paleo and Dairy Free, omit the Parmesan. You can also use any brand of sauce you want too. Be sure to check the label if you are eating Paleo as you don't want added sugar.
Vegetarian Adaption: Omit Meat and add additional veggies like mushrooms, carrots and peppers.
In a skillet brown your ground beef and onion and drain.
Grease 9x13 pan with oil and place a layer of zucchini on the bottom of the pan. Cover the entire bottom.
Add cooked beef and onions.
Cover with aluminum foil and bake for 1 hour or until zucchini is cooked done at 400 degree temperature.
Going to share this with a friend who was just diagnosed with Celiac disease. Thanks for posting.
What temperature should I set the oven to bake this?
Do you have nutrition value or macro count?


"It must never be forgotten that in a Democracy the beginnings of all good government are to be found in local self-government."
"A popular government without popular information or the means of acquiring it, is but the prologue to a farce or a tragedy or both. Knowledge will forever govern ignorance; and a people who mean to be their own governors must arm themselves with the power which knowledge gives."
The community of Stamford, Connecticut, operates under two forms of local government: the Town, which has no charter, but is under the general Statutes of Connecticut, and the City charter.
The Town has existed since the first settlers came to Stamford from Wethersfield in 1641. The thirty townsfolk held their first Town Meeting that year, and elected their Selectman to "order the common affairs of the people." There have been only two important modifications of this Town-meeting-Selectmen gown government in the 300 years since then. In 1872 a Board of Education was created to manage the schools, and in 1919 a Board of Finance was set up under the General Statutes to review and make recommendations to the Town Meeting on all fiscal matters.
The City developed within the Town to answer a need for special municipal services in the thickly-settled portions of the Town. In 1830, when the total population of the town was 3700, there were 92 families living in the southern part, who wanted services and regulations not needed in the farm-lands to the North. They, therefore, obtained from the State Legislature a charter which set up a Borough in their part of the town. The limits of the Borough were defined. These limits were extended at intervals as the population increased, until in 1893 the Borough was exchanged for a City Charter. This City Charter was replaced by the present Strong-Mayor Charter in 1935 after a referendum.
The 1940 census showed the population of Stamford to be 61,215, of whom 47,938 live within the City. Since over three-quarters of Stamford's population are governed by and must support both Town and City Governments, this information is so arranged that these citizens can see both of their local governments as a whole.


text:
News Sports Lifestyle Entertainment Opinion Obituaries eNewspaper Legals
Grace Berger injured in IU women's basketball win over Auburn
Wilson Moore
Regardless of anything that would happen over the next 39 minutes, the most important moment of the IU women's basketball's game against Auburn in Las Vegas came shortly after tipoff.
Fifth-year guard Grace Berger, the 2021-22 All-American honorable mention, went down holding her right knee on the Hoosiers' third offensive possession. She was eventually helped off the court and spent the rest of the game on the end of the bench, her leg elevated across several chairs. An ice pack taped to the injured knee.
After the game, IU coach Teri Moren didn't have an update on Berger but said she was concerned.
"I knew she was hurt because of the look on her face when I got to her," Moren said. "And that's hard, but what I do know about Grace is she's resilient, she's tough, and we'll get her back to Indiana as quickly as we can and evaluate her. And then we'll go from there. She's our leader, and we'll rally around her. But if I know anything about Grace, whatever it is, she's gonna deal with, she will attack it the way she always attacks everything."
Berger being out long-term would put a major dent in the ambitions of an IU team in the midst of a promising start. The undefeated Hoosiers, who went to the Sweet 16 last year, picked up their second win over a Power Five opponent away from Assembly Hall. Berger is part of an experienced core that includes senior Mackenzie Holmes and Minnesota transfer Sara Scalia.
In Berger's absence, the Hoosiers kept Auburn at a distance throughout the night, but struggled to pull away before winning 96-81.
Trailing for almost the entire night, the Tigers pulled to within 5 points late in the third quarter. Indiana committed only 12 turnovers, but had trouble as Auburn began denying passing lanes and playing more aggressively on defense. That's usually Berger's time. She's a calming presence in close games, doesn't change her style of play or lose composure when opponents go on a run.
With Berger out, Moren looked to junior Chloe Moore-McNeil and freshman Yarden Garzon.
"At this point, it doesn't matter," Moren told them during a timeout. "Either one of you, bring the ball up and get us into our offense."
Garzon finished with 21 points, six rebounds and six assists. Moore-McNeil scored 15 points to go with her six assists. IU won the fourth quarter 28-21 and survived Auburn shooting 40% on 3s.
"Grace does so much for us on both sides of the ball, so having her go down early in the game was difficult, but I think we knew that we had to rally around each other at that moment and do everything necessary to get a win for Grace," said Holmes, who had 26 points on 10-for-10 shooting with 12 rebounds. "And we did a good job of that, but I think it just goes to show how important Grace is to this program."
© 2023 www.heraldtimesonline.com. All rights reserved.


Coming soon! New Deadly Choice shirt designs.
Book in for your 715 health check and not only will you be benefiting your health but you will receive your choice of one the following Deadly Choice shirts.


text:
General view towards 1 St Paul's Place, looking over the Gardens with people relaxing on the grass. In the background Macdonald St Paul's Hotel (Architect not known). To celebrate the Millennium Sheffield created a series of public spaces along with a new Millennium Gallery and Winter Gardens. Collectively known as the 'Heart of the City Project' they were completed in 2002. The re-development of the Peace Gardens was the first stage of the £120 million project to be completed. Opened in December 1998 it is a mix of water features, seating areas, lawns and planting all centred around the relocated and redesigned Goodwin fountain. It is one of the few 'green' spaces within the City centre and has proved very popular with the residents of the City. Three artists have been involved closely with project from the start, each making a significant contribution to the final design. Brian Asquith, Tracey Heyes and Richard Perry have produced designs that combine the natural and the man-made reflecting both the traditions of a great industrial City and the landscape around it.
Location: Peace Gardens. <p> Google maps < https://goo.gl/maps/8BZEv > . <p> General view towards 1 St Paul's Place, looking over the Gardens with people relaxing on the grass. In the background Macdonald St Paul's Hotel (Architect not known). To celebrate the Millennium Sheffield created a series of public spaces along with a new Millennium Gallery and Winter Gardens. Collectively known as the 'Heart of the City Project' they were completed in 2002. The re-development of the Peace Gardens was the first stage of the £120 million project to be completed. Opened in December 1998 it is a mix of water features, seating areas, lawns and planting all centred around the relocated and redesigned Goodwin fountain. It is one of the few 'green' spaces within the City centre and has proved very popular with the residents of the City. Three artists have been involved closely with project from the start, each making a significant contribution to the final design. Brian Asquith, Tracey Heyes and Richard Perry have produced designs that combine the natural and the man-made reflecting both the traditions of a great industrial City and the landscape around it.
DIGITAL IMAGE ONLY
Mary Beth McKenna
Designer for Peace Gardens, Sheffield. Industrial designer and silversmith. Student at Sheffield College of Art, 1947.
HEYES, Tracey
Designer for Peace Gardens, Sheffield. Ceramic artist.
PERRY, Richard
Designer for Peace Gardens, Sheffield. Sculptor.
City squares -- England -- Sheffield
Parks -- England -- Sheffield
Hotels -- England -- Sheffield
Architecture -- England -- Sheffield
Streets -- Accessories
Landscape design -- England (South Yorkshire)
Pedestrian areas
Peace Gardens


text:
Q: Why the client can't dereference the pointer in this situation? I understand the client can manipulate the pointer to the structure in this situation, but can't dereference it. I was wondering why exactly it can't be dereferenced?
stack.h
#ifndef STACK_INCLUDED
#define STACK_INCLUDED

typedef struct Stack_T *Stack_T;

extern Stack_T stack_new(void);
extern int stack_empty( Stack_T p_stk );
extern void stack_push( Stack_T p_stk, void *p_data );
extern void *stack_pop( Stack_T p_stk );
extern void stack_free( Stack_T *p_stk );

#endif

stack.c
#include "stack.h"

struct Stack_T {
    int node_count;
    struct node {
        void *p_data;
        struct elem *p_link;
    } *p_head;
};

main.c
#include "stack.h"

int main(void)
{
    Stack_T stk;
    ...
    return EXIT_SUCCESS;
}

To be more exact, why that object can't be dereferenced in main

A: I assume by "client" you mean "a source file that includes stack.h".
The reason is that struct Stack_T is not actually defined in the stack.h file. It's declared, the typedef makes sure that the compiler understands that there is going to be a struct Stack_T defined somewhere, but not yet.
The stack.c is the only module that needs to know what is inside a struct Stack_T, so the definition of the structure is inside that file.
Clients of this code don't need to know what is inside a struct Stack_T, so they don't see the definition.


text:
Q: Return Observer.create Not returning and code next to it not working using RxSwift Well i am pretty much new to reactive programming. problem is, I have a function(A) which returns an object , now I have another function(B) which subscribes returning object from function A and I make function B also as returning an other object in that subscribe, now this whole return this is not work. I have no idea why is happening.
Any help would be appreciated. Thanks
Function A
func getClassById(classId: Int) -> Observable<Bool> {
    return Observable.create{[weak self] observer -> Disposable in            Alamofire.request("URL", method:.get, parameters: nil, encoding: JSONEncoding.default, headers: self!.getRequestHeader())
            .validate()
            .responseJSON{ response in
                switch response.result {
                    do {
                        let assingnedClass = try JSONDecoder().decode(AssignedClassModel.self, from: data)
                        observer.onNext(true)
                    } catch {
                        observer.onError(error)
                    }
                case .failure(let error):
                    observer.onError(error)
                }
        }
        return Disposables.create()
    }
}

Function B
func getAssignedClassData(classId: Int) -> Observable<[StudentModel]>  {
    return Observable.create{[weak self] observer -> Disposable in // from here code is not going further.
    APIService.singelton
        .getClassById(classId: classId)
        .asObservable()
        .subscribe(onNext: { [weak self] assingnedClass in
            let studentsData = Array(Database.singleton.fetchStudents(byCLassId: classId))
            print(studentsData)
            observer.onNext(studentsData)
            }, onError: { error in
                print(error)
        }).disposed(by: self!.disposeBag)
        return Disposables.create()
        }
}

Function B2
    func getAssignedClassData(classId: Int) -> Observable<[StudentModel]>  {
        return APIService.singelton
            .getClassById(classId: classId)
            .do(onError: { error in
                print(error)
            })
            .map({ [weak self] assingnedClass in
                return Array(Database.singleton.fetchStudents(byCLassId: classId))
// this code will not be triggered as it is after return.
                let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "tabBarVC") as? TabBarViewController
                let transition = CATransition()
                transition.duration = 0.5
                transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
                transition.type = CATransitionType.fade
                self?.navigationController?.view.layer.add(transition, forKey: nil)
                self?.navigationController?.pushViewController(vc!, animated: true)

            })
    }

A: *

*There is no Observable creation needed in Function B. If you want to transform one observable to another you can use map operator.

*There is an error handling trouble in Function B. Error will be caught, but Observable will never be completed. In my example I used just side effect for printing error, so error will be propagated and map will not run. There are some strategies for error handling in RxSwift.

*Function B doesn't need asObservable.

*The result of Function A (assingnedClass) is not used. Probably the real code was simplified.

*There is no observer.onCompleted() after observer.onNext() in Function A. Your observable will not be completed and disposed at time.
Here is my example:
class StudentService {
    ...
    func getAssignedClassData(classId: Int) -> Observable<[StudentModel]> {
        return APIService.singelton
            .getClassById(classId: classId)
            .do(onError: { error in
                print(error)
            })
            .map { _ in Array(Database.singelton.fetchStudents(byCLassId: classId)) }
    }
}

class SomeController: UIViewController {
    ...
    func fetchStudentsAndPushViewController() {
        studentService
            .getAssignedClassData(classId: classId)
            .observeOn(MainScheduler.instance)
            .subscribe(onNext: { [weak self] _ in
                let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "tabBarVC") as? TabBarViewController
                let transition = CATransition()
                transition.duration = 0.5
                transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.default)
                transition.type = CATransitionType.fade
                self?.navigationController?.view.layer.add(transition, forKey: nil)
                self?.navigationController?.pushViewController(vc!, animated: true)
            })
            .disposed(by: self!.disposeBag)
    }
}

BTW. You can try RxAlamofire for you APIService so you won't need to wrap the request into Observable by yourself.


Don't get me anything for my birthday.
No really. I'm not fishing for gifts.
Please don't go looking for something ideal that will surprise me and be just what I've always wanted.
Don't buy me a beautiful and fragrant dozen red roses. Their scent will turn rancid. Their smooth petals will dry and wither. Their thorns will get sharper as their stems turn wooden. They will droop and collect dust, until the dry petals flutter to the ground, one by one by one.
Don't send me on a trip to Fiji or New Zealand or Santa Monica or New York or Galway or Morocco or Sweden or any of those places you know I long to visit. I will only find temporary reprieve and happiness walking the streets and capturing each pixelated memory. It will all fade from my mind when I take that return flight home. As the days, months, and years pass by, I will lose the sights, the smells, the touches, the sounds, and the tastes of all I experienced. It will only leave me wasted and worn and longing to return.
Don't find me my soulmate. The one who lulls me to sleep with the perfect melody and understands my every whimsy and mood, who will hold me close or give me distance, only needing a glance and a vibe from me to know which to choose. I will just find their one fault that I cannot ignore and it will overshadow all of the good that they provide to me. I will drain their soul of all that is precious and loving, like I have done so many times before with other soulmates. I cannot ruin another life.
Don't find me a man with the hairless, Adonis body and the arms that could bear me up into the clouds. It may end up being only one night but that night will make me crave more nights until I could no longer bear the thought of being without him. I would ruin other lives just for physical satisfaction.
Don't give me a 1969 Aston Martin DBS. I couldn't afford the insurance, the gas, the maintenance, so it would just sit in my driveway and look stunning while it rots.
Don't build me a 7 bedroom, 2 wing 4500 square foot home on a 30 acre lot with a quiet ravine on the back of the property near a forest. I would have to clean it and pay taxes on it and furnish every room. I don't have that much patience for shopping.
Don't give me an NAD direct digital sound system with all the accessories and add-ons. Then I would hear all the imperfections in my favourite pieces of music, and I could never listen to those songs again.
Don't whisk me off to the finest five-star rated restaurants with the top chefs in the country and their stellar wine cellars. Something would be too sweet, too salty, too bland, too rich; the wine would oxidize while we chatted about some inane, unimportant subject, and the dessert would be finished too soon.
Don't buy me the perfect emerald pendant laid in 18kt gold with matching earrings, bracelet and ring, or any one of these pieces on its own. Inevitably I will lose part of the set, or I will be too afraid to wear them for fear of losing them, and I will hide them away in a secret drawer that I will forget I use.
Don't give me a handful of gift cards or the one perfect gift card. Whether you realise it or not, you've put a value on me. I fear that you may find me worth more than I find myself.
Don't throw me a huge surprise party and invite all my friends and make them sing that Mildred and Patty Hill standard and then have them shower me with practical gifts or prank gifts or combinations of both, ending the evening with a large cake with at least one candle for me to blow out while everyone cheers. If all my friends were to gather in one room, I guarantee at least one felony homicide would take place, but at the very least, I would spend all night worrying one would. I would never be able to speak to each person there, and I would want to. I would end up exhausted and despondent.
So please don't get me anything for my birthday.
Besides, you've just given me the one present that I needed most.
Lovely! Had you considered or have you read this for Slam?
No I just wrote this this week. I'm in Muskoka for the Slam. But I can read it to you there!
Happy Mother's Day. Because we're selfish.


Our personalized French language courses are adapted to your level and individual learning pace bearing in mind your objectives and availability, for maximum results. Our teaching, adapted to all students, regardless of nationality, age or level isprovided by qualified, experienced French mother-tongue teachers.
The goal is to enable the student to acquire the necessary skills enabling him or her a good command of the language.


text:
Annual Activities
About TYC
Current Centrex 2019 – 2022
Former Centrex
Regional Chapters of TYC
Facts about Tibet
Tibet before 1949
Chinese Intrusion
60 years of struggle
Friends of TYC
Rangzen Award
Martyrs Award
Dalai Lama Kadrin Jaydrin Award
Social Service Award
Chapter Activities
RTYC Chapter Report
Advocacy for Tibet
Panchen Lama Campaign
Environment Campaign
Peace March
Cycle Rally
Tibet's Environment Asia's Security
By: TYCCentrex
Media, News
Tibetan Youth Congress Symposium on
4th June 2017,India International Centre, New Delhi
Amidst the scorching Delhi heat with temperatures upto 48 degrees, the Tibetan Youth Congress symposium on 'Tibet's Environment Asia's Security' was convened at India International Centre in New Delhi on 4 June, 2017. The purpose of the symposium was to raise awareness and to bring attention to China's massive destructions on Tibet's environment by their irresponsible mining and damming projects all contributing to climate change and affecting surrounding Asian nations and the world at large. The presence of the third largest number glaciers in the world and an extensive permafrost makes the Tibetan Plateau the head source of Asia's six largest rivers i.e Yangtze, Yellow, Mekong, Salween, Indus and Brahmaputra and is also referred to as the Water Tower of Asia. These waters are a critical resource to the more than 1.3 billion people in the 10 most densely populated nations on earth surrounding the plateau.
The symposium had two major objectives:
a) It aimed to raise awareness of the environmental impact of Tibet on Asia
b) Calls for a collective proactive approach to hold China responsible for their actions on the environment in Tibet
The symposium was opened by the President of Tibetan Youth Congress Tenzing Jigme who highlighted some of the critical situation of Tibet's environment due to massive destruction led by Chinese government for their major damming and mining projects. He also urged world leaders for immediate action to halt China's major projects which will make huge impact to Asian nations in near future. "Our hope and aim is to raise awareness and bring about a discussion on this important topic which is not only relevant but also should be a cause of major concern for Asia. The future of Tibet and the Tibetan people's freedom is not only a moral issue but also a political and environmental issue," President Jigme stated.
In the scope of deliberation for the symposium, Tibetan Youth Congress had invited Chief guest Tsewang Gyalpo Arya, Secretary at the office of His Holiness the 14th Dalai Lama in New Delhi. Mr. Arya commended TYC for organizing such a symposium which he said is very important for Tibet.
Among the panelist for the symposium were Shri. Mani Shankar Aiyar Former Minister/Diplomat, Prof. Maharaj K. Pandit, Environmental studies at University of Delhi, Tempa Gyaltsen, Research Fellow at Tibet Policy Institute and Lobsang Yangtso, Phd Research Scholar at JNU.
Shri. Mani Shankar Aiyar expressed concerns regarding the United States recent decision to withdraw from the Paris climate accord under the administration of President Donald Trump. "This has made China the greatest supporter of climate change accord. However, China is destroying Tibet's environment at the same time. This has become a serious matter of concern for all of us," said Mr. Iyer.
Prof. Maharaj K. Pandit, spoke on 'Global change and the Himalayan highland crisis'. He said, "Yak is the crucial to economy and livelihood security of Tibetan and highland Himalayan population. If the global warming trend and global change continues than you would have lot of shrubs and woods and plants getting into Tibet. The grasses would go, if the grasses go than the yak goes, if the yak goes, the Tibetan culture goes therefore, not only would you have destroyed habitat of yak, you would have destroyed the culture which is 30,000 years, Tibetan culture will become extinct".
Mr. Tempa Gyaltsen talked about China's dam projects in Tibet and how the dams are affecting the rivers of Tibet and their flow downstream to South East Asia and finally Lobsang Yangtso spoke on China's river politics on the Tibetan Plateau comparative study of Brahmaputra and Mekong.
Tibetan Youth Congress distributed a booklet titled, 'Tibet – The Third Pole', at this symposium which was attended by more than 100 people including long time Tibet supporters and students around New Delhi.
The symposium brought about a substantive discussion during the Q&A and succeeded in being a true knowledge and exchanging ideas session as well as a catalyst for further discussions on this important topic in the future.
Tibetan Youth Congress
Central Executive Committee
McLeod Ganj, Dharamshala
HP 176 219, India
Email : tyc@tibetanyouthcongress.org
Annual Activities (18)
Campaigns (15)
Mass Protest (1)
Tibet Burning (136)
Upcoming Activities (2)
Tibet Burning
©2014 Tibetan Youth Congress


The Federal Reserve's unsound monetary policy in the early 2000s pushed down interest rates excessively, resulting in asset-price inflation, particularly in houses because they are bought primarily with debt. Eventually the bubble burst and house prices fell precipitately; they are still falling. Becker's interesting post argues that the boom and bust in housing have not had as large an effect on consumption (and hence, this implies, on the nonfinancial economy) as the size of the price fluctuations might suggest. He illustrates with the example of a homeowner who has a bequest motive: if people intend to leave their house to their kids, changes in the value of the house will affect the size of the bequest rather than current spending by the owner-parent. More generally, an increase in home values increases the cost of housing by the same amount. If all house prices double (and assume no other prices change), but the owner is not intending to downsize, he cannot "spend" the increased value of the house. However, although increased home values are unlikely to be translated into equal increases in consumption spending, those increased values are likely to have a strongly positive effect on consumption. To begin with, a significant amount of borrowing during the bubble involved the refinancing of existing mortgages rather than the financing of home purchases, and often the incentive for the refinancing was to obtain cash for consumption. Furthermore, some people may downsize, or even become renters, because they want to increase their consumption expenditures, as they can do if they cash out some of the increased market value of their house. And if people feel wealthier because the market value of their savings (which includes the value of a house) is rising, they may reallocate more of their income to consumption, which they can do without impairing the expected value of their savings if their houses are worth more. In other words, a house is a "store of value" (as economists say) rather than just a home, and even if one has no intention of downsizing, the fact that one has a valuable house that could be sold if one needed cash provides a store of value that may persuade you that you can afford to consume more. As a form of savings, a house is illiquid and risky relative to cash, but it is still savings, in the sense of an asset that one could turn into cash if necessary, to increase consumption in the future. And if one's savings shoot up because of an increase in the price of one of one's assets, one may decide to allocate a portion of the increased savings to current consumption. These considerations persuade me that the run-up in housing prices probably did increase consumption significantly. More important, the collapse of those prices, together with the fall in the stock market, has almost certainly had a significant negative impact on current consumption expenditures. Because of rising house and stock prices, the market value of people's savings rose during the housing and stock bubbles and as a result people reduced their savings rate, to the point where it actually was negative for a period during the early 2000s and was no higher than about 1 percent before the crash last September. (This is related to the "store of value" point.) The personal savings rate has since risen to more than 4 percent. The fall in house and stock prices, combined with increased unemployment and fear of unemployment, convinced many people that they didn't have enough precautionary (safe) savings, and so their current savings are heavily weighted toward cash and other riskless, or very low-risk, forms of savings. The reallocation of income from consumption expenditures to very safe forms of savings reduces current consumption without increasing productive investment significantly, and so contributes to the depression.
Interesting, Joe & Josephine Consumer gets flogged if S/he consumes and gets flogged if they save. Just a few months ago all the experts were complaining that Joe & Josphine were not saving enough. Now, the experts are complaining that the two are saving too much. Perhaps we need to reorganize our economic thinking and the economy so that the macroeconomy is not so dependant on the irrational whims and actions of mindless consumer units.
Although I do agree, that a good percentage of the consumption behaivor that occured was based on refinancing of mortgages to take advantage of the "equity" that had built up due to the inflation of home prices and stock prices. Where's that "equity" now and the Bankers that instigated the "run" on that equity?
Interesting. Posner says that certain "considerations persuade me that the run-up in housing prices probably did increase consumption significantly."
Neil..... you've got it again! Our Prof make the case that the Fed policy was unsound but it's a complex world today isn't it?
First, it's only been the last couple of decades that it's been easy for home owners to do equity-out re-fi's. In that earlier time the only reason to re-fi would have been if interest rates dropped enough to cover the transaction costs.
Well, those changes were timely too, as in the 90's stock returns were the "second income", after the crash, home equity became the ATM. Of course one effect of pumping equity out of our homes is to create a tremendous demand for more mortgage capital.
Going back to a generation ago, if the Fed eased "too much" typically it would court inflation or inflation fears; thus mortgage rates would increase in keeping with higher yields on 10 year bonds.
Today....... and specifically in the early 2000's surely one pressure on the fed was to tighten in order to shore up a weak dollar and attract foreign capital that might otherwise be reluctant to take the loss in currency valuation.
I did quite a bit of wondering why those with A Pile bought our low yield bonds in light of a falling dollar and guessed that the doubling in world capital in recent decades meant there was far more "hot money" looking for a safe harbor than any nation or combination of nations could absorb.
But I missed it! I was thinking of foreign biggies buying bonds much we would; getting a measly 5% if we're lucky. And the answer is that they didn't.
Instead they were buying derivatives or otherwise funneling money to those on WS who were leveraging it at 30-1 making 6% mortgages a very attractive proposition.
So Goldman, AIG and others have been "our Fed" for the last eight years and it is their shenanigans that "created" even more "capital" that overheated home prices rather than the fed. With the frothy peak being the NINJA "loans" of giving mortgages to any passing stranger.
Ha! 30 loans on hyper-inflated home valuations to absolute flakes hoping only to flip the house in a year on only enough cash to cover one! These guys HAD to KNOW they too were running a Ponzi concealed only by its complexity.
The conversation keeps coming back to "what are the toxic assets worth" but few or no one seems to take a crack at it. My guess is the mortgage backed stuff is UGLY.
Home prices left the norm about 2000 and it would seem they'll revert to the norm, or if the economy is poor they'll have downward momentum and overshoot the support line to even lower prices. The average stay in a home used to be about 7 years. With all that's gone on I suspect the average life of a mortgage is perhaps 5 years or less. So a lot more than half of the loans being "underwritten" (Ha!) since 2000 are ranging from being far underwater to no equity.
If, as I suspect, the older loans are tucked away in Fannymae the "toxic assets" of the fast crowd are likely to be VERY ugly indeed!
I agree with you. The creation of irresistible short term incentives tipped many consumer's consumption choices towards the short term. We cannot place blame on any one party, administration or piece of legislation. It was the confluence of the "housing experiment" combined with poor responses to the last asset bubble that created an environment that biased short term consumption over longer term consumption.
Rational choice theory is all we need to explain the crisis and the agent's decision to incur debt.
RPB, "rational choice"? A truly rational individual thinks over the long term, not just the short.
Jack, Yep! My cousin's wife was in the Mortgage Business just prior to advent of the "New-Improved Mortgage Business". Her response, "This is Insane"! and she got out of it. Kind of explains it all. As for the valuation of the Assets, it all comes down to the price they'll bring at Market. But, the Bankers are afraid that the value that they have assigned them on their books are multiple factors above their true Market Value, and so, in order to keep their Banks viable, not too mention their jobs, they have no interest whatsoever in finding out their true value.
As we've seen, trouble is the consumer is beyond the reach of the "asset" holder and vice versus as anyone trying to DO a work-out quickly learns. Sooooo, do they hang on to a portfolio where they've little control over what takes place? Let the chips fall? Hard?
Then look at the equation for the prospective buyer of the mess; he too has no control, at least until Congress? or someone delegates work-out power and remuneration to loan servicers..... ie that the servicer will have binding power to do workouts. BIG flaw here though as the servicer is not spending his own money. Instead there will be a bias toward slapping together a "workout" getting the predictably fixed fee per workout and moving on.
So, with the BEST of intent appraising the worth of the "assets" seems an impossible task, and as we've repeatedly seen, best-of-intent is a scarce resouce.
Me? I'm guessing this bump up in the Dow is based on superficial talk of things being "fixed" and a desire to be overly optimistic. One, or more, shoes to drop?
Jack, We're in uncharted waters here and the compass and sextant are broken. Not too mention someone threw the Charts overboard. Dead Reckoning and Gut instinct, tells me more are yet to drop.
Neil, ha! being a long time mariner..... you picked the right metaphor.
"The personal savings rate has since risen to more than 4 percent. The fall in house and stock prices, combined with increased unemployment and fear of unemployment, convinced many people that they didn't have enough precautionary (safe) savings, and so their current savings are heavily weighted toward cash and other riskless, or very low-risk, forms of savings. The reallocation of income from consumption expenditures to very safe forms of savings reduces current consumption without increasing productive investment significantly, and so contributes to the depression.
..............Oh? Surely much of the conservative savings are going into FDIC backed bank accounts where each $100,000 backs over a million bucks of lending capability. So current consumption is reduced by one unit while lending in enhanced by 12 units?
Do not confuse prudence with rationality. Many people engage in behaviors that defies their long term benefits. Look into research on drug users, career criminals and suicide bombers. Shooting heroin, robbing a gas station or killing foreign soldiers all satisfy shorter term goals at the expense of long term utility.
These people use rationality to make their decisions others would not view as a rational decision. Just because it does not satisfy your view on rationality, does not make it a-rational or irrational.
The same is true of those across the entire spectrum of the housing bubble.
RPB, Prudence is not part and parcel of Rational thought and action? No wonder we're in trouble.
Jack put his finger on the issue...leverage in the banking system (broadly defined to include former investment banks and non-bank, unsupervised financial vehicles) was 30x1 in January 2007 and 13x1 in December 2008. Most of that deleveraging occurred after Bear-Stearns weekend. "Toxic securities" is the catch-all which really means both the asset and the multiple loans attached to that collateral, most of which are non-recourse to the borrower. The asset is largely unimpaired, but the deleveraging has put the break-even for the whole package "far up the beach." The plan seems to be to give the taxpayer the whole package. What is more, the productive machinery of the US economy was geared to 20x leveraged economy. Now, banks are lending at 8 or 10x1 and the non-bank banks have folded. Can the political economy hold itself together at a 6x1 gearing? What institution, with what oversight, can create a higher multiplier? Post 9/11 monetary policy flowing through the well-engineered and lightly supervised channel of home-building finance produced a massive investment in the latest, biggest houses. That housing-stock upgrade should not be repeated, though Mr Greenspan today seemed to suggest we cannot get recovery without another round of house-building. It would be better if the next round of U.S. investment yielded more productive assets than outer-ring-suburban mcmansions.
Camp.. Thanks. And listening on Cspn to economists of IMF levels this week, much of the discussion centered on whatever amount has been re-injected into banking, not being enough. The term "bottomless" was heard as well.
Back at "street level" in the housing biz the banks are choking the builders. The "story" is that of "bank regulators" which I assume to mean even local FDIC backed community banks are contracting, and of course they can no longer "underwrite" "something that came from a cow" as one Wall Streeter turned whistle blower, on the top three rating agencies said.
The result is a chilling effect that is breaking builders who should be able to make it otherwise.
There are likely different squeeze plays in each region but here it looks like this: Builder A has "too many lots" that "aren't moving" or at least the absorbtion rate is slower.
One reason is that deals involving contingencies (ie contingent on the buyer selling his existing home) are mostly a no-no. The bank has a point.... as sometimes contingent deals result in the builder having another "spec" home if the prospective buy defaults.
Another effect is that the "move up" market is slower despite an actual increase in home prices in this region. Thus "move up lots" are a drag that prevents a builder from acquiring lower priced lots for the first time buyer market which is inherently a stronger market and SHOULD benefit from the $8,000 FTB credit. Though that too is a bit screwed up for builders; as a practical matter it will end in two months as it's set up for "closing date" rather than contract date, so the time to build and finance the home consumes the other 5-6 months until November 30th.
The operative date should be contract date as that would create an urgency to contract in the traditionally slow fall and winter months, instead of a chaotic rush to "close" before December. Also, the change would create parity between sellers of new homes and older homes.
But does it make sense to spur homebuilding prior to sopping up the surplus inventory? Absolutely! As the excess "Mcmansions" of certain areas do not fit the needs and price ranges of much of the market and we are "starting" less than one third the number of homes of the 1.7 million required for population growth and replacement of worn out homes.
Other reasons to spur housing is that no other area of the economy gives the "bang for the buck" since the exchange of 5-20% down triggers the entire expenditure and the associated jobs and sales of new (typically US made) appliances and furnishings. The auto biz is the next best bang since those purchases too are leveraged over 3-5 years, and it is these industries that led us out of every post WWII recessions.
Gspan is right as he often, but not always! is. And you are right too..... If the Mcmansions of recent years can be compared to the huge Cadillacs of the 70's, I'd hope that the new homes would be more "BMW-ish", smaller but with nice amenities, and FAR, FAR, FAR more attention paid to energy conservation measures.
Lastly? to avoid a start-stop problem. If many small and medium builders are unnecessarily knocked out of the home building industry when the predictable shortages of the right product happens, it will be filled only by the few left standing who'll be able to exact oligopolistic pricing. The barriers to entry at a competitive level are fairly high and it may take years before a competitive environment is recreated, if ever.
Many here probably saw the merger of Pulte and Centex --- one having A Pile of cash $4 billion? the other lots of land in the growing "sunbelt" areas. They'll be buying up the assets of weak builders and stockpiling land during the down turn and be well poised to freeze out pesky competition when the rebound takes place.
It all is A Mess!
I can't help but notice a few things: first, we are a nation at war. Just as we hijacked a German radio station and spread propaganda during world war two, for the purposes of influencing what the Germans (including military, government, public servants and their families)would do, could it be possible that the transnational corporations, such as banks, are also influencing what we do during this time? Iraq and Afghanistan are not considered world powers, but the reality of oil shocks, coupled with rival superpowers who can set up an army of short-sellers CAN throw off the reserve requirements, cause banks to call in loans, or to unwind leveraged positions in other institution not because they are trying to overthrow the hegemonic power of the United States, but to exploit a distraction. Incidentally, there is one other ingredient to this downturn: it was preceded by rampant fraud, some of it consistent with identity theft. I am a victim of identity theft, and connected with the military. As a result and in spite of government's effort to shield me from the worst, I can't help but notice that--on paper--I owe more than I do, and there is nothing I can do to recover. The rebound will take place only when we recognize our boundaries, personally, professionally, financially, and internationally. If we keep overstepping those bounds and continue to lie to consumers about our balance sheets, leverage, and data practices, if we continue to lie to businesses, and even to courts, we can expect a chilling effect, because we are squandering two precious resources, the social capital of trust, and our time.
Well, that's good. Very good.