Last Sunday we focused in on a story from 1 Chronicles 13:13-14. David begins to bring the Ark of the Covenant to Jerusalem. In a hasty attempt to load the ark on a cart pulled by mules, the ark begins to slide off and Uzzah reaches out to steady the ark. Because of their careless attitude towards worship/the Divine God strikes Uzzah. David and the other Israelites take a step back to re-evaluate their approach to bringing the ark to Jerusalem. In the meantime, the ark is left in the care of Obed-Edom the Gittite. If you remember from our sermon, the Gittites were people from Gath (the same Gath as the infamous Goliath). Despite being a foreigner, and having a shaky history with Israel in the past, this man from Gath houses the ark. And God blesses Obed-Edom and his household.
In our reading from this week (1 Chronicles 21-29) the person of Obed-Edom re-emerges as one of those listed with the gatekeepers and musicians. 1 Chronicles 26:4 simply inserts Obed-Edom into the list. We aren't given any genealogical record for Obed-Edom, although the total claiming to be descended from Obed-Edom is 62, more than any other line of gatekeepers. Obed-Edom is simply inserted into the line of the gatekeepers.
What's the point? Last Sunday I talked about how God is welcoming in the strangers, outsiders, and foreigners. Anyone and everyone is welcome to come and be counted as the People of God as long as they faithfully seek God. And now this outsider guy-from-Gath is participating in the worship of God. Not only him, but he leaves a legacy after him of families devoted to the worship and service of YHWH.


text:
<?php

namespace Projects\BlogBundle\Entity;

/**
 * Projects\BlogBundle\Entity\Comment
 *
 * @orm:Entity(repositoryClass="Projects\BlogBundle\Repository\CommentRepository")
 * @orm:Table(name="sfb_comment")
 */
class Comment
{
    /**
     * ID
     *
     * @var integer
     *
     * @orm:Id
     * @orm:Column(type="integer")
     * @orm:GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * ID of post
     *
     * @var integer
     *
     * @orm:ManyToOne(targetEntity="Post", inversedBy="comments")
     * @orm:JoinColumn(name="post_id", referencedColumnName="id", nullable=false)
     */
    protected $postId;

    /**
     * ID of user
     *
     * @var integer
     *
     * @orm:ManyToOne(targetEntity="User")
     * @orm:JoinColumn(name="user_id", nullable=true, referencedColumnName="id")
     */
    protected $userId;

    /**
     * Author
     *
     * @var string
     *
     * @orm:Column(type="string", length="50", nullable=true)
     * @assert:NotBlank(message = "Представиться")
     */
    protected $author;

    /**
     * Email
     *
     * @var string
     *
     * @orm:Column(type="string", length="50", nullable=true)
     * @assert:NotBlank(message = "Ввести email")
     * @assert:Email(message = "Ввести правильный email")
     */
    protected $email;

    /**
     * URL
     *
     * @var string
     *
     * @orm:Column(type="string", length="50", nullable=true)
     */
    protected $url;

    /**
     * Comment
     *
     * @var string
     *
     * @orm:Column(type="text")
     * @assert:NotBlank(message = "Ввести комментарий")
     */
    protected $comment;

    /**
     * Created time
     *
     * @var integer
     *
     * @orm:Column(name="created_at", type="datetime")
     */
    protected $createdAt;

    /**
     * IP
     *
     * @var integer
     *
     * @orm:Column(type="integer", nullable=true)
     */
    protected $ip;

    /**
     * User Agent
     *
     * @var string
     *
     * @orm:Column(name="user_agent", type="string", length="100", nullable=true)
     */
    protected $userAgent;

    /**
     * Is approved?
     *
     * @var boolean
     *
     * @orm:Column(columnDefinition="TINYINT(1) UNSIGNED DEFAULT '1'")
     */
    protected $approved;

    public function __construct()
    {
        $this->createdAt = new \DateTime();
    }

    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set author
     *
     * @param  string $author
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setAuthor($author)
    {
        $this->author = $author;
        return $this;
    }

    /**
     * Get author
     *
     * @return string $author
     */
    public function getAuthor()
    {
        return $this->author;
    }

    /**
     * Set email
     *
     * @param  string $email
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }

    /**
     * Get email
     *
     * @return string $email
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set url
     *
     * @param  string $url
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setUrl($url)
    {
        $this->url = $url;
        return $this;
    }

    /**
     * Get url
     *
     * @return string $url
     */
    public function getUrl()
    {
        return $this->url;
    }

    /**
     * Set comment
     *
     * @param  text $comment
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setComment($comment)
    {
        $this->comment = $comment;
        return $this;
    }

    /**
     * Get comment
     *
     * @return text $comment
     */
    public function getComment()
    {
        return $this->comment;
    }

    /**
     * Set createdAt
     *
     * @param  datetime $createdAt
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;
        return $this;
    }

    /**
     * Get createdAt
     *
     * @return datetime $createdAt
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set ip
     *
     * @param  integer $ip
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setIp($ip)
    {
        $this->ip = $ip;
        return $this;
    }

    /**
     * Get ip
     *
     * @return integer $ip
     */
    public function getIp()
    {
        return $this->ip;
    }

    /**
     * Set userAgent
     *
     * @param  string $userAgent
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setUserAgent($userAgent)
    {
        $this->userAgent = $userAgent;
        return $this;
    }

    /**
     * Get userAgent
     *
     * @return string $userAgent
     */
    public function getUserAgent()
    {
        return $this->userAgent;
    }

    /**
     * Set approved
     *
     * @param  string $approved
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setApproved($approved)
    {
        $this->approved = $approved;
        return $this;
    }

    /**
     * Get approved
     *
     * @return string $approved
     */
    public function getApproved()
    {
        return $this->approved;
    }

    /**
     * Set postId
     *
     * @param  Projects\BlogBundle\Entity\Post $postId
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setPostId(\Projects\BlogBundle\Entity\Post $postId)
    {
        $this->postId = $postId;
        return $this;
    }

    /**
     * Get postId
     *
     * @return Projects\BlogBundle\Entity\Post $postId
     */
    public function getPostId()
    {
        return $this->postId;
    }

    /**
     * Set userId
     *
     * @param  Projects\BlogBundle\Entity\User $userId
     * @return Projects\BlogBundle\Entity\Comment
     */
    public function setUserId(\Projects\BlogBundle\Entity\User $userId)
    {
        $this->userId = $userId;
        return $this;
    }

    /**
     * Get userId
     *
     * @return Projects\BlogBundle\Entity\User $userId
     */
    public function getUserId()
    {
        return $this->userId;
    }
}

redpajama_set_name: RedPajamaGithub


It's time to transition from Halloween to Fall home decor to greet your guests in style for your upcoming Thanksgiving gathering. Before you start planning your Thanksgiving dinner menu, today I have 25 ideas to get you going in the right direction for decorating your porch for a stunning autumn front entrance.
Having a seasonally decorated front porch helps to create a mood within your home as well as stating something deeper about your personality. By going with simpler decorations, you can communicate to others that you appreciate simple yet stylish touches. Through your choice of decorations, you can also make your porch a more inviting space for visitors during the fall season.
Effective fall decorating is all about choosing the right combination of color palettes and schemes. With fall decorations, this means combining browns, oranges, yellows, reds and greens in a way that is pleasing to the eye and right for your porch space.
When choosing from different fall porch decors, it is important to take the overall style of your home into consideration. The wrong porch decorations could detract from your home's charm if not done correctly. You should take time to consider different fall porch design ideas and choose one that works best for your porch.


Gunilla Huddleston joins us today as our new marketing director, our third key hire of the month. Bringing with her a wealth of experience, we warmly welcome her to the Locaria team. Learn more in her press release here.


According to a report out of The Verge, Google is readying a new update for Android Wear that will enable WiFi support for equipped handsets. Adding WiFi would allow for devices with WiFi to be able to continue to receive notifications or see Google Now cards or swap data between devices even without a Bluetooth connection. That's a good deal, right there.
As of today, it's difficult to tell which Android Wear devices even have WiFi included, though. The Sony Smartwatch 3 advertises as being "WiFi ready." However, the rest of the current crop don't mention WiFi at all on their product pages, yet still might contain the capability. We'll see if we can do some digging to find out.
Along with WiFi support, the update is also said to include a gesture that involves flicking your wrist to scroll through notifications. I can't say that this sounds incredibly useful, but in a pinch, it might free you up from having to scroll with your off hand or finger. Finally, the UI will introduce tweaks that make accessing applications and contacts much simpler. If you have used Android Wear at all, you know that tweaks to these areas are probably needed. If you aren't using voice to interact with your watch, then it becomes difficult to deal with specific contacts or apps.
No word was given on a time frame for release of this update.


text:
Q: Maven WSDL2 JAVA JAVA classes not generating Please find below code snippet.
I am using pom.xml to generate java classes, but I am unsuccessful.  Please Let me know where I went wrong:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github</groupId>
    <artifactId>spring-ws-client</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Spring WS sample client application</name>
    <description>The Spring WS sample client application</description>

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-core</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.ws</groupId>
            <artifactId>spring-ws-security</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.3.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jaxws-maven-plugin</artifactId>
                    <version>1.12</version>
                    <executions>
                        <execution>
                     <id> WSDL 1</id>
                     <phase>generate-sources</phase>
                            <goals>
                                <goal>wsimport</goal>
                            </goals>
                    <configuration>
                        <wsdlDirectory>src/main/resources</wsdlDirectory>
                        <wsdlFiles>
                            <wsdlFile>cen_1.0.wsdl</wsdlFile>
                        </wsdlFiles>
                        <keep>true</keep>
                        <packageName>com.xxx.oraclecrm.inbound.census.jaxb</packageName>
                        <sourceDestDir>src/main/java</sourceDestDir>
                    </configuration>
                        </execution>
                    </executions>

                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

Console Output:
Here I am not getting the build failure but the plugin is not generating any code. Here let me know where I went wrong.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Spring WS sample client application 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ spring-ws-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ spring-ws-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ spring-ws-client ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\EOI\Downloads\spring-ws-client\spring-ws-client\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ spring-ws-client ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ spring-ws-client ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ spring-ws-client ---
[INFO] Building jar: C:\Users\EOI\Downloads\spring-ws-client\spring-ws-client\target\spring-ws-client-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.940 s
[INFO] Finished at: 2016-06-06T19:37:29-07:00
[INFO] Final Memory: 12M/212M
[INFO] ------------------------------------------------------------------------

A: I'd suggest using apache cxf codegen plugin instead:
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <sourceRoot>target/generated-code/src</sourceRoot>
                        <defaultOptions>
                            <autoNameResolution>true</autoNameResolution>
                        </defaultOptions>
                        <wsdlOptions>
                            <wsdlOption>
                                <packagenames>
                                    <packagename>com.xxx.oraclecrm.inbound.census.jaxb</packagename>
                                </packagenames>
                                <wsdl>src/main/resources/cen_1.0.wsdl</wsdl>
                                <wsdlLocation>classpath:cen_1.0.wsdl</wsdlLocation>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

redpajama_set_name: RedPajamaStackExchange


Google co-founder leads modest life, says father: "One co-founder of Google may be on the verge of pulling in billions of dollars with the most anticipated public offering in years, but he continues to live modestly, his Russian emigre father said on Monday."
"The elder Brin set the stage for his son's classic American success story by emigrating from the Soviet Union in 1979. The mathematician father had worked as an economist with an institute of the Communist planning agency Gosplan."
"Because of discrimination against Jews, Michael Brin and his wife, a mathematician working as a civil engineer, left in 1979 with their young son Sergey. Michael Brin got a job at the University of Maryland mathematics department where he still teaches, and thought his son might follow in his footsteps."


Situated on top of a hill at Bel Ombre and commands a spectacular view of Beau Vallon bay. Each apartment has a large double bedroom with en-suite bathroom, kitchen and dining/sitting room. All have ceiling fans and the bedrooms are air-conditioned.
The open veranda at the front the apartments provides a relaxing and cool area, where guests relax or enjoy breakfast. All apartments are equipped with gas or electric cooking facilities, refrigerator, microwave oven, iron and television. The apartments are perfect for families and those wanting more room to move around.
The villa is a leisurely five minute walk from the beaches at Beau Vallon and Bel Ombre, Beau Vallon beach being the most popular beach on Mahe, whilst the coral reefs at Bel Ombre offer an ideal place for snorkelling.
There is a shop less than a minute away walk and other bigger shops a bus ride away. If you do not feel like cooking, come and have dinner at our private restaurant at our Beach House which offers creole dishes at EUR 15 per person. This includes a starter and a main course, dessert is optional at an additional EUR 2 per person. Just let our staff know in the morning at breakfast.


text:
Star Wars: The Old Republic patch 1.2 will add companion dances and endgame crafting
The latest Star Wars: The Old Republic Q&A has turned up a couple of useful additions Bioware are planning for patch 1.2, including unlockable emotes tied to the Legacy system, faster travel options for high level planets and new endgame crafting features for all professions.
One of the major annoyances for high level crafters is the fact that that top level PvE and PvP gear is superior to the best buildable items. Bioware say that this is going to be addressed in next month's update.
"We are adding endgame crafting for all professions. This includes augment crafting, the ability to crit-craft custom (orange) gear with augment slots, new endgame schematics, new color crystals, expanded and improved research and reverse engineering and much more," they say.
TOR's 1.2 update will contain four pages of patch notes devoted to crafting alone. When the patch lands we'll be able to "extract base-mods from purple items," letting players take top level base mods out of endgame gear and place them in any customisable set of orange armour. Essentially, if you don't like the look of a piece of TOR endgame gear you can use crafting skills to rip out the stat-boosting mods and plug them into a more stylish suit. Set bonuses will carry over, too.
Patch 1.2 will add extra emotes that can be unlocked using the Legacy system including a "special dance" that will allow you to bust moves in perfect sync with your companion. Bioware have previously mentioned that legacy can also be used to unlock extra race options for different classes.
The patch will also provide the option to skip the annoying orbital stations that act as interim locations between some planetary surfaces and your ship. "We'll be adding an option for players to go directly to their ships from the surface shuttles as opposed to having them run through the Orbital Station to their airlocks," say Bioware. They're also considering allowing speeders in spaceports, but that hasn't been decided yet.
The ships themselves aren't likely to change in a hurry, however. The number of carefully choreographed cutscenes tied to each vessel's interior makes it very, very difficult for Bioware to add new ships, or allow for any changes to each boat's internal design. "We will probably look at addressing this instead by providing a greater sense of ship customization at some point well in the future," they say. That'll likely mean external customisation such as decals or alternative paint jobs rather than entirely new ships.
Update 1.2 is set to arrive sometime next month. It'll also add support for multiple specs, a new Warzone and more. You can submit a question to the TOR devs ahead of next week's Q&A on the Bioware forums .
Playing Total War: Warhammer 3 as the series' weirdest, most ambitious faction

redpajama_set_name: RedPajamaCommonCrawl


text:
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/wm/splitview/split_view_drag_indicators.h"

#include <utility>
#include <vector>

#include "ash/display/screen_orientation_controller.h"
#include "ash/public/cpp/shell_window_ids.h"
#include "ash/public/cpp/window_animation_types.h"
#include "ash/screen_util.h"
#include "ash/shelf/shelf.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/style/ash_color_provider.h"
#include "ash/style/default_color_constants.h"
#include "ash/style/default_colors.h"
#include "ash/utility/haptics_util.h"
#include "ash/wm/overview/overview_controller.h"
#include "ash/wm/overview/overview_window_drag_controller.h"
#include "ash/wm/splitview/split_view_constants.h"
#include "ash/wm/splitview/split_view_highlight_view.h"
#include "ash/wm/splitview/split_view_utils.h"
#include "ash/wm/window_animations.h"
#include "ash/wm/window_util.h"
#include "base/i18n/rtl.h"
#include "base/strings/utf_string_conversions.h"
#include "ui/aura/window.h"
#include "ui/aura/window_observer.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_type.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/display/display_observer.h"
#include "ui/events/devices/haptic_touchpad_effects.h"
#include "ui/views/background.h"
#include "ui/views/controls/label.h"
#include "ui/views/highlight_border.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/core/coordinate_conversion.h"
#include "ui/wm/core/window_animations.h"

namespace ash {

namespace {

// When a preview is shown, the opposite highlight shall contract to this ratio
// of the screen length.
constexpr float kOtherHighlightScreenPrimaryAxisRatio = 0.03f;

// Creates the widget responsible for displaying the indicators.
std::unique_ptr<views::Widget> CreateWidget(aura::Window* root_window) {
  auto widget = std::make_unique<views::Widget>();
  views::Widget::InitParams params;
  params.type = views::Widget::InitParams::TYPE_POPUP;
  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent;
  params.accept_events = false;
  params.layer_type = ui::LAYER_NOT_DRAWN;
  params.parent =
      Shell::GetContainer(root_window, kShellWindowId_OverlayContainer);
  widget->set_focus_on_creation(false);
  widget->Init(std::move(params));
  return widget;
}

// Computes the transform which rotates the labels |angle| degrees. The point
// of rotation is the relative center point of |bounds|.
gfx::Transform ComputeRotateAroundCenterTransform(const gfx::Rect& bounds,
                                                  double angle) {
  gfx::Transform transform;
  const gfx::Vector2dF center_point_vector =
      bounds.CenterPoint() - bounds.origin();
  transform.Translate(center_point_vector);
  transform.Rotate(angle);
  transform.Translate(-center_point_vector);
  return transform;
}

// Returns the work area bounds that has no overlap with shelf.
gfx::Rect GetWorkAreaBoundsNoOverlapWithShelf(aura::Window* root_window) {
  aura::Window* window =
      root_window->GetChildById(kShellWindowId_OverlayContainer);
  gfx::Rect bounds = screen_util::GetDisplayWorkAreaBoundsInParent(window);
  ::wm::ConvertRectToScreen(root_window, &bounds);

  bounds.Subtract(Shelf::ForWindow(root_window)->GetIdealBounds());
  return bounds;
}

}  // namespace

// static
SplitViewController::SnapPosition SplitViewDragIndicators::GetSnapPosition(
    WindowDraggingState window_dragging_state) {
  switch (window_dragging_state) {
    case WindowDraggingState::kToSnapLeft:
      return SplitViewController::LEFT;
    case WindowDraggingState::kToSnapRight:
      return SplitViewController::RIGHT;
    default:
      return SplitViewController::NONE;
  }
}

// static
SplitViewDragIndicators::WindowDraggingState
SplitViewDragIndicators::ComputeWindowDraggingState(
    bool is_dragging,
    WindowDraggingState non_snap_state,
    SplitViewController::SnapPosition snap_position) {
  if (!is_dragging || !ShouldAllowSplitView())
    return WindowDraggingState::kNoDrag;
  switch (snap_position) {
    case SplitViewController::NONE:
      return non_snap_state;
    case SplitViewController::LEFT:
      return WindowDraggingState::kToSnapLeft;
    case SplitViewController::RIGHT:
      return WindowDraggingState::kToSnapRight;
  }
}

// View which contains a label and can be rotated. Used by and rotated by
// SplitViewDragIndicatorsView.
class SplitViewDragIndicators::RotatedImageLabelView : public views::View {
 public:
  explicit RotatedImageLabelView(bool is_right_or_bottom)
      : is_right_or_bottom_(is_right_or_bottom) {
    // TODO(sammiequon): Remove this extra intermediate layer.
    SetPaintToLayer(ui::LAYER_NOT_DRAWN);
    layer()->SetFillsBoundsOpaquely(false);

    // Use |label_parent_| to add padding and rounded edges to the text. Create
    // this extra view so that we can rotate the label, while having a slide
    // animation at times on the whole thing.
    label_parent_ = AddChildView(std::make_unique<views::View>());
    label_parent_->SetPaintToLayer(ui::LAYER_TEXTURED);
    label_parent_->layer()->SetFillsBoundsOpaquely(false);
    label_parent_->SetLayoutManager(std::make_unique<views::BoxLayout>(
        views::BoxLayout::Orientation::kVertical,
        gfx::Insets::VH(kSplitviewLabelVerticalInsetDp,
                        kSplitviewLabelHorizontalInsetDp)));

    label_ = label_parent_->AddChildView(std::make_unique<views::Label>(
        std::u16string(), views::style::CONTEXT_LABEL));
    label_->SetFontList(views::Label::GetDefaultFontList().Derive(
        2, gfx::Font::FontStyle::NORMAL, gfx::Font::Weight::NORMAL));
  }

  RotatedImageLabelView(const RotatedImageLabelView&) = delete;
  RotatedImageLabelView& operator=(const RotatedImageLabelView&) = delete;

  ~RotatedImageLabelView() override = default;

  void SetLabelText(const std::u16string& text) { label_->SetText(text); }

  // Called when the view's bounds are altered. Rotates the view by |angle|
  // degrees.
  void OnBoundsUpdated(const gfx::Rect& bounds, double angle) {
    SetBoundsRect(bounds);
    label_parent_->SetBoundsRect(gfx::Rect(bounds.size()));
    label_parent_->SetTransform(
        ComputeRotateAroundCenterTransform(bounds, angle));
  }

  // Called to update the opacity of the labels view on |indicator_state|.
  void OnWindowDraggingStateChanged(
      WindowDraggingState window_dragging_state,
      WindowDraggingState previous_window_dragging_state,
      bool can_dragged_window_be_snapped) {
    // No top label for dragging from the top in portrait orientation.
    if (window_dragging_state == WindowDraggingState::kFromTop &&
        !IsCurrentScreenOrientationLandscape() && !is_right_or_bottom_) {
      return;
    }

    // If there is no drag currently in this display, any label that is showing
    // shall fade out with the corresponding indicator.
    if (window_dragging_state == WindowDraggingState::kNoDrag ||
        window_dragging_state == WindowDraggingState::kOtherDisplay) {
      DoSplitviewOpacityAnimation(
          layer(), SPLITVIEW_ANIMATION_TEXT_FADE_OUT_WITH_HIGHLIGHT);
      return;
    }

    // When a snap preview is shown, any label that is showing shall fade out.
    if (GetSnapPosition(window_dragging_state) != SplitViewController::NONE) {
      DoSplitviewOpacityAnimation(layer(), SPLITVIEW_ANIMATION_TEXT_FADE_OUT);
      return;
    }

    // Set the text according to |can_dragged_window_be_snapped|.
    SetLabelText(l10n_util::GetStringUTF16(
        can_dragged_window_be_snapped ? IDS_ASH_SPLIT_VIEW_GUIDANCE
                                      : IDS_ASH_SPLIT_VIEW_CANNOT_SNAP));

    // When dragging begins in this display or comes in from another display, if
    // there is now no snap preview, fade in with an indicator.
    if (previous_window_dragging_state == WindowDraggingState::kNoDrag ||
        previous_window_dragging_state == WindowDraggingState::kOtherDisplay) {
      DoSplitviewOpacityAnimation(
          layer(), SPLITVIEW_ANIMATION_TEXT_FADE_IN_WITH_HIGHLIGHT);
      return;
    }

    // If a snap preview was shown, the labels shall now fade in.
    if (GetSnapPosition(previous_window_dragging_state) !=
        SplitViewController::NONE) {
      DoSplitviewOpacityAnimation(layer(), SPLITVIEW_ANIMATION_TEXT_FADE_IN);
      return;
    }
  }

  // views:View:
  void OnThemeChanged() override {
    views::View::OnThemeChanged();
    label_parent_->SetBackground(views::CreateRoundedRectBackground(
        AshColorProvider::Get()->GetBaseLayerColor(
            AshColorProvider::BaseLayerType::kTransparent80),
        kSplitviewLabelRoundRectRadiusDp));
    // TODO(crbug/1258983): Add blur background. This requires fixing a bug
    // that `SetRoundedCornerRadius()` does not work with transform or find a
    // solution to work around.
    label_->SetEnabledColor(AshColorProvider::Get()->GetContentLayerColor(
        AshColorProvider::ContentLayerType::kTextColorPrimary));
    label_->SetBackgroundColor(AshColorProvider::Get()->GetBaseLayerColor(
        AshColorProvider::BaseLayerType::kTransparent80));
    label_->SetFontList(views::Label::GetDefaultFontList().Derive(
        2, gfx::Font::FontStyle::NORMAL, gfx::Font::Weight::NORMAL));

    if (chromeos::features::IsDarkLightModeEnabled()) {
      label_parent_->SetBorder(std::make_unique<views::HighlightBorder>(
          /*corner_radius=*/kSplitviewLabelRoundRectRadiusDp,
          views::HighlightBorder::Type::kHighlightBorder1,
          /*use_light_colors=*/false));
    }
  }

 protected:
  gfx::Size CalculatePreferredSize() const override {
    return label_parent_->GetPreferredSize();
  }

 private:
  // True if the label view is the right/bottom side one, false if it is the
  // left/top one.
  const bool is_right_or_bottom_;

  views::View* label_parent_ = nullptr;
  views::Label* label_ = nullptr;
};

// View which contains two highlights on each side indicator where a user should
// drag a selected window in order to initiate splitview. Each highlight has a
// label with instructions to further guide users. The highlights are on the
// left and right of the display in landscape mode, and on the top and bottom of
// the display in landscape mode. The highlights can expand and shrink if a
// window has entered a snap region to display the bounds of the window, if it
// were to get snapped.
class SplitViewDragIndicators::SplitViewDragIndicatorsView
    : public views::View,
      public aura::WindowObserver {
 public:
  SplitViewDragIndicatorsView() {
    left_highlight_view_ = AddChildView(
        std::make_unique<SplitViewHighlightView>(/*is_right_or_bottom=*/false));
    right_highlight_view_ = AddChildView(
        std::make_unique<SplitViewHighlightView>(/*is_right_or_bottom=*/true));

    left_rotated_view_ = AddChildView(
        std::make_unique<RotatedImageLabelView>(/*is_right_or_bottom=*/false));
    right_rotated_view_ = AddChildView(
        std::make_unique<RotatedImageLabelView>(/*is_right_or_bottom=*/true));

    // Nothing is shown initially.
    left_highlight_view_->layer()->SetOpacity(0.f);
    right_highlight_view_->layer()->SetOpacity(0.f);
    left_rotated_view_->layer()->SetOpacity(0.f);
    right_rotated_view_->layer()->SetOpacity(0.f);
  }

  SplitViewDragIndicatorsView(const SplitViewDragIndicatorsView&) = delete;
  SplitViewDragIndicatorsView& operator=(const SplitViewDragIndicatorsView&) =
      delete;

  ~SplitViewDragIndicatorsView() override {
    if (dragged_window_)
      dragged_window_->RemoveObserver(this);
  }

  SplitViewHighlightView* left_highlight_view() { return left_highlight_view_; }

  // Called by parent widget when the state machine changes. Handles setting the
  // opacity and bounds of the highlights and labels.
  void OnWindowDraggingStateChanged(WindowDraggingState window_dragging_state) {
    DCHECK_NE(window_dragging_state_, window_dragging_state);
    previous_window_dragging_state_ = window_dragging_state_;
    window_dragging_state_ = window_dragging_state;

    SplitViewController* split_view_controller =
        SplitViewController::Get(GetWidget()->GetNativeWindow());
    const bool previews_only =
        window_dragging_state == WindowDraggingState::kFromShelf ||
        window_dragging_state == WindowDraggingState::kFromTop ||
        split_view_controller->InSplitViewMode();
    const bool can_dragged_window_be_snapped =
        dragged_window_ &&
        split_view_controller->CanSnapWindow(dragged_window_);
    if (!previews_only) {
      left_rotated_view_->OnWindowDraggingStateChanged(
          window_dragging_state, previous_window_dragging_state_,
          can_dragged_window_be_snapped);
      right_rotated_view_->OnWindowDraggingStateChanged(
          window_dragging_state, previous_window_dragging_state_,
          can_dragged_window_be_snapped);
    }
    left_highlight_view_->OnWindowDraggingStateChanged(
        window_dragging_state, previous_window_dragging_state_, previews_only,
        can_dragged_window_be_snapped);
    right_highlight_view_->OnWindowDraggingStateChanged(
        window_dragging_state, previous_window_dragging_state_, previews_only,
        can_dragged_window_be_snapped);

    if (window_dragging_state != WindowDraggingState::kNoDrag ||
        GetSnapPosition(previous_window_dragging_state_) !=
            SplitViewController::NONE) {
      Layout(previous_window_dragging_state_ != WindowDraggingState::kNoDrag);
    }
  }

  views::View* GetViewForIndicatorType(IndicatorType type) {
    switch (type) {
      case IndicatorType::kLeftHighlight:
        return left_highlight_view_;
      case IndicatorType::kLeftText:
        return left_rotated_view_;
      case IndicatorType::kRightHighlight:
        return right_highlight_view_;
      case IndicatorType::kRightText:
        return right_rotated_view_;
    }

    NOTREACHED();
    return nullptr;
  }

  void SetDraggedWindow(aura::Window* dragged_window) {
    if (dragged_window_)
      dragged_window_->RemoveObserver(this);
    dragged_window_ = dragged_window;
    if (dragged_window)
      dragged_window->AddObserver(this);
  }

  // views::View:
  void Layout() override { Layout(/*animate=*/false); }

  // aura::WindowObserver:
  void OnWindowDestroyed(aura::Window* window) override {
    DCHECK_EQ(dragged_window_, window);
    dragged_window_ = nullptr;
  }

 private:
  // Layout the bounds of the highlight views and helper labels. One should
  // animate when changing states, but not when bounds or orientation is
  // changed.
  void Layout(bool animate) {
    // TODO(xdai|afakhry): Attempt to simplify this logic.
    const bool horizontal =
        SplitViewController::IsLayoutHorizontal(GetWidget()->GetNativeWindow());
    const int display_width = horizontal ? width() : height();
    const int display_height = horizontal ? height() : width();
    // Calculate the bounds of the two highlight regions.
    const int highlight_width =
        display_width * kHighlightScreenPrimaryAxisRatio;
    const int highlight_height =
        display_height - 2 * kHighlightScreenEdgePaddingDp;
    gfx::Size highlight_size(highlight_width, highlight_height);

    // When one highlight expands to become a preview area, the other highlight
    // contracts to this width.
    const int other_highlight_width =
        display_width * kOtherHighlightScreenPrimaryAxisRatio;

    // The origin of the right highlight view in horizontal split view layout,
    // or the bottom highlight view in vertical split view layout.
    gfx::Point right_bottom_origin(
        display_width - highlight_width - kHighlightScreenEdgePaddingDp,
        kHighlightScreenEdgePaddingDp);

    const gfx::Point highlight_padding_point(kHighlightScreenEdgePaddingDp,
                                             kHighlightScreenEdgePaddingDp);
    gfx::Rect left_highlight_bounds(highlight_padding_point, highlight_size);
    gfx::Rect right_highlight_bounds(right_bottom_origin, highlight_size);
    if (!horizontal) {
      left_highlight_bounds.Transpose();
      right_highlight_bounds.Transpose();
    }

    // True when the drag ends in a snap area, meaning that the dragged window
    // actually becomes snapped.
    const bool drag_ending_in_snap =
        window_dragging_state_ == WindowDraggingState::kNoDrag &&
        GetSnapPosition(previous_window_dragging_state_) !=
            SplitViewController::NONE;

    SplitViewController::SnapPosition snap_position =
        GetSnapPosition(window_dragging_state_);
    if (snap_position == SplitViewController::NONE)
      snap_position = GetSnapPosition(previous_window_dragging_state_);

    gfx::Rect preview_area_bounds;
    absl::optional<SplitviewAnimationType> left_highlight_animation_type;
    absl::optional<SplitviewAnimationType> right_highlight_animation_type;
    if (GetSnapPosition(window_dragging_state_) != SplitViewController::NONE ||
        drag_ending_in_snap) {
      // Get the preview area bounds from the split view controller.
      preview_area_bounds =
          SplitViewController::Get(GetWidget()->GetNativeWindow())
              ->GetSnappedWindowBoundsInScreen(snap_position, dragged_window_);

      aura::Window* root_window =
          GetWidget()->GetNativeWindow()->GetRootWindow();
      wm::ConvertRectFromScreen(root_window, &preview_area_bounds);

      // Preview area should have no overlap with the shelf.
      preview_area_bounds.Subtract(
          Shelf::ForWindow(root_window)->GetIdealBounds());

      gfx::Rect work_area_bounds =
          GetWorkAreaBoundsNoOverlapWithShelf(root_window);
      wm::ConvertRectFromScreen(root_window, &work_area_bounds);
      preview_area_bounds.set_y(preview_area_bounds.y() - work_area_bounds.y());
      if (!drag_ending_in_snap)
        preview_area_bounds.Inset(kHighlightScreenEdgePaddingDp);

      // Calculate the bounds of the other highlight, which is the one that
      // shrinks and fades away, while the other one, the preview area, expands
      // and takes up half the screen.
      gfx::Rect other_bounds(
          display_width - other_highlight_width - kHighlightScreenEdgePaddingDp,
          kHighlightScreenEdgePaddingDp, other_highlight_width,
          display_height - 2 * kHighlightScreenEdgePaddingDp);
      if (!horizontal)
        other_bounds.Transpose();

      if (SplitViewController::IsPhysicalLeftOrTop(snap_position,
                                                   dragged_window_)) {
        left_highlight_bounds = preview_area_bounds;
        right_highlight_bounds = other_bounds;
        if (animate) {
          if (drag_ending_in_snap) {
            left_highlight_animation_type =
                SPLITVIEW_ANIMATION_PREVIEW_AREA_NIX_INSET;
          } else {
            left_highlight_animation_type =
                SPLITVIEW_ANIMATION_PREVIEW_AREA_SLIDE_IN;
            right_highlight_animation_type =
                SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_SLIDE_OUT;
          }
        }
      } else {
        other_bounds.set_origin(highlight_padding_point);
        left_highlight_bounds = other_bounds;
        right_highlight_bounds = preview_area_bounds;
        if (animate) {
          if (drag_ending_in_snap) {
            right_highlight_animation_type =
                SPLITVIEW_ANIMATION_PREVIEW_AREA_NIX_INSET;
          } else {
            left_highlight_animation_type =
                SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_SLIDE_OUT;
            right_highlight_animation_type =
                SPLITVIEW_ANIMATION_PREVIEW_AREA_SLIDE_IN;
          }
        }
      }
    } else if (GetSnapPosition(previous_window_dragging_state_) !=
                   SplitViewController::NONE &&
               animate) {
      if (SplitViewController::IsPhysicalLeftOrTop(snap_position,
                                                   dragged_window_)) {
        left_highlight_animation_type =
            SPLITVIEW_ANIMATION_PREVIEW_AREA_SLIDE_OUT;
        right_highlight_animation_type =
            SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_SLIDE_IN;
      } else {
        left_highlight_animation_type =
            SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_SLIDE_IN;
        right_highlight_animation_type =
            SPLITVIEW_ANIMATION_PREVIEW_AREA_SLIDE_OUT;
      }
    }

    left_highlight_view_->SetBounds(GetMirroredRect(left_highlight_bounds),
                                    left_highlight_animation_type);
    right_highlight_view_->SetBounds(GetMirroredRect(right_highlight_bounds),
                                     right_highlight_animation_type);

    // Calculate the bounds of the views which contain the guidance text and
    // icon. Rotate the two views in horizontal split view layout.
    const gfx::Size size(right_rotated_view_->GetPreferredSize().width(),
                         kSplitviewLabelPreferredHeightDp);
    if (!horizontal)
      highlight_size.SetSize(highlight_size.height(), highlight_size.width());
    gfx::Rect left_rotated_bounds(
        highlight_size.width() / 2 - size.width() / 2,
        highlight_size.height() / 2 - size.height() / 2, size.width(),
        size.height());
    gfx::Rect right_rotated_bounds = left_rotated_bounds;
    left_rotated_bounds.Offset(highlight_padding_point.x(),
                               highlight_padding_point.y());
    if (!horizontal) {
      right_bottom_origin.SetPoint(right_bottom_origin.y(),
                                   right_bottom_origin.x());
    }
    right_rotated_bounds.Offset(right_bottom_origin.x(),
                                right_bottom_origin.y());

    // In portrait mode, there is no need to rotate the text and warning icon.
    // In horizontal split view layout, rotate the left text 90 degrees
    // clockwise in rtl and 90 degress anti clockwise in ltr. The right text is
    // rotated 90 degrees in the opposite direction of the left text.
    double left_rotation_angle = 0.0;
    if (horizontal)
      left_rotation_angle = 90.0 * (base::i18n::IsRTL() ? 1 : -1);

    left_rotated_view_->OnBoundsUpdated(left_rotated_bounds,
                                        /*angle=*/left_rotation_angle);
    right_rotated_view_->OnBoundsUpdated(right_rotated_bounds,
                                         /*angle=*/-left_rotation_angle);

    if (drag_ending_in_snap) {
      // Reset the label transforms, in preparation for the next drag (if any).
      left_rotated_view_->layer()->SetTransform(gfx::Transform());
      right_rotated_view_->layer()->SetTransform(gfx::Transform());
      return;
    }

    ui::Layer* preview_label_layer;
    ui::Layer* other_highlight_label_layer;
    if (snap_position == SplitViewController::NONE) {
      preview_label_layer = nullptr;
      other_highlight_label_layer = nullptr;
    } else if (SplitViewController::IsPhysicalLeftOrTop(snap_position,
                                                        dragged_window_)) {
      preview_label_layer = left_rotated_view_->layer();
      other_highlight_label_layer = right_rotated_view_->layer();
    } else {
      preview_label_layer = right_rotated_view_->layer();
      other_highlight_label_layer = left_rotated_view_->layer();
    }

    // Slide out the labels when a snap preview appears. This code also adjusts
    // the label transforms for things like display rotation while there is a
    // snap preview.
    if (GetSnapPosition(window_dragging_state_) != SplitViewController::NONE) {
      // How far each label shall slide to stay centered in the corresponding
      // highlight as it expands/contracts. Include distance traveled with zero
      // opacity (whence a label still slides, not only for simplicity in
      // calculating the values below, but also to facilitate that the label
      // transform and the highlight transform have matching easing).
      const float preview_label_distance =
          0.5f * (preview_area_bounds.width() - highlight_width);
      const float other_highlight_label_distance =
          0.5f * (highlight_width - other_highlight_width);

      // Positive for right or down; negative for left or up.
      float preview_label_delta, other_highlight_label_delta;
      if (SplitViewController::IsPhysicalLeftOrTop(snap_position,
                                                   dragged_window_)) {
        preview_label_delta = preview_label_distance;
        other_highlight_label_delta = other_highlight_label_distance;
      } else {
        preview_label_delta = -preview_label_distance;
        other_highlight_label_delta = -other_highlight_label_distance;
      }

      // x-axis if |horizontal|; else y-axis.
      gfx::Transform preview_label_transform, other_highlight_label_transform;
      if (horizontal) {
        preview_label_transform.Translate(preview_label_delta, 0.f);
        other_highlight_label_transform.Translate(other_highlight_label_delta,
                                                  0.f);
      } else {
        preview_label_transform.Translate(0.f, preview_label_delta);
        other_highlight_label_transform.Translate(0.f,
                                                  other_highlight_label_delta);
      }

      if (animate) {
        // Animate the labels sliding out.
        DoSplitviewTransformAnimation(
            preview_label_layer,
            SPLITVIEW_ANIMATION_PREVIEW_AREA_TEXT_SLIDE_OUT,
            preview_label_transform, /*animation_observers=*/{});
        DoSplitviewTransformAnimation(
            other_highlight_label_layer,
            SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_TEXT_SLIDE_OUT,
            other_highlight_label_transform, /*animation_observers=*/{});
      } else {
        // Put the labels where they belong.
        preview_label_layer->SetTransform(preview_label_transform);
        other_highlight_label_layer->SetTransform(
            other_highlight_label_transform);
      }
      return;
    }

    // Slide in the labels when a snap preview disappears because you drag
    // inward. (Having reached this code, we know that the window is not
    // becoming snapped, because that case is handled earlier and we bail out.)
    if (GetSnapPosition(previous_window_dragging_state_) !=
        SplitViewController::NONE) {
      if (animate) {
        // Animate the labels sliding in.
        DoSplitviewTransformAnimation(
            preview_label_layer, SPLITVIEW_ANIMATION_PREVIEW_AREA_TEXT_SLIDE_IN,
            gfx::Transform(), /*animation_observers=*/{});
        DoSplitviewTransformAnimation(
            other_highlight_label_layer,
            SPLITVIEW_ANIMATION_OTHER_HIGHLIGHT_TEXT_SLIDE_IN, gfx::Transform(),
            /*animation_observers=*/{});
      } else {
        // Put the labels where they belong.
        preview_label_layer->SetTransform(gfx::Transform());
        other_highlight_label_layer->SetTransform(gfx::Transform());
      }
      return;
    }
  }

  SplitViewHighlightView* left_highlight_view_ = nullptr;
  SplitViewHighlightView* right_highlight_view_ = nullptr;
  RotatedImageLabelView* left_rotated_view_ = nullptr;
  RotatedImageLabelView* right_rotated_view_ = nullptr;

  WindowDraggingState window_dragging_state_ = WindowDraggingState::kNoDrag;
  WindowDraggingState previous_window_dragging_state_ =
      WindowDraggingState::kNoDrag;

  aura::Window* dragged_window_ = nullptr;
};

SplitViewDragIndicators::SplitViewDragIndicators(aura::Window* root_window) {
  widget_ = CreateWidget(root_window);
  widget_->SetBounds(GetWorkAreaBoundsNoOverlapWithShelf(root_window));
  indicators_view_ =
      widget_->SetContentsView(std::make_unique<SplitViewDragIndicatorsView>());
  widget_->Show();
}

SplitViewDragIndicators::~SplitViewDragIndicators() {
  // Allow some extra time for animations to finish.
  aura::Window* window = widget_->GetNativeWindow();
  if (window == nullptr)
    return;
  wm::SetWindowVisibilityAnimationType(
      window, WINDOW_VISIBILITY_ANIMATION_TYPE_STEP_END);
  AnimateOnChildWindowVisibilityChanged(window, /*visible=*/false);
}

void SplitViewDragIndicators::SetDraggedWindow(aura::Window* dragged_window) {
  DCHECK_EQ(WindowDraggingState::kNoDrag, current_window_dragging_state_);
  indicators_view_->SetDraggedWindow(dragged_window);
}

void SplitViewDragIndicators::SetWindowDraggingState(
    WindowDraggingState window_dragging_state) {
  if (window_dragging_state == current_window_dragging_state_)
    return;

  // Fire a haptic event if necessary.
  if (GetSnapPosition(window_dragging_state) != SplitViewController::NONE) {
    OverviewController* overview_controller =
        Shell::Get()->overview_controller();
    if (overview_controller->InOverviewSession() &&
        overview_controller->overview_session()->window_drag_controller() &&
        !overview_controller->overview_session()
             ->window_drag_controller()
             ->is_touch_dragging()) {
      haptics_util::PlayHapticTouchpadEffect(
          ui::HapticTouchpadEffect::kSnap,
          ui::HapticTouchpadEffectStrength::kMedium);
    }
  }

  current_window_dragging_state_ = window_dragging_state;
  indicators_view_->OnWindowDraggingStateChanged(window_dragging_state);
}

void SplitViewDragIndicators::OnDisplayBoundsChanged() {
  aura::Window* root_window = widget_->GetNativeView()->GetRootWindow();
  widget_->SetBounds(GetWorkAreaBoundsNoOverlapWithShelf(root_window));
}

bool SplitViewDragIndicators::GetIndicatorTypeVisibilityForTesting(
    IndicatorType type) const {
  return indicators_view_->GetViewForIndicatorType(type)->layer()->opacity() >
         0.f;
}

gfx::Rect SplitViewDragIndicators::GetLeftHighlightViewBounds() const {
  return indicators_view_->left_highlight_view()->bounds();
}

}  // namespace ash


The largest democracy in the world is undergoing the first phase of the largest election in the world on Thursday. This is only the first phase of the gigantic seven-phase general elections. Prime Minister Narendra Modi is seeking his second them whereas the Congress party is eyeing on improving its tally. Last elections, the Congress could only manage to get 44 seats. This time they will be aiming at crossing the three-digit mark which seems to be an uphill task.
Ninety-one constituencies from 20 states are voting to elect their respective MPs. The first phase of the voting has begun in parts of states including Assam, Bihar, Chhattisgarh, Jammu and Kashmir, Maharashtra, Manipur, Odisha, Tripura, Uttar Pradesh and West Bengal. While the states of Andhra Pradesh, Arunachal Pradesh, Meghalaya, Uttarakhand, Mizoram, Nagaland, Sikkim, Lakshadweep, Andaman and Nicobar Islands and Telangana are voting in a single phase.
Coinciding with the Lok Sabha elections, voting for assembly polls are also being held in four states in order to choose the next governments in these states. Andhra Pradesh, Arunanchal Pradesh and Sikkim are voting in a single phase whereas parts of Odisha are voting for the first phase of the total five phase assembly elections.
Among the VIP leaders contesting in the first phase today are five Union Ministers- Kiren Rijuju (Arunanchal West), Nitin Gadkari (Nagpur), General V.K. Singh (Ghaziabad), Satyapal Singh (Baghpat) and Mahesh Sharma (Gautam Buddha Nagar). AIMIM chief Asaduddin Owaisi who is a three time MP from Hyderabad is also contesting. Rashtriya Lok Dal chief Ajit Singh and his son Jayant Chaudhary is contesting from Muzaffarnagar and Baghpat respectively. National Conference's Mohammad Akbar Lon is contesting from Baramulla. Congress's candidate Imran Masood is in contest with BJP's Raghav Lakhan in Saharanpur constituency.
Opinion polls for the lok Sabha elections highly favor PM Narendra Modi though there have been attacks by the opposition over the state of the economy, failure to create jobs and the crisis in the farm sector. There has also been criticism over the BJP-led government's failure to control the right-wing fringe groups and cow vigilantes that have gone on an overdrive, leading to multiple instances of mob killings across the country.
The centerpiece of the Congress campaign is what the party calls NYAY (Nyuntam Aay Yojana) – an ambitious scheme to provide a minimum basic income of Rs. 72,000 a year for three years to the poorest of the country.
In this elections, almost 90 crore people are eligible to vote this time. The increase is about 9 crore compared to the last time. It is estimated that around 13 crore people are the first-time voters. A total of 1,279 candidates are contesting in this phase. A total of 213 candidates have criminal cases registered against them, ranging from murder to kidnapping, crime against women and hate speech.


text:
Tax season spreads fear among students
josh.snyder
For many NMU students, filing taxes seems like a daunting task. W2s often conjure up images of mountains of paperwork, confusion and frustration. Most see it as a headache that could easily be passed onto someone else, such as professional tax accountants or family members. But filing taxes is an important yet simple process.
Still, many students aren't sure how to file their taxes or where they can go for help.
Junior nursing major Katie Madden said when her mother offered to do her taxes, she took her up on the deal.
"It does seem complicated," Madden said, referring to the paperwork associated with filing taxes. "It seems like a big form."
One of Madden's primary concerns is making a mistake in the filing process, one that could negatively affect her financial aid, a concern many seem to share.
But John Scram, a tax associate for H&R Block, said this shouldn't be a concern for college students.
"It shouldn't have any impact on their financial aid," Scram said. When students apply for financial aid, it's dependent on their parents' income, he added.
According to Scram, the most important piece of information students need to know is if they are a dependent of their parents.
"The first thing students need to do is make sure if their parents are going to claim them," Scram said.
There are many factors, such as age and marital status, which determine if a student is eligible to be a dependent of their parents.
Most students would be dependents of their parents for tax purposes, Scram said.
He added that being a dependent of a parent would not hurt students when filing taxes.
Junior art education major Sarah Elenbaas said she files her own taxes, but knows many students who don't file for these same reasons.
"Some students don't file their taxes because they don't have the time or they don't know exactly how to go about it," she said.
Elenbaas added that filing taxes can seem especially difficult for first timers, adding to an already high amount of frustration.
"[Students] don't have the time and can't afford to do them [themselves]," Elenbaas said.
But students shouldn't let the seemingly infinite stacks of paperwork deter them. Associate accounting professor Steven Foulks said that it's not only important but easy for students to file taxes themselves.
"It's very simple to do," Foulks said. "When you have income, you're going to have to do it every year of your life."
Foulks recommended the IRS's official Web site (www.irs.gov) as a great source of information for students. The IRS site also has links to free filers that students can use.
There are a few things to keep in mind before filing, Foulks said. First is to make sure students have all of their information before filing. If a student files and they later receive more information, they'll have to file an amendment, which means more paperwork. To work around this, Foulks suggests that students file no earlier than mid-February.
"It's always a good idea to wait until the middle of February," Foulks said.
Employers must send out W2s no later than January 31, and if they send them out later they will be subject to a fine, he added.
Students filing taxes for the first time shouldn't get stressed over it. There are plenty of options available for students, almost all of which are simple and free.
The deadline to file taxes is April 15, 2008.
Take notice, out-of-staters
Students who come to Northern from other states and have worked in both their home state and Michigan are eligible candidates for Michigan's income tax reciprocity agreement.
The agreement allows students who have permanent addresses in Wisconsin, Indiana, Ohio, Illinois, Minnesota or Kentucky to not pay any Michigan income taxes. Instead, their employer would withhold income taxes from their home state.
Students can notify their Michigan employer to withhold Michigan income taxes to save them from having to file a tax return in both their home state and Michigan.
"If the student doesn't inform [their] Michigan employer of these facts, then they would withhold state of Michigan taxes. When the student finally figures all of this out, [they] will have to file a tax return with the state of Michigan to get the money erroneously withheld back," associate accounting professor Steven Foulks said.
For example, if a student whose permanent address is in Wisconsin works both a summer job back home and an on-campus job while at school, they can notify NMU to withhold Wisconsin state income taxes and not Michigan state taxes. Because they are not a permanent resident of Michigan, they are not required to pay the state of Michigan any income tax.
If the student were to not inform NMU of this, NMU would still take out Michigan state taxes. If the student wanted to retrieve the money taken from their paychecks by Michigan, they would have to then file both Wisconsin and Michigan state taxes.
Foulks added that it is never too late for students to notify employers of the reciprocity agreement.
Students can visit their state's official Web site to learn more about their state income tax laws.
There are a few places students can go to get help with filing their taxes or to find answers to some general questions.
$ www.irs.gov provides information for how to file your taxes. The site also has a link to a list of free filers that students can use.
$ If students have specific concerns or questions they can stop in at the local IRS office, located at 1055 W. Baraga Ave.
$ Tax accountant John Scram will be available to students Thursday, Jan. 31, in the lobby of Hunt Hall from 7-9 p.m. He will answer any questions students have concerning their taxes.
Holiday Masquerade Ball raises funds for Families Against Narcotics
Local Filmmakers Discuss Iron Town Documentary, Negaunee's Abandoned Old Town
EcoReps Zero Waste Event Turns Hockey Rivalry into Waste Reduction
Out of the archives, into the classroom: NMU's cold cases class
Conservation Data Lab encourages conservation contributions from NMU Students


text:
UIA received a brand new Boeing 737-800 NG aircraft
Saturday, March 17, 2018, Ukraine International Airlines enhanced its fleet with another brand new Boeing 737-800 Next Generation aircraft that arrived at Kyiv Boryspil International Airport from Boeing facilities in Seattle.
The aircraft passed an official registration procedure in Ukraine and received the UR-UIC number. The aircraft accommodates 186 passengers in two-class seating configuration. UIA expects to operate the new Boeing 737-800 NG across its medium-haul route network. The UR-UIC is scheduled to start operating commercial flights on March 20 on Kyiv – Lviv route. UIA expects to receive the next brand new Boeing 737-800 NG aircraft, UR-UIВ, in late March.
"We keep renewing our medium-haul fleet and are glad that one of three brand new aircraft, which UIA expects to receive from Boeing facilities, is currently being put into operation, – noted Evgeniya Satska, UIA Communications Director. – In 2018, our fleet will be enhanced with 4 Boeing-737 NGs, three of them will arrive right off the assembly line. Our team is committed to upgrading our aviation product through fleet renewal & rejuvenation."
In 2018, UIA expects to receive 10 aircraft: 4 wide-body long-haul Boeing-777s, one of them is already in operation, 4 medium-haul Boeing 737-800 NGs, and 2 Embraer-195. This year, UIA will cease operating Boeing-737 Classic aircraft and will take these boards out of its park.
UIA operates 41 aircraft including 28 medium haul Boeing-737 NG aircraft with the average age of 9.4 years. Currently, UIA fleet's total average age amounts to 11.5 years.
Ukraine International (UIA) was founded in 1992. UIA is a 100% privately owned carrier. The airline connects Ukraine with more than 50 capitals and key cities of Europe, Asia, America, Africa, the Middle East, and CIS countries and provides connections with its international partners' flights to over 3,000 other destinations worldwide. UIA operates over 1100 scheduled flights per week. The base airport for UIA is Kyiv Boryspil (KBP). For more information on UIA visit the company's website www.flyUIA.com
Ukraine International Airlines Press Service
Phone./fax: +38 (044) 238 26 97
Beijing - Ukraine, Beijing - Kyiv, Beijing - Lviv, Beijing - Odesa, Beijing - Kharkiv, Beijing - Copenhagen, Beijing - Prague, Beijing - Stockholm, Beijing - Brussels, Beijing - Frankfurt, Beijing - Warsaw, Beijing - Vienna, Beijing - Larnaca, Beijing - Yerevan, Beijing - London


Cayuga Community College is a two year SUNY college in Cayuga County, New York. The college began in 1953 as Auburn Community College. Its main campus is in Auburn, New York. The college also serves Oswego County with its branch campus in Fulton, New York. The college offers associate degrees. There are approximately 4,000 full-time and part-time students. Degree programs include liberal arts for transfer preparation, computer science, criminal justice, broadcasting, art, nursing, geographic information systems, and education.
Question and Answer about "Cayuga County Community College"


text:
Millions of Fish Discovered Dead in Redondo Beach Harbor
Posted on Thursday, March 10th, 2011 at 11:13 am by ReefTools
Find other articles about:
Bait Balls
Redondo Beach Harbor
Reef Tank Emergency
According to CBS Los Angeles, millions of sardines were swept into the Redondo Beach harbor. The surface of the water was absolutely covered by literally thousands of pounds of fish, reaching a thickness of one foot in some places.
The Department of Public Works is responsible for the cleanup, which they say is going to take days. Sardines move in "bait balls", enormous schools, and it seems as if they ended up in the harbor where they quickly consumed the available oxygen. This is believed to be the cause of the massive death, as no toxins were found in the initial testing.
"Sardines consume a lot of oxygen, and there was not a lot of oxygen in the confined area where they were; and so they died of oxygen deprivation," officials said. "It's like putting too many fish in a small aquarium."
This is just an example of just how vital water movement and oxygenation are to marine life. If our tanks, during power outages, it is a lack of oxygen which can cause the most immediate damage. Check out our Reef Emergency Kit article, and remember to agitate the water manually if no other choice if available.
[via CBS Los Angeles]
Glow in the Dark Coral - Coral Magazine Newsletter
In the latest newsletter, Coral Magazine published an article by R...
Ecoxotic Panorama LED 90 Gallon One Year Video
We wanted to share TheBlackReef's video of a 90 Gallon reef tank w...
Fish can talk, says researcher
Shahriman Ghazali, a University of Auckland marine scientist has f...
Scientist urge Australians to support Federal Marine Park
Photo: PJ Robertson Professors Terry Hughes and Bob Pressey, from...
2 Responses to "Millions of Fish Discovered Dead in Redondo Beach Harbor"
Jennifer Fe de Leon says:
March-10-2011
I don't know of I buy that explanation..
Gresham Hendee says:
You should. This is a yearly occurance with both anchovies and sardines. Come to Santa Cruz and visit the harbor. Look at all the devices they have spent hundreds of thousands of dollars to procure and upkeep. Large schools of fish die all around the globe due to O2 starvation.


text:
Pitts: Trumpcare screams out its scorn for the…
Pitts: Trumpcare screams out its scorn for the poor
Rep. Jason Chaffetz, R-Utah, is among the GOP congressmen making unusually dumb remarks about health care. (Cliff Owen/Associated Press)
By Leonard Pitts Jr. |
March 15, 2017 at 8:00 a.m.
Suddenly, there was just blood everywhere.
It erupted from my father's mouth as we sat watching television. I was still struggling to process this horror when my mother, too shaken to drive, asked me — 17 years old and still on my learner's permit — to get us to the emergency room.
Borenstein: Tricks California local officials use to deceive voters
Mathews: Why California's best public servants are leaving office
Skelton: Lithium could help Salton Sea and fight against climate change
Opinion: Why aren't Democrats making Election Day a state holiday?
Hanson: Is Joe Biden leading America toward a systems collapse?
Somehow, we made it. But the ER was crowded with folks like us, poor and bearing loved ones in distress. The hospital couldn't get to my dad right away. They didn't even have a room to put him in.
Instead, my cancer-ravaged father lay for hours on a gurney in a hallway crowded with gurneys, just one more stick figure huddled under a thin blanket. The air reeked of misery and rotting things.
I still remember how angry I was at our inability to have better. I felt abandoned, felt as if we lived unseen at the dark end of a bright and gaudy street.
So I have a visceral response when some well-fed congressman airily suggests, as Rep. Ron DeSantis, R-Fla., recently did in a CNN interview, that if a cancer patient needs treatment, he can just "show up to the emergency room." I'd like to see DeSantis explain that to some out-of-work father whose kid was just diagnosed with leukemia. I'd buy tickets for that.
But then, Republicans have been saying a lot of dumb things about poor people and health care in their zeal to repeal the Affordable Care Act.
Rep. Roger Marshall R-Kan., went biblical to explain why we shouldn't be overly concerned about making sure the poor have access to doctors. In an interview with Stat, a medical-affairs website, he opined as follows: "Just like Jesus said, 'The poor will always be with us. There is a group of people that just don't want health care and aren't going to take care of themselves."
Meantime, Rep. Jason Chaffetz, R-Utah, said poor people need to get their priorities straight. "Rather than getting that new iPhone that they just love and want to go spend hundreds of dollars on that," he told CNN, "maybe they should invest in their own health care."
For what it's worth, Chaffetz and Marshall walked those comments back. Forgive me if I am not impressed. Actions, as they say, speak louder than words and their party's recent action — a bill to replace the ACA — is a bullhorn touting its scorn for the poor. According to the nonpartisan Congressional Budget Office, the GOP bill would result in 24 million people losing their coverage by 2026. Medicaid would be slashed by $880 billion. Planned Parenthood would be effectively defunded for a year.
While the wealthy get big tax cuts.
One hopes poor people are paying attention. It is infuriating to watch politicians pontificate about the underclass — iPhones? Really? — without the bother of actually understanding what life in the economic margins is like. They never speak to the poor, but only about them — or rather, about some abstract stereotype of them.
The poor can be safely ignored largely because they allow themselves to be split along tribal lines of creed and color and kept at one another's throats. Then they are nickled and dimed and robbed damn near blind by monied interests and their political henchmen. The new health care bill is a prime example.
Things like this will continue until the poor understand themselves as a constituency and organize their votes accordingly. It's easy to insult people when you don't have to answer to them.
It'll be different the instant politicians feel compelled to seek poor people's votes. Let's hear them say those insulting things at the dark end of a bright and gaudy street.
Leonard Pitts Jr.
Letters: A new measure | Outrageous fee | Moral imperative | Preserve democracy | Invalid rules | Lack of concern


FAO and partners have organized some relevant events, to see the complete list click here.
On Tuesday April 8, FAO launched the Growing Greener Cities in Latin American and the Caribbean Report during the Side Event.
A "Global Call for Action: City region food systems and sustainable urbanisation" has been launched, to download click here.


'They died that we might live' the moving inscription at the top of the memorial around which villagers at Eastrea gathered to remember those from their community who died in both world wars.
Seven died from the village in the Great War and two from Eastrea died in the last war.
All were remembered, together with others from the village and the Fens who lost their lives in battle, were thought about and remembered during Armistice Day.


BROOKINGS, S.D. – South Dakotans have until Dec. 7, 2015 to review or make changes to their current plan during Medicare Part D annual enrollment period, which opened Oct. 15.
The new plan will take effect on January 1, 2016.
Prior to Sept. 30, 2015 Medicare recipients should have received an annual notice of change and evidence of coverage documents from their current plan provider.
"Make sure to review these documents very carefully as they outline the plan changes made for the 2016 year," said Carrie Johnson, Assistant Professor & SDSU Extension Family Resource Management Specialist.
* Look to see if the monthly premium and/or deductible have changed.
* Check your new co-payments for the drugs have been modified.
* Make sure the medications you are on have not been removed from the insurer's formulary.
* If you have had a change in your health since reviewing last year, make sure that your new medications are covered.
* Confirm that your medications are on the same drug tier for the year ahead. If not, you may have a lower or higher co-payment during the year.
* Make sure your pharmacy still intends to accept your plan.
To check all of these items, visit the Medicare website. Once your personal information is entered, the site it will give you the best options for your situation.
"It doesn't hurt to just run the numbers to see if making a change can save you money in the long run. If you decide not to make any changes, you can just keep your current plan and do nothing," Johnson said.
* During the coverage gap, beneficiaries will receive a 55 percent discount on the total cost of their brand-name drugs purchased while in the donut hole. The 50 percent discount paid by the brand-name drug manufacturer will still apply to getting out of the donut hole; however the additional 5 percent paid by your Medicare Part D plan will not count toward your TrOOP. Enrollees will pay a maximum of 58 percent co-pay on generic drugs purchased while in the coverage gap.
* Minimum cost-sharing in the Catastrophic Coverage Portion of the benefit will increase to greater of 5 percent or $2.95 for generic or preferred drug that is a multi-source drug and the greater of 5 percent or $7.40 for all other drugs.
* Maximum co-payments below the out-of-pocket threshold for certain low income full subsidy eligible enrollees will increase to $2.95 for generic or preferred drug that is a multi-source drug and $7.40 for all other drugs.


text:
I'll serve Kenyans without bias – Uhuru
President Kenyatta accompanied by the Kwale County Governor Mvurya Salim is entertained by dancers at Ukunda airstrip/PPS
By CAPITAL REPORTER, MOMBASA, Kenya, Apr 26 – President Uhuru Kenyatta said his government is ready to work with leaders in all parts of the country irrespective party affiliation.
"I want to give you my pledge that as the President of Kenya, I am a president of all and I want to work with all for the benefit of this nation," he assured.
The Head of State was speaking at State House Mombasa on Thursday evening during a meeting with leaders from all counties in the coastal region.
Saying the country needs to move forward after the election, President Kenyatta pointed out that elections should not be used to create enmity among Kenyans but be viewed positively where competitors shake hands after the contest.
He emphasised that all elected leaders were chosen by Kenyans in the belief that they will serve them well but that cannot be achieved if the leaders engage in endless political bickering.
President Kenyatta said the time for political competition will come again but now is time for the over 40 million Kenyans to be served by the leaders they elected.
"We are done with the election. Let us now join hands in uplifting the standards of living of our people. Let us transform our country and improve our economy for that is the reason why Kenyans lined up for long hours to vote for us," the president said.
He said he has personally put aside politics and will travel across the country to hold talks with leaders to strategise on how to work together to improve the lives of Kenyans.
President Kenyatta, once again, reaffirmed his commitment to ensuring that devolution is fully implemented as stipulated in the Constitution.
"Kenyans are eager to see the national government performing its duties effectively. They are equally eager to see the county governments operate smoothly and take services closer to wananchi," President Kenyatta said.
The Head of State affirmed his belief that if fully empowered, county governments will address the countries development needs.
The president however said there is need for the national and county governments to work in harmony to avoid friction and duplication of duties.
Said the president: "If we harmonise our development agenda, we can achieve all that we promised the people of Kenya."
President Kenyatta reiterated that there will be hiccups and false starts but that should not be interpreted to mean lack of commitment to implement devolution, adding that these should instead be viewed as genuine human mistakes that are made when people are doing things for the first time.
He cautioned political leaders against wasting time, saying they should instead to start working immediately to deliver results to Kenyans.
"I am happy young people have been elected across the country. As a generation of young leaders let us have a new way of doing things, working together in the same spirit," President Kenyatta said.
In this regard, the Head of State assured Coast leaders that he will work with them in addressing the challenges facing the region including improvement of the infrastructure and the persistent land problem.
"Land is a means of production but not something to always fight for. Let us work together in finding a permanent solution to this problem," the President said.
Speaking during the meeting, the coastal leaders led by governors and senators from all the six counties of the region pledged to work with the President and the national government in implementing development for the benefit of all Kenyans.
The leaders discussed with the president his development agenda for the coastal region.
They thanked President Kenyatta for his full support to devolution and urged all government officials to emulate him for the devolved system of government to succeed.
Those who spoke during the meeting included governors Hassan Joho of Mombasa, Amason Kingi of Kilifi, Issa Timamy of Lamu, Hussein Dado of Tana River, John Mruttu of Taita Taveta and Salim Mvurya of Kwale.
Others speakers were Senator Omar Hassan of Mombasa and nominated senator Emma Mbura.
CAPITAL REPORTER
Other articles from CAPITAL REPORTER
Uhuru asks governors to cease trivialities
We will not entertain talks on secession, Uhuru tells NASA governors
Munya's party backs Uhuru as he ends short dalliance with NASA
Uhuru asks Kenyans to shun petty differences
Jubilee fronts Mvurya for Governors' Chair to smoothen inter-governmental relations
Place the interest of Kenyans above yours, President tells Governors
Marsabit governor, MPs shift allegiance from Raila to Uhuru


Exterior window shutters for windows in a wide variety of the house shutters online or call for custom sizes shop composite exterior window blinds and angled specialty shaped window shutters including fiberglass composite shutters. And custom sizes shop exterior of. Rustic arched plantation shutters, sizes shop exterior shutters add class and exclusive any yard or motorized honeycomb wood blinds and custom orders we have a wide variety of window shades bamboo shades patented and. Shop exterior shutters including fiberglass composite exterior shutters. That can match any yard or call for windows in standard and durable yet adds beauty and durable.


text:
What is the role of the police in America?
To be re-envisioned
To enforce the legal system
To keep communities safe
To hurt people & ruin lives
Police could be reimagined as enforcers of "transit prisons."
The police arrest people and stop crime
The police deter and prevent crime
The police function as emissaries of the judiciary
Police serve and protect
Police keep the peace
The police enforce a racist agenda
The police bully to boost their egos
(1 of 4) Next position >
Rather than lock people away from society, police could let them live in a society with appropriate limits in a broadening of the institution of probation.
(1 of 1) Next argument >
With almost 1% of Americans in prison, we are at a critical juncture in terms of how to define our correctional system [1]. Should it expand, remain as is, or be reformed? There are people on all sides of the debate, but reaching a consensus is important so as to implement cohesive, effective policy regarding prisons and the police.
When people are lucky enough to get probation or parole, minor violations of its complicated rules result in a great many offenders needlessly returning to incarceration [2]. The police are involved in this process both by making their initial arrest, and then monitoring or ending their probation. By merging probation officers and police, the way in which probation works could radically change. Rather than leave people on their own, constant police presence in their life in the form of friendly, helpful officers would reduce recidivism rates. This could be undercover cars following them that are distinct to the offender – i.e. certain white cars are their entourage of cops. This would likely function as a major deterrent to committing more crimes, and cost no more money than incarcerating someone. This reform could be exceptionally helpful to those who are on probation for drug crimes. For example, the officers following a drug addict could use their authority to physically stop this person from purchasing drugs or alcohol - without arresting them. The police could be used to reverse the current drug epidemic by keeping drug addicts sober in the manner described above. By keeping drugs illegal, but aiding drug addicts, police could be both enforcers of the law and rehabilitators. They are currently only being used as punitive forces, and so are not being utilized to their full potential. Their technology, resources, and authority mean they could be as adept at rehabilitation as they are at undercover operations. This argument assumes that by placing a great many offenders on this new version of probation, rates of incarceration and recidivism would drop. This is likely true, but will not be known until the above policy is actuated. The axiom of this argument is that the police should take a more active role in the correctional system, rather than just funneling people to prison.
The police are just one part of the correctional system. They have enough to do without also becoming an amped up correctional officer for drug addicts. Furthermore, a great many people on parole and probation are there for non-drug related offenses. What exactly would the police do for them in this "transit prison" scenario? With such a ridiculous policy, there is no evidence to support the claim that this merging of probation and prisons would cost the same as incarcerating someone. Is this really the best use of our tax dollars? What is so wrong with putting a drug addict who violates probation back in prison? The drug epidemic is real, but the police are in their proper role today as crime stoppers. They really do have enough to do without adopting the role of U.S. Marshall and social worker for a select few. Their technology, time, and resources can be better put to other things. The police's job is to stop and prevent crime, but not in this way. Even if implementing this policy would reduce incarceration and recidivism rates, it wouldn't necessarily be good for society. Think of how much more police presence there would be in everyone's lives as a result.
https://www.prisonpolicy.org/blog/2020/01/16/percent-incarcerated/
https://www.prisonpolicy.org/reports/pie2020.html
This page was last edited on Sunday, 2 Aug 2020 at 18:42 UTC


text:
You are here: Home Page > Arts & Humanities > Philosophy > The Oxford Companion to Philosophy
Available online as part of Oxford Reference - cross-search quality A-Z reference at the click of a button
Library Recommendation Form
The Oxford Companion to Philosophy
Edited by Ted Honderich
New edition of the highly acclaimed and hugely successful Companion
The number one reference book on the subject for readers at all levels
Over 100,000 copies sold!
This new edition features topics and issues that have come to prominence in the last ten years, e.g. animal consciousness, cloning, corporate responsibility, the family, globalization, terrorism
Many new articles on other subjects of wide interest, e.g. heaven, humour, disability, the good life, passion and emotion, sexuality, zombies
Offering clear and reliable guidance to the ideas of philosophers from antiquity to the present day and to the major philosophical systems around the globe, The Oxford Companion to Philosophy is the definitive philosophical reference work for readers at all levels. For ten years the original volume has served as a stimulating introduction for general readers and as an indispensable guide for students and scholars. A distinguished international assembly of 249 philosophers contributed almost 2,000 entries, and many of these have now been considerably revised and updated in this major new edition; to these are added over 300 brand-new pieces on a fascinating range of current topics such as animal consciousness, cloning, corporate responsibility, the family, globalization, terrorism .
Here is, indeed, a world of thought, with entries on idealism and empiricism, epicureanism and stoicism, passion and emotion, deism and pantheism. The contributors represent a veritable who's who of modern philosophy, including such eminent figures as Isaiah Berlin, Sissela Bok, Ronald Dworkin, John Searle, Michael Walzer, and W. V. Quine. We meet the great thinkers--from Aristotle and Plato, to Augustine and Aquinas, to Descartes and Kant, to Nietzsche and Schopenhauer, right up to contemporary thinkers such as Richard Rorty, Jacques Derrida, Luce Iragaray, and Noam Chomsky. There are short entries on key concepts such as personal identity and the mind-body problem, major doctrines from utilitarianism to Marxism, schools of thought such as the Heidelberg School or the Vienna Circle, and contentious public issues such as abortion, capital punishment, and welfare. In addition, the book offers short explanations of philosophical terms (qualia, supervenience, iff), puzzles (the Achilles paradox, the prisoner's dilemma), and curiosities (the philosopher's stone, slime). Almost every entry is accompanied by suggestions for further reading, and the book includes both a chronological chart of the history of philosophy and a gallery of portraits of eighty eminent philosophers.
An indispensable guide and a constant source of stimulation and enlightenment, The Oxford Companion to Philosophy will appeal to everyone interested in abstract thought, the eternal questions, and the foundations of human understanding.
Ted Honderich is Emeritus Grote Professor of the Philosophy of Mind and Logic at University College London. His major work is A Theory of Determinism: The Mind, Neuroscience, and Life-Hopes and is also known for his writings on political philosophy and for the widely successful philosophy readers which he has edited.
"The best introductory guide to buy."--The Economist
"A first-rate book that belongs in every philosophy collection."--Library Journal
Ted Honderich on Philosophy
Philosophy is flourishing. It is not only an ancient subject, but a young one, growing in front of you. And the new edition of the Oxford Companion to Philosophy is full of articles that capture the new trends and issues. Ted Honderich gives a taste of the hundreds of new things that keep the Companion at the sharp edge of philosophical thought...
You would expect to find internet philosophy in the new edition. But when you go to have a look, you are likely to be distracted by the entry world philosophy. Who could resist a glance at a snappy summary of the whole lot? Then, by a slip of a finger on a page, you may find yourself detained by zombies. Just what, you ask, is that new item doing in a respectable philosophy book?
Having satisfied yourself, and found your way to internet, philosophy on the, you are indeed briskly enlightened as to that subject. You will of course be tempted to turn your attention to inverted spectrum. And then Islamic Philosophy Today after Islamic Philosophy.
This sort of experience will confirm that the book remains a browser's delight, maybe a browser's happy downfall. It will also educate you a little more. Zombies have a conceptually useful existence in the current philosophy of mind. The inverted spectrum is the idea of your seeing red where I see blue, but the relevant bits of the rest of our lives staying the same. Also useful.
If science is pushing in on some of its old topics - to my mind usually disastrously - philosophy is also doing some elbowing. The part of it that is the Philosophy of Mind is to the fore these days. And so the Companion also has cognitive architecture in it, not to mention the frame problem. The first of those is about the organization of the mind as it was and is conceived. The second is about the difficulty of replicating human intelligence by use of a computer programme.
Political philosophy adds ableism to the book, this being a prejudice against people with disabilities, and also anti-Semitism and markets and the public good. The Philosophy of Science has in it science, the diversity of, which needed to be added to the unity of science.
So with every part, section and category of philosophy, Aesthetics now includes contemporary art. The Philosophy of Religion has an entry on Buddha himself. The Philosophy of Mathematics is improved by foundationalism.
Moral Philosophy includes ethics and the family, and vices, and pornography. Metaphysics is enriched by the addition of counterpart theory. Logic is better for free logics and model theory. Epistemology catches up on clear and distinct ideas and non-conceptual content. The Philosophy of Language now has in it langue and parole and the Philosophy of Science crucial experiments.
Where do I stop? As a summary, I'm afraid, this is a failure! It left out philosophy publishing, and the end of philosophy, and Schleiermacher, and Wittgenstein Reconsidered, and some new contemporary philosophers who arrive in the new edition, and....
After the Terror
Ted Honderich
Oxford Composer Companions: Haydn
David Wyn Jones
The Oxford Companion to the Year
Bonnie Blackburn and Leofranc Holford-Strevens
Making the Social World
The Oxford Companion to Cheese
Catherine Donnelly and Mateo Kehler
A Cabinet of Philosophical Curiosities
Roy Sorensen
Philosophers of Our Times
John Cannon and Robert Crowcroft
The Oxford Handbook of Skepticism
Actual Consciousness
The Oxford Companion to Wine
The Oxford Handbook of Presocratic Philosophy
Patricia Curd and Daniel W. Graham
The Philosophers
Arts & Humanities > Philosophy


text:
Culture, Religion
December 25, 2019December 27, 2019By Chris R. Armstrong
Christianity is so much more solid, and real, and human, than the "spiritual, but not religious" imitations of today. Christian faith touches every aspect of our lives—material, social, cultural. It does so because our God was born as a human baby in a stable and nurtured by a teenaged girl named Mary.
As 2019 draws to an end, Public Discourse will take a short vacation, with new essays appearing next week. In the meantime, here is a Public Discourse Christmas classic that we hope you'll enjoy. If you appreciate the work that PD does throughout the year, please consider making a donation to our matching campaign. Give $250 or more (or set up automatic monthly gifts of $20 or more), and you'll receive an invitation to a private conference call with Ryan T. Anderson and Mark Regnerus.
Merry Christmas and best wishes for a Happy New Year. — The Editors.
For American Protestants like me, the Christmas season presents us with an opportunity that has become rare today: the opportunity to rediscover a scriptural doctrine with the potential to restore a denatured, disembodied, over-spiritualized faith to wholeness, solidity, and dimensionality. That is, of course, the doctrine of the Incarnation.
The Incarnation is a story before it is a doctrine—a story of a stable, a birth, years of work in a carpenter's shop, table-fellowship with sinners, healing many, feeding many—and at last dying for many, and rising again. The last part of the story, we dwell on always. But do we dwell also on how the story began—how the eternal Creator God came, shockingly, mysteriously, inscrutably, to share our own flesh and humanity?
If we did, then here's what I think would happen: it would begin to dawn on us how the human nature of Christ, who is not only the son of God but also the son of Mary, exalts our humanity.
Learning from Medieval Christians
If we want a full-body immersion in the Incarnation, there's no better place to go than the writings of medieval Christians.
The exaltation of our humanity in the Incarnation was a medieval theme par excellence. No part of the Bible more transfixed them than the stories of the Gospels. No scene was more painted by their artists than the Annunciation. They preached and lived a redemption made flesh, in the activities of their own flesh. They carried out the "seven corporal works of mercy"—feeding the hungry, giving water to the thirsty, healing the sick, providing material resources for others.
Out of a desire to imitate Christ's compassion for those suffering from bodily illness, they poured the work of their hearts into a new institution called the hospital, succored (especially) the poor sick, and so birthed not only modern medicine but also our whole non-profit sector.
Out of fidelity to Christ's command to "love God with their minds," they poured the work of their minds into a new institution called the university, and so laid the foundation for the scientific revolution.
And out of aching devotion to the beauty of God's holiness, imaged forth in Christ, they poured their imaginations and craft and labor into the glorious, soaring beauty of the Gothic cathedrals, and so nurtured and fostered artists in all media from then to now.
Healthcare. Education. Culture. To us, who labor in every kind and corner of modern human work, medieval incarnational faith speaks a "word in season." It tells us:
Our bodies matter.
Our minds matter.
Our relationships matter.
Our work matters.
A Faith That Lives
Christianity is not a set of abstract doctrines. It is a faith that lives—that loves God and neighbor actively and in every walk and work. Our final destination is not a disembodied heaven. It is a New Creation that takes up and perfects (we know not how) all human bodily and social flourishing. Christianity is so much more solid, and real, and human, than the "spiritual, but not religious" imitations of today. Christian faith touches every aspect of our lives—material, social, cultural. It does so because our God was born in a stable and nurtured by a teenage girl named Mary.
What's that you say? This medieval stuff—with its focus on Mary—sounds more Catholic than Protestant? More shame to the Protestants, then. Hear Luther himself: "Mary was not only holy. She was also the mother of the Lord. With trembling and reverence, before nestling him to herself, she laid him down, because her faith said to her, 'He will be 'the Son of the Highest.''" And again: "They must have marveled that this Child was the Son of God. He was also a real human being. Those who say that Mary was not a real mother lose all the joy. He was a true Baby, with flesh, blood, hands, and legs. He slept, cried, and did everything else that a baby does only without sin."
As Luther's words remind us, Mary belongs just as much to Protestants as to the other two great confessions. That was the burden of the "Mary issue" of Christian History, as I expressed in my editor's note. We Protestants may protest that the late medieval church introduced extrabiblical elements of Marian devotion and took wrong turnings in the ways it lived out its incarnational insights. That's a matter for rigorous ecumenical debate, to be sure. But can we at least see that the medieval church started in the right place on the Incarnation? This is where we need to start, too: with the birth of Jesus to Mary, and his sharing of her complete humanity—which now becomes not only his solidarity with us in suffering, but also his active delight and ever-present help in our everyday life and work.
Medieval Christians knew that
if a poor Jewish girl could become the mother of the Incarnate God, and
if that child could grow and learn and work as a humble carpenter and bring God's wisdom to a group of tradesman-disciples in stories of farming and fishing and vine-dressing and even financial investing, and
if God himself could walk the dusty roads of our world and eat and drink with sinners (Matt 11:19), and attend weddings (John 2:1-11), and weep over his dying friend Lazarus (John 11:35), and experience real fear and trembling in the Garden of Gethsemane (Matt 26:36-46) and abandonment by the Father in his crucifixion (Matt 27:46),
then God himself had indeed shared the whole range of our experience. And that means that these lives of ours are important—even our eating and drinking and marrying and getting sick and being healed and eventually dying. And our work too.
Recovering an Incarnational Way of Life
Where does that leave us twenty-first-century Western Christians, surrounded by the weak teachings of a spiritualized faith, forgetful of the humanity of Christ and therefore the humanity of humanity? What can we do to recover a truly incarnational way of living and working?
In our prayers and meditations, we can dwell not only on how Christ's descent into the flesh and blood of humanity made possible his sacrifice for our sins, but also on how it raises up the value and wonder and splendor of our own humanity—everywhere that humanity is exercised and expressed, including in our work places and work relationships.
And we can bring that sense of God's constant presence with us, and his delight in our humanity, into our daily interactions with the natural and cultural world, as St. Francis and the Franciscans did, ever alert for the "ten thousand places" where Christ plays. Yes, even in the fallenness of it all.
For in not just creating us but coming to us, sharing our flesh, and living among us, God has exalted our flesh too—touching all that we do with the potency of divinity. As C.S. Lewis reminds us, "There are no ordinary people. You have never talked to a mere mortal. . . . It is immortals whom we joke with, work with, marry, snub, and exploit. . . . Next to the Blessed Sacrament itself, your neighbour is the holiest object presented to your senses."
This Christmas season, let us allow the Incarnation to birth in us a new awareness of these words—as they apply to our neighbor, and to ourselves, too.
Chris R. Armstrong
Chris R. Armstrong was Professor of Church History at Bethel Seminary (MN) from 2005-2013 and the Founding Director of Opus: The Art of Work at Wheaton College (IL) from 2014-2018. He is the Senior editor of www.christianhistorymagazine.org and blogs at www.gratefultothedead.com... READ MORE