text:
namespace prattle
{
    Client::Client() :
        m_state(UserInterface::State::Login)
    {
        parseConfigFile();

        if (m_clientConf.ui == "gui")
            m_ui = std::unique_ptr<GraphicalUI>{new GraphicalUI{}};
        //else if (m_clientConf.ui == "cli")
        //    m_ui = std::unique_ptr<decltype(m_ui)>(nullptr);
        else
        {
            ERR_LOG("No UI set in config file. Using GUI by default.");
            m_ui = std::unique_ptr<GraphicalUI>{new GraphicalUI{}};
        }

        changeState(UserInterface::State::Login);

        parseLoginFile();

        if (m_loginInfo.enabled)
        {
            changeState(UserInterface::State::Connecting);
            m_loginReqId = m_network.send(Network::Task::Login, {
                                           m_clientConf.addr,
                                           to_string(m_clientConf.port),
                                           m_loginInfo.username,
                                           m_loginInfo.password });
            //m_loginInfo.enabled = false;
            m_ui->setUsernameLabel(m_loginInfo.username);
            m_ui->enableAutoLogin(true);
        }
        else
            m_ui->enableAutoLogin(false);

//        if (m_autoLoginEnabled)
//
    }

    void Client::run()
    {
        while (m_state != UserInterface::State::Exit)
        {
            update();
            draw();
        }
    }

    void Client::update()
    {
        //Poll network
        int networkUpdates = m_network.update();
        while (networkUpdates --> 0) //The Goes-To operator. See § 5.20/1 of the C++11 standard.
        {
            auto reply = m_network.popReply();
            switch (m_state)
            {
                case UserInterface::State::Login:
                case UserInterface::State::Signup:
                    //Not expecting any thing from network in these states
                    WRN_LOG("Received an unexpected network reply in Login/Signup state.");
                    break;
                case UserInterface::State::Connecting:
                    if (reply.id == m_loginReqId)
                    {
                        if (reply.type == Network::Reply::TaskSuccess)
                        {
                            int noOfFriends = stoi(reply.args[0]);
                            //DBG_LOG("User has " + reply.args[0] + " friends.");
                            std::vector<std::string> friends;

                            for (int i = 1; i <= noOfFriends; i++ )
                            {

                                friends.push_back(reply.args[i]);
                                //m_chatHistory[friends.back()] = "";
                                m_chatHistory[friends.back()] = {};
                            }

                            m_ui->fillFriendList(friends);

                            changeState(UserInterface::State::Chatting);

                            m_loginReqId = -1;
                        }
                        else if (reply.type == Network::Reply::TaskError)
                        {
                            if (m_network.isConnected())
                                m_ui->alert("Wrong username/password combination!", false);
                            else
                                m_ui->alert("Unable to connect to server! Please check your internet connection.", false);
                            changeState(UserInterface::State::Login);
                            m_network.reset();
                        }
                        else
                        {
                            //todo: look at the reply and display the specific error/issue through the ui

                            m_ui->alert("Unable to login!", false);
                            changeState(UserInterface::State::Login);
                            m_network.reset();

                            m_loginReqId = -1;
                        }
                    }
                    else if (reply.id == m_signupReqId)
                    {
                        if (reply.type == Network::Reply::TaskSuccess)
                        {
                            m_network.reset();
                            m_ui->reset();
                            changeState(UserInterface::State::Login);
                            m_ui->alert("Signup successful! Login to start chatting!", false);
                            m_signupReqId = -1;
                        }
                        else
                        {
                            //todo: look at the reply and display the specific error/issue through the ui

                            m_ui->alert("Unable to Signup!", false);
                            changeState(UserInterface::State::Signup);
                            m_network.reset();
                            m_signupReqId = -1;
                        }
                    }
                    else
                        WRN_LOG("Received an unexpected network reply in state connecting.");
                    break;
                case UserInterface::State::Chatting:
                    {
                        bool isReplyOk = false;

                        // Code goes here ! (And I mean a lot of it)
                        if (reply.id == Network::InvalidRequest)
                        {
                            // Actually, when the user receives a message,
                            // he receives no request id sicne the task
                            // wasn't created on his side. So, we had no
                            // choice but to use invalidrequest as request
                            // id in case when the user receives a message
                            // from another remote client.

                            if (reply.type == Network::Reply::RecievedMessage)
                            {
                                //if (m_ui->getSelectedFriendItem() == reply.args[0])
                                if (m_ui->getSelectedFriend() == reply.args[0])
                                    m_ui->addToChatArea(reply.args[0] + " : " + reply.args[1]);
//                                if (m_chatHistory.find(reply.args[0])->second == "")
//                                    m_chatHistory.find(reply.args[0])->second = m_chatHistory.find(reply.args[0])->second + reply.args[0] + " : " + reply.args[1];
//                                else
//                                    m_chatHistory.find(reply.args[0])->second = m_chatHistory.find(reply.args[0])->second + "\n" + reply.args[0] + " : " + reply.args[1];

                                if (m_chatHistory.find(reply.args[0])->second.size() == 0)
                                    m_chatHistory.find(reply.args[0])->second.push_back(reply.args[0] + " : " + reply.args[1]);
                                else
                                    m_chatHistory.find(reply.args[0])->second.push_back(reply.args[0] + " : " + reply.args[1]);

                                // set the notification to unread
                                //std::cout << "tabs : " << m_ui->getFocusedTab() << " " <<  reply.args[0] << std::endl;
                                if (m_ui->getSelectedFriend() != reply.args[0])
                                {
                                    m_ui->insertNotif(reply.args[0], "(*) ");
                                    //std::cout << "A" << std::endl;
                                }

                                isReplyOk = true;
                            }
                            else if (reply.type == Network::Reply::OnlineNotif)
                            {
                                //DBG_LOG("x" + to_string(reply.type) + " " + reply.args[0] + "x");
                                m_ui->setStatusOfFriend(reply.args[0], 0);  // remember from GraphicListItem class, 0 is for offline, 1 is for online textures.
                                isReplyOk = true;
                            }
                            else if (reply.type == Network::Reply::OfflineNotif)
                            {
                                m_ui->setStatusOfFriend(reply.args[0], 1);  // remember from GraphicListItem class, 1 is for offline, 1 is for online textures.
                                isReplyOk = true;
                            }

                            else if (reply.type == Network::Reply::FriendAdded)
                            {
                                std::string sender = reply.args[0];
                                DBG_LOG(ADD_FRIEND_REQ + " received from " + sender);
                                // notify the receiver about a new pending friend request
                                // and pop up a nice alert box with accept/ignore options
                                m_ui->alert(sender + " has sent you a friend request! Open friendlist to review", false);

                                // add an inactive friend in the friendlist
                                // until they respond to the request
                                m_ui->addFriend(sender);
                                m_ui->insertNotif(sender, "(*) ");
                                m_ui->setFriendActive(sender, false);

                                isReplyOk = true;
                            }

                            else if (reply.type == Network::Reply::FriendAddedSuccess)
                            {
                                std::string _friend = reply.args[0];

                                DBG_LOG(_friend + " has accepted your friend request!");
                                m_ui->alert(_friend + " has accepted your friend request!", false);

                                m_ui->addFriend(_friend);
                                m_ui->setFriendActive(_friend, true);
                                //m_chatHistory[_friend] = "";
                                m_chatHistory[_friend] = {};

                                //m_friendReqAcIgId = -1;
                                isReplyOk = true;
                            }

//                            else if (reply.type == Network::Reply::TaskSuccess)
//                            {
//                                //m_ui->addFriend(reply.args[0]);
//                                //m_chatHistory[reply.args[0]] = "";
//                                //isReplyOk = true;
//
//                                m_ui->alert(reply.args[0] + " has sent you a friend request", true);
//                                m_ui->addFriend(reply.args[0]);
//                                //m_ui->deselectAll();
//                                m_ui->insertNotif(reply.args[0], "(*) ");   // to highlight and direct the attention
//
//                                ///////
//
//                                m_ui->setFriendActive(reply.args[0], false); // friend isn't in the friendlist (yet)
//
//                                m_addFriendReqId = -1;
//                                isReplyOk = true;
//                            }
////                            else if (reply.type == Network::Reply::FriendAdded)
//                            //{
////                                m_ui->alert(reply.args[0] + " has sent you a friend request", true);
////                                m_ui->addFriend(reply.args[0]);
////                                m_ui->insertNotif(reply.args[0], "(*) ");
////                                //m_ui->setFriendActive(reply.args[0], true);
////
////                                m_addFriendReqId = -1;
////                                isReplyOk = true;
//                            //}
//                            else if (reply.type == Network::Reply::FriendAdded)
//                            {
//                                m_ui->alert(reply.args[0] + " has accepted your friend request!", false);
//                                m_ui->addFriend(reply.args[0]);
//                                m_chatHistory[reply.args[0]] = "";
//
//                                m_addFriendReqId = -1;
//                                isReplyOk = true;
//                            }

                            // ~~~~~~~~~~~~~~~~~~~~~~~~~~

//                            else if (reply.type == Network::Reply::FriendAdded)
//                            {
//                                // notify the receiver about a new pending friend request
//                                // and pop up a nice alert box with accept/ignore options
//                                m_ui->alert(reply.args[0] + " has sent you a friend request!", true);
//
//                                // add an inactive friend in the friendlist
//                                // until they respond to the request
//                                m_ui->addFriend(reply.args[0]);
//                                m_ui->insertNotif(reply.args[0], "(*) ");
//                                m_ui->setFriendActive(reply.args[0], false);
//
//                                m_addFriendReqId = -1;
//                                isReplyOk = true;
//                            }
//
//                            else if (reply.type == Network::Reply::FriendAddedSuccess)
//                            {
//                                m_ui->alert(reply.args[0] + " has accepted your friend request!");
//
//                                m_friendReqAccIgId = -1;
//                                isReplyOk = true;
//                            }

                            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        }

                        if (reply.id != 0 && m_unsentMsgReqId.size() > 0)
                        {
                            auto msgId = std::find(m_unsentMsgReqId.begin(), m_unsentMsgReqId.end(), reply.id);
                            if (msgId != m_unsentMsgReqId.end())
                            {
                                if (reply.type == Network::Reply::TaskSuccess)
                                {
//                                    if (m_chatHistory.find(m_ui->getSelectedFriend())->second == "")
//                                        m_chatHistory.find(m_ui->getSelectedFriend())->second = m_chatHistory.find(m_ui->getSelectedFriend())->second + m_ui->getUsername() + " : " + m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1);
//                                    else
//                                        m_chatHistory.find(m_ui->getSelectedFriend())->second = m_chatHistory.find(m_ui->getSelectedFriend())->second + "\n" + m_ui->getUsername() + " : " + m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1);

//                                    m_ui->addToChatArea(m_loginInfo.username + " : " + m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1));
//                                    m_ui->setInputText("");

                                    //m_ui->addToChatArea(m_chatHistory.find(m_ui->getSelectedFriend())->second);

                                    ///
                                    //for (auto&& vs : m_chatHistory.find(m_ui->getSelectedFriend())->second)
                                        //m_ui->addToChatArea(vs);// + "\n");
                                    m_ui->addToChatArea(m_chatHistory.find(m_ui->getSelectedFriend())->second.back());

                                    DBG_LOG("Successfully sent message");
                                    m_unsentMsgReqId.erase(msgId);

                                    isReplyOk = true;
                                }
                            }
                            else if (msgId == m_unsentMsgReqId.end())
                            {
                                m_ui->alert("Unable to send message to \'" + m_ui->getSelectedFriend() + "\'!", false);
                                isReplyOk = true;
                            }
                        }

                        //std::cout << "Id : " << reply.id << " " << m_searchReqId << std::endl;
                        //std::cout << "Typed : " << reply.type << std::endl;
                        if (reply.id == m_searchReqId && reply.type == Network::Reply::TaskSuccess)
                        {
                            //std::cout << "A" << std::endl;
                            //DBG_LOG(reply.args[0] + " " + reply.args[1]);
                            //std::cout << reply.args[0];
                            //m_ui->showSearchResults(reply.args);
                            m_ui->showSearchResults(std::vector<std::string>{reply.args.begin() + 1, reply.args.end()});
                            isReplyOk = true;
                            m_searchReqId = -1;
                        }

//                        if (reply.id == m_searchReqId && reply.type == Network::Reply::TaskSuccess)
//                        {
//                            //std::cout << "A" << std::endl;
//                            //DBG_LOG(reply.args[0] + " " + reply.args[1]);
//                            //std::cout << reply.args[0];
//                            //m_ui->showSearchResults(reply.args);
//                            m_ui->showSearchResults(std::vector<std::string>{reply.args.begin() + 1, reply.args.end()});
//                            m_
//                            isReplyOk = true;
//                        }

                        // !!!!!!!!!!
                        if (reply.id == m_addFriendReqId && reply.type == Network::Reply::TaskSuccess)
                        {
                            std::string _friend = reply.args[0];
                            DBG_LOG("Friend request sent to \'" + _friend + "\'");
                            m_ui->alert("Friend request sent to \'" + _friend + "\'", false);

                            isReplyOk = true;
                            m_addFriendReqId = -1;

                            //std::cout << "Reply : " << reply.id << m_addFriendReqId << std::endl;
                            //std::cout << "Recieved : " << reply.args[0] << std::endl;
                            //std::cout << "Recieved : +" << reply.args[0].substr(0, 5) << "+" << std::endl;

//                            if (reply.args[0].substr(0, 5) == "ERROR")
//                            {
//                                m_ui->alert(reply.args[0].substr(9, reply.args[0].size()), false);
//                                isReplyOk = true;
//                                m_addFriendReqId = -1;
//                            }
//                            else
//                            {
//                                //std::cout << "REQ ID : " << m_addFriendReqId << std::endl;
////                                m_ui->addFriend(reply.args[0]);
////                                m_chatHistory[reply.args[0]] = "";
//                                m_ui->alert("Friend request sent to \'" + reply.args[0] + "\'!", false);
//                                isReplyOk = true;
//                                m_addFriendReqId = -1;
//                            }

//                            m_ui->alert("Friend request received from \'" + reply.args[0] + "\'");
//
//                            isReplyOk = true;
//                            m_addFriendReqId = -1;
                        }

                        if (reply.id == m_friendReqAcIgId && reply.type == Network::Reply::TaskSuccess)
                        {

                            std::string _friend = reply.args[0];
                            //m_ui->alert("You're now friends with " + _friend, false);
                            m_ui->setFriendActive(_friend, true);
                            //DBG_LOG("act frnd : " + _friend);
                            //m_ui->insertNotif(_friend, "");

                            //m_chatHistory[_friend] = "";
                            m_chatHistory[_friend] = {};

                            isReplyOk = true;
                            m_friendReqAcIgId = -1;
                        }

                        //DBG_LOG("foobar12345");

                        if (!isReplyOk)
                            WRN_LOG("Received an unexpected network reply in state Chatting. Received reply : " + to_string(reply.id) + " " + to_string(reply.type));
                    }
                    break;
                case UserInterface::State::Exit:
                    // This should just never happen, but defining it to prevent GCC warning ...
                    WRN_LOG("LOLZ, this should never have happened. Go pray to the Flying Spaghetti Monster :p");
                    break;
            }
        }

        //Poll/update UI
//        if (m_loginInfo.enabled)
//        {
//            changeState(UserInterface::State::Connecting);
//            m_loginReqId = m_network.send(Network::Task::Login, {
//                                           m_clientConf.addr,
//                                           to_string(m_clientConf.port),
//                                           m_loginInfo.username,
//                                           m_loginInfo.password });
//            //m_loginInfo.enabled = false;
//            m_ui->setUsernameLabel(m_loginInfo.username);
//        }

        auto event = m_ui->update();
        if (event == UserInterface::UIEvent::Closed)
        {
            m_network.send(Network::Task::Type::Logout);

            if (m_ui->isAutoLoginEnabled() && m_state == UserInterface::State::Chatting)
                rewriteLoginFile(true);
            else
                rewriteLoginFile(false);
            m_state = UserInterface::State::Exit;
        }
        else if (event == UserInterface::UIEvent::StateChanged)
        {
            changeState(m_ui->getState());
            DBG_LOG("State changed.");
        }
        else if (event != UserInterface::UIEvent::None)
        {
            switch (m_state)
            {
                case UserInterface::State::Login:
                    if (event == UserInterface::UIEvent::UserLogin)
                    {
                        if (!m_ui->isStringWhitespace(m_ui->getUsername()) &&
                             !m_ui->isStringWhitespace(m_ui->getPassword()))
                        {
                            //m_loginInfo.enabled = false;
                            m_loginInfo.username = m_ui->getUsername();
                            m_loginInfo.password = m_ui->getPassword();

                            m_loginReqId = m_network.send(Network::Task::Login, {
                                           m_clientConf.addr,
                                           to_string(m_clientConf.port),
                                           m_loginInfo.username,
                                           m_loginInfo.password });

                            changeState(UserInterface::State::Connecting);
                            m_ui->setUsernameLabel(m_ui->getUsername());
                        }
                        else
                            m_ui->alert("Can't leave either login fields blank!", false);
                    }
                    else if (event == UserInterface::UIEvent::StateChanged)
                    {}
                    else
                        WRN_LOG("Unexpected UIEvent received in Login State. Event code: " + to_string(event));
                    break;
                case UserInterface::State::Signup:
                    if (event == UserInterface::UIEvent::UserSignup)
                    {
                        if (!m_ui->isStringWhitespace(m_ui->getUsername()) &&
                                 !m_ui->isStringWhitespace(m_ui->getPassword()))
                            {
                                changeState(UserInterface::State::Connecting);
                                m_signupReqId = m_network.send(Network::Task::Signup, {
                                               m_clientConf.addr,
                                               to_string(m_clientConf.port),
                                               m_ui->getUsername(),
                                               m_ui->getPassword() });
                                DBG_LOG("Signup event.");
                            }
                            else
                                m_ui->alert("Can't leave either signup fields blank!", false);
                    }
                    else
                        WRN_LOG("Unexpected UIEvent received in Signup State. Event code: " + to_string(event));
                    break;
                case UserInterface::State::Connecting:
                    break;
                case UserInterface::State::Chatting:
                    switch (event)
                    {
                        case UserInterface::UIEvent::Disconnect:
                            m_network.send(Network::Task::Type::Logout);
                            //m_network.reset();
                            m_ui->reset();
                            changeState(UserInterface::State::Login);
                            m_loginReqId = 0 ;
                            m_signupReqId = 0 ;
                            m_unsentMsgReqId.clear();
                            m_searchReqId = 0;
                            m_chatHistory.clear();
                            m_ui->enableAutoLogin(false);
                            rewriteLoginFile(false);
                            break;
                        case UserInterface::UIEvent::MessageSent:
                            m_unsentMsgReqId.push_back(m_network.send(Network::Task::SendMsg, {
                                           m_ui->getSelectedFriend(),
                                           m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1) }));

                            //m_ui->setInputText("");
                                           //m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1)
                            //m_ui->addToChatArea(m_ui->getUsername() + " : " + m_ui->getInputText());
//                            m_ui->addToChatArea(m_ui->getUsername() + " : " + m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1));
//                            m_ui->setInputText("");
                            //DBG_LOG("Message sent to server.");

                            if (m_chatHistory.find(m_ui->getSelectedFriend())->second.size() == 0)
                            {
                                m_chatHistory.find(m_ui->getSelectedFriend())->second.push_back(m_ui->getUsername() +
                                                                                " : " +
                                                                                m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1)
                                                                                );
                            }
                            else
                                m_chatHistory.find(m_ui->getSelectedFriend())->second.push_back(m_ui->getUsername() + " : " + m_ui->getInputText().substr(0, m_ui->getInputText().length() - 1));

                            m_ui->setInputText("");

                            break;
                        case UserInterface::UIEvent::Search:
                            if (!m_ui->isStringWhitespace(m_ui->getSearchString()))
                            {
                                m_searchReqId = m_network.send(Network::Task::SearchUser,
                                                    {m_ui->getSearchString()});

                                std::cout << m_ui->getSearchString() << std::endl;
                            }
                            else
                                m_ui->alert("Search string cannot be empty!", false);
                            break;
                        case UserInterface::UIEvent::TabSelected:
                            //
                            //m_ui->setInputBufferText(m_ui->getSelectedFriend(), m_ui->getInputText());

                            //std::cout << m_ui->getInputText() << std::endl;
                            m_ui->clearChat();
                            if (!m_ui->isStringWhitespace(m_ui->getSelectedFriend()))
                            {
                                //m_ui->addToChatArea(m_chatHistory.find(m_ui->getSelectedFriend())->second);
                                for (auto vs : m_chatHistory.find(m_ui->getSelectedFriend())->second)
                                    m_ui->addToChatArea(vs);// + "\n");
                                m_ui->setInputText(m_ui->getInputBufferText(m_ui->getSelectedFriend()));
                            //std::cout << m_ui->getSelectedFriend() << " " << m_ui->getInputBufferText(m_ui->getSelectedFriend()) << std::endl;
                            //std::cout << "cur tab : " << m_ui->getSelectedFriend() << std::endl;
                                m_ui->insertNotif(m_ui->getSelectedFriend(), "");
                            }
                            break;

//                        case UserInterface::UIEvent::AddFriend:
//                            {
//                                DBG_LOG("Selected result : " + m_ui->getSelectedResult());
//
//                                m_addFriendReqId = m_network.send(Network::Task::AddFriend,
//                                                                  {m_ui->getSelectedResult()});
//
//                                DBG_LOG("Add friend task added.");
//                            }
//                            break;

                        case UserInterface::UIEvent::AddFriend:
                            {
                                std::string _friend = m_ui->getSelectedResult();
                                m_addFriendReqId = m_network.send(Network::Task::AddFriend,
                                                                  {_friend});
                                DBG_LOG(ADD_FRIEND + " task initiated");
                            }
                            break;

//                        case UserInterface::UIEvent::AddFriendAccept:
//                            {
//                                //m_friendReqAccIgId = m_network.send(Network::Task::FriendRequestAccept, {m_ui->});
//
//                                DBG_LOG("Clicked on yes");
//                                //m_ui->setFriendInactive(m_ui->getSelectedFriend(), true);
//                                //m_ui->alert(m_ui->getSelectedFriend() + " has sent you a friend request", true);
//
//                                DBG_LOG("Selected friend : " + m_ui->getSelectedFriendItem());
//
//                                m_addFriendReqId = m_network.send(Network::Task::FriendRequestAccept,
//                                                                  {m_ui->getSelectedFriendItem()});
//                            }
//                            break;

                        case UserInterface::UIEvent::AddFriendAccept:
                            {
                                //std::string sender = m_ui->getSelectedFriendItem();
                                //DBG_LOG("You accepted \'" + sender + "\'s friend request");
                                DBG_LOG("You accepted \'" + m_ui->getSelectedFriendItem() + "\'s friend request");
                                m_friendReqAcIgId = m_network.send(Network::Task::FriendRequestAccept,
                                                                   {m_ui->getSelectedFriendItem()});
                                DBG_LOG(ADD_FRIEND_ACCEPT + " request added");
                            }
                            break;

//                        case UserInterface::UIEvent::AddFriendReject:
//                            {
//                                DBG_LOG("Clicked on no");
//
//                                m_addFriendReqId = m_network.send(Network::Task::FriendRequestIgnore,
//                                                                  {m_ui->getSelectedFriendItem()});
//                            }
//                            break;

                        case UserInterface::UIEvent::AddFriendReject:
                            {
                                std::string sender = m_ui->getSelectedFriendItem();
                                DBG_LOG("You rejected \'" + sender + "\'s friend request");
                                m_friendReqAcIgId = m_network.send(Network::Task::FriendRequestIgnore,
                                                                   {sender});
                                DBG_LOG(ADD_FRIEND_IGNORE + " request initiated");
                            }
                            break;

                        default:
                            WRN_LOG("Unhandled or unexpected UIEvent received in Chatting state.");
                    }
                    break;
                case UserInterface::State::Exit:
                    // This should just never happen, but defining it to prevent GCC warning ...
                    WRN_LOG("We should've prayed to the Flying Spaghetti Monster harder, sorry.");
                    break;
            }
        }
    }

    void Client::draw()
    {
        m_ui->draw();
    }

    void Client::parseConfigFile()
    {
        std::ifstream configFile{m_configFilePath, std::ios::in};
        if (!configFile.is_open() || !configFile.good())
        {
            ERR_LOG("FATAL ERROR :: Error reading from \'" + m_configFilePath + "\'.");
            throw std::runtime_error("FATAL ERROR :: Error reading from \'" + m_configFilePath + "\'.");
        }

        const std::regex fieldPattern("(\\w+):([^:]+):"),
                            commentPattern("\\s*#.*");
        enum DataType { INT, STRING };

        //Maps the field name in the config file to (data type, pointer to variable) of the field
        std::map<std::string, std::pair<DataType,void*>> fieldsMap;
        fieldsMap.insert({"open_port", {INT, &m_clientConf.port}});
        fieldsMap.insert({"server_addr", {STRING, &m_clientConf.addr}});
        fieldsMap.insert({"ui", {STRING, &m_clientConf.ui}});

        std::string line;
        std::getline(configFile, line);
        for (unsigned int i = 1; !configFile.eof(); std::getline(configFile, line), i++)
        {
            std::string field;
            std::string value;
            std::smatch match;
            if(line.empty() || std::regex_match(line, commentPattern))
                continue;
            else if(std::regex_match(line, match, fieldPattern))
            {
                field = match[1].str();
                value = match[2].str();
            }
            else
            {
                WRN_LOG("Invalid field in config file : \n\t" + line);
                continue;
            }

            auto mapping = fieldsMap.find(field);
            if(mapping == fieldsMap.end())
            {
                WRN_LOG("Warning : Unrecognized field in conifg file, ignoring.");
            }
            else
            {
                switch(mapping->second.first)
                {
                    case INT:
                        *static_cast<int*>(mapping->second.second) = stoi(value);
                        break;
                    case STRING:
                        *static_cast<std::string*>(mapping->second.second) = value;
                        break;
                    default:
                        WRN_LOG("Unhandled data type");
                        break;
                }
            }
        }
    }

    void Client::parseLoginFile()
    {
        std::ifstream loginFile{m_loginFilePath, std::ios::in};
        if (!loginFile.is_open() || !loginFile.good())
        {
            ERR_LOG("FATAL ERROR :: Error reading from \'" + m_loginFilePath + "\'.");
            throw std::runtime_error("FATAL ERROR :: Error reading from \'" + m_loginFilePath + "\'.");
        }

        const std::regex fieldPattern("(\\w+):([^:]+):"),
                            commentPattern("\\s*#.*");
        enum DataType { BOOL, STRING };

        //Maps the field name in the config file to (data type, pointer to variable) of the field
        std::map<std::string, std::pair<DataType,void*>> fieldsMap;
        fieldsMap.insert({"signed_in", {BOOL, &m_loginInfo.enabled}});
        fieldsMap.insert({"username", {STRING, &m_loginInfo.username}});
        fieldsMap.insert({"password", {STRING, &m_loginInfo.password}});

        std::string line;
        std::getline(loginFile, line);
        for (unsigned int i = 1; !loginFile.eof(); std::getline(loginFile, line), i++)
        {
            std::string field;
            std::string value;
            std::smatch match;
            if(line.empty() || std::regex_match(line, commentPattern))
                continue;
            else if(std::regex_match(line, match, fieldPattern))
            {
                field = match[1].str();
                value = match[2].str();
            }
            else
            {
                WRN_LOG("Invalid field in config file : \n\t" + line);
                continue;
            }

            auto mapping = fieldsMap.find(field);
            if(mapping == fieldsMap.end())
            {
                WRN_LOG("Warning : Unrecognized field in conifg file, ignoring.");
            }
            else
            {
                switch(mapping->second.first)
                {
                    case BOOL:
                        //*static_cast<bool*>(mapping->second.second) = value;
                        if (value == "yes" || value == "YES")
                            *static_cast<bool*>(mapping->second.second) = true;
                        else
                            *static_cast<bool*>(mapping->second.second) = false;
                        break;
                    case STRING:
                        *static_cast<std::string*>(mapping->second.second) = value;
                        break;
                    default:
                        WRN_LOG("Unhandled data type");
                        break;
                }
            }
        }

        loginFile.close();

        std::cout << "Login conf :-"<< std::endl;
        std::cout <<m_loginInfo.enabled << std::endl;
        std::cout << m_loginInfo.username << std::endl;
        std::cout << m_loginInfo.password << std::endl << std::endl;;
    }

    void Client::rewriteLoginFile(bool autologin)
    {
        //m_loginInfo.enabled = autologin;
        std::fstream loginFile{m_loginFilePath, std::ios::out};
        if (!loginFile.is_open() || !loginFile.good())
        {
            ERR_LOG("FATAL ERROR :: Error reading from \'" + m_loginFilePath + "\'.");
            throw std::runtime_error("FATAL ERROR :: Error reading from \'" + m_loginFilePath + "\'.");
        }

        if (autologin)
        {
            loginFile << "signed_in:yes:" << std::endl;
            loginFile << "username:" << m_loginInfo.username << ":" << std::endl;
            loginFile << "password:" << m_loginInfo.password << ":" << std::endl;
        }
        else
        {
            loginFile << "signed_in:no:" << std::endl;
        }

        loginFile.close();
    }

    void Client::changeState(UserInterface::State s)
    {
        m_state = s;
        m_ui->setState(s);
    }
}


text:
Internal Network Security Mistakes to Avoid
Network security begins at home. Here's how to effectively secure threats from within your organization.
cyber-security-3194286_640.jpg
An organization can implement all the best security tools, but security is ultimately a people problem. "Human error accounts for most data breaches," says Mike Mellor, vice president of cybersecurity consulting at network security firm Nuspire.
Ransomware attacks, for example, dominate the headlines and cost companies millions of dollars each year. "The most effective way to reduce the occurrence of these types of attacks is to train the users," Mellor advises.
Management matters
Asset management is an important first step in securing an environment. "Unmanaged devices are one of the biggest internal network security mistakes an organization can make," says Devin Ertel, CISO of Menlo Security, a network security company. "Devices that aren't under the control of the security and IT teams, but have access to the overarching network, cause a huge risk to the environment."
In past years, many organizations simply prohibited unmanaged devices. Times are changing, however. "The increase of remote, hybrid, and contracted work means that these unmanaged devices must be allowed on the network," Ertel explains. "As a result, security teams must ensure that their security stacks adequately protect them against the inherent vulnerabilities that are associated with unmanaged devices."
Apps pose a problem, too. If employees are allowed to freely install unauthorized apps, use unprotected devices to connect to the network, or set any passwords they like, they open doors to all kinds of cyber threats, says Dmitry Kurskov, head of the information security department at ScienceSoft, an IT consulting and software development company. "Outdated or unused software that goes unnoticed is likely to have multiple vulnerabilities, enabling malicious actors to break into the network."
Protecting passwords
One of the biggest internal network security mistakes is reusing passwords between accounts on networking devices. "The compromise of a single device can cascade compromises across the entire network," says Justin Bollinger, principal security consultant at cybersecurity consulting firm TrustedSec. "As an attacker, one of the things I look for the most is insecure default configurations. That might be an active unused protocol or a default password,"
When working as a penetration tester, Bollinger says he's always trying to discover novel ways of gaining a foothold on ActiveDirectory. "Our penetration test goals are almost always looking to gain access to something new or to elevate our privileges." He notes that the Cisco Smart Install (SMI) protocol, for example, is enabled by default on all Cisco Catalyst switches. "Abuse of the SMI protocol can allow an attacker to download a copy of the device configuration, including all of its secrets, without authentication."
Since sharing passwords between networking equipment is such a common practice, one device with SMI enabled often leads to a full network compromise, Bollinger warns. "These same passwords collected from networking equipment, often [give attackers] access into corporate Active Directory environments."
Egress filtering
While many organizations have made improvements in security basics–such as by adopting multi-factor authentication, encryption, anti-phishing, and security patching–there are often gaps remaining in egress filtering, which can lead to data breach disasters. "Many organizations allow internal devices to initiate unmonitored outbound communications to anywhere," says Ryan Thomas, a vice president at security automation firm LogicHub. "This can enable internal systems to be exploited to leak any data to which they have access."
Organizations can properly implement egress filtering by allowing only internal devices to initiate outbound communications. "Then, if a compromise occurs, [attackers] are typically prevented from succeeding in stealing data," Thomas says. "Plus, alarm bells [will] go off as outbound connections are denied, making breaches easier to detect."
Failing to train internal users on ways to identify threats and avoid actions that may compromise the enterprise network is the biggest mistake an organization can make, Mellor says. Providing general security awareness instruction that covers the most common threats educates employees on how to identify specific threats as well as how to safely handle the situation. "General security awareness training should be provided no less than annually, with frequent reminders throughout the year," he says. "It's best to provide training as often as possible so that employees are well equipped to protect the organization and include security in the decisions they make."
Security is a constant, endless battle. "Even if you defend against an attack, your job isn't done," Ertel says. "Attackers are constantly evolving their methods to get through security stacks and, as security leaders, we must evolve with them to always stay one step ahead."
Staying a step ahead of attackers isn't easy. "CISOs and the security community are facing more cyberthreats than ever and have had to learn how to fight them effectively," Ertel says. "We must stay vigilant and be even more diligent than we ever have."
What To Do When Containers are Attacked: An Incident Response Plan
Three Best Practices to Enhance Your Organization's Cloud Security
NSA's Zero-Trust Guidelines: An Explainer
Protect Hyperscale Data Centers From Ransomware and Volumetric DDoS Attacks

redpajama_set_name: RedPajamaCommonCrawl


text:
Op-Ed: Why Brands Should Bet On Virtual Influencers
Jamin Warren
Formerly a culture reporter for the Wall Street Journal, Warren serves as an advisor to MoMA's department of Architecture and Design. His thoughts on games and digital culture have been featured in the New Yorker, New York Times, Paris Review and others. Warren was also the host of Telly-winning PBS Digital Studios series "Game/Show," which netted over 10 million viewers.
Author Jamin Warren traces the beginnings of virtual influencers back to the appearance of avatars, explaining why these synthetic characters don't have to be 'real' as much as they have to convey an authentic and coherent identity that clearly personifies a brand
From posting fake sponsored content to pretending to fly on private jets, influencer culture has sometimes been guilty of fakeness, but the next wave of virtual influencers reaches a new level of illusion. Lil Miquela is one such star, with 1.5 million followers on Instagram. She has partnered with GIPHY and Prada, posed wearing Diesel and Moncler, and even moonlighted as a contributing arts editor to Dazed Magazine.
Investors are in. After closing a round of financing earlier this year, Brud, the AI company who created Lil Miquela, became worth $125 million. Brud isn't alone, either. Venture-backed companies like Shadows, SuperPlastic and Toonstar are also developing virtual influencers.
We are over the moon to be reunited with our friend Miquela. We love you and are more excited than ever to help spread your message of compassion and empathy to the world. Let's push things forward.
A post shared by Brud (@brud.fyi) on Jul 12, 2018 at 2:06pm PDT
"One of the things that excites us about synthetic characters is the ability for either startups or even for individuals to create these characters that they can use to create media that is high quality and enjoyable," Peter Rojas, a partner at the investment firm Betaworks Ventures and investor in SuperPlastic, told me during an interview for a forthcoming podcast.
"It's partly a form of self-expression, but also, if people are going to pay increasing amounts of time and attention to [synthetic characters], how is that going to change the media landscape? How's it going to change entertainment?" Rojas said.
Surprise, surprise, games have led the way. Game designer Richard Garriott coined the term "avatar" in games with Ultima IV: Quest of the Avatar, released in 1985. Since then, avatar customization has become a key entertainment feature in video games, especially massively multiplayer online games (MMOGs), and non-gaming virtual worlds, such as Second Life.
One of the earliest virtual avatars was Max Headroom, a fictional AI character portrayed as "the world's first computer-generated T.V. host" but who was really a man in prosthetic makeup. In 1998, Gorillaz debuted as a virtual band created by musician Damon Albarn and artist Jamie Hewlett, inspired by sci-fi, anime, and rock videos. Created by Crypton Future Media, the virtual Japanese pop star Hatsune Miku was "born" in 2007 and has since performed sold-out concerts all over the world. Today, you can see her influence on virtual YouTubers, which are blowing up in Japan.
As you can see, Lil Miquela's predecessors have made their respective marks on everything from music to TV. So, it's only natural that artificial characters would step into the spotlight on social media.
Coherence tops realness. Social theorist and media scholar Rob Cover asserts as much in his work, which frames the use of social media as a way that individuals perform their identities online. According to Cover, someone's identity isn't static but something an individual reinforces through categorization. Gender, for example, is a common way someone defines themselves.
Sometimes, people police each other's identities. For example, if someone is dressed as a punk but only listens to classical music, that person is confusing to other people, potentially causing a negative reaction. Cover calls this "coherence." It's the key to understanding why virtual influencers have the potential to take off in the future: As long as a virtual influencer is "coherent," it doesn't matter if they are real.
When it comes to "authenticity," Lil Miquela's popularity shows that when people follow an influencer on Instagram, they care more about a persona than authenticity. Brands already have an established voice, so they could easily create a virtual character with an "authentic" personality. It can be as simple as establishing what a character will or will not do. For a similar relationship, look no further than fandom to find rabid fans who are attached to fictional characters.
Ok, I promise, these are the last birthday shots. But, like, it's not every day a lil robot turns 19. (Just every year.) ("Haha.") Swipe for group pic with a bunch of cuties. 💘▶
A post shared by *~ MIQUELA ~* (@lilmiquela) on Apr 24, 2019 at 10:27am PDT
Realistic avatars will push us toward the virtual. Last month, Facebook revealed that it is investing in realistic face-tracking avatars as the key to VR's future. Even if avatars trend toward being as realistic as possible, that could still mean people will become more comfortable with more anonymous virtual characters.
The Facemoji app easily allows you to turn your face into a 3D emoji with one tap. Its selling point, though, is to "make your Facemoji look a lot like you—or whoever you want to be." Modulate is going even further with the development of "voice skins," which transforms users' voices live by filtering them through artificial intelligence software. The outgoing voice can be set to resemble a certain gender, speaking style, or celebrity.
Both tools provide the freedom to express yourself any way you'd like and offer protection from online harassment based on gender. On Twitch, women who stream are regularly harassed and objectified, while men are met with discussions about their gaming skills, according to a 2016 study. Considering all this, anonymous avatars start to look pretty appealing, and the growth of anonymous avatars will normalize virtual influencers as well.
Brands, eye-track this: Consumers don't necessarily need to follow an influencer who is real as long as its persona is interesting, consistent and authentic. In the future, every brand could potentially create their own virtual influencer, someone they can completely control, who never ages or dies. Not to mention, a virtual influencer means automatic brand safety.
Lead image: stock photos from De repente/Shutterstock
TechnologyMore Technology Stories
RetailMore Retail Stories
AdvertisingMore Advertising Stories
cultureMore culture Stories
AsiaMore Asia Stories
Human activitiesMore Human activities Stories
communicationMore communication Stories
computingMore computing Stories
japanMore japan Stories
digital mediaMore digital media Stories
Latest Observations & Analysis
Here are the most popular stories that retailers and brands are reading right now to inspire them with their CX innovation work.
Case Study This Made-to-Order Furniture Brand Aims for Fully Circular Commerce
Technology Podcast: Strategies For Cracking The Gen Z Code
Case Study This NYC Department Store Created a Mobile-First In-Store Adventure
Case Study Budgeting Site 'Reel' Helps Consumers Splurge Responsibly
Design Delivering On A Retail As Service Promise
Case Study Banking App 'Revolut Junior' Empowers Kids with Financial Literacy Tools
Op-Ed The Physical Store: New Realities / New Opportunities
Features IWD Heroes: Environmental Designer On The Future of Intelligent Living


I know, I know...it's Tuesday! Who has time to read on a Tuesday? But these brain and body (and relationship!) benefits might inspire you to tuck into a book on your lunch hour or during your next coffee break (I know that's what I feel like doing, anyway).
Reading a book might actually help divorce-proof your marriage. For real! Celebrity divorce lawyer Raoul Felder says that reading a book every two weeks helps ensure there's always new stuff to talk about—zeroing out the chance of having banter with your significant other be the same old, same old all the time.
Your brain will stay sharp. Studies have shown that keeping your mind stimulated can slow the progress of Alzheimer's and dementia. Think of it as exercise for your brain—your noggin requires exercise to keep it in tip-top shape, just like other parts of your body. Plus! Since you have to keep track of all the characters and plot developments, reading can help keep your memory sharp.
It can improve your concentration. All the multitasking you do during the course of your day—checking email while eating lunch, fielding phone calls, meeting with coworkers or classmates about different projects—can add up to increased stress and even lowered productivity. Grabbing even 15 minutes of a book while on the subway or before you head out for the day makes your brain focus on one single point.
__OK, I'm up for a good book! Need some good book ideas? Check out Glamour's list of must-reads!


Addendum 2....Sometimes when all of the boot order is followed, every hardware is given its time, Hauptwerk loads without a glitch,.....no audio through my 24ao!!! I must exit and reload HW to get audio output.
I love the quality of the 24ao audio but my headless installation goal has been significantly set back. Any thoughts?
- Exit Hauptwerk if it's running.
- Make sure you have the latest BIOS installed for the PC's motherboard. Check on its manufacturer's website for the latest version.
- Make sure you have all power-saving functions in the BIOS disabled, if relevant.
- Make sure that you have the latest versions of the drivers and firmware installed for all of your hardware, including any MIDI interface(s) and graphics card, checking on the manufacturers' websites.
... then OK all of the screens.
- Make certain that you have the latest version of the MOTU 24Ao firmware installed.
- Reboot if you updated anything.
Is the audio interface connected directly to a USB port on the PC, or via a USB hub?
I'm fairly sure all you suggest is as you recommend, however I plan to convert to an SSD. Rather than clone it, I will do a fresh build. The 24ao has the latest firmware, but I need to confirm if I reverted to legacy software and drivers to get it to work....I'm not sure because it's been such a drawn out slog doing computer upgrades concurrently with the new interface, I need to double check.
I went back and checked. My Windows 7 64 was a fresh Installation but not updated. I proceeded to follow your recommendations except the video card. The MOTU 24Ao was reinstalled with the latest software and firmware. There were 136 updates which took about three hours to get all installed.
So far things are behaving and simultaneous booting of both computer and 24ao isn't causing anymore problems.
I'm still cycling all the gear to observe any inconsistent behavior. If none emerge I'll proceed to power up all three console, 24ao and computer and see how that works before further tweaks.
Excellent. Glad to hear it appears to be working properly now.
Annnnd I can boot everything except the blower from a single console power switch. 4 boot cycles and all went well....so far.
Which blower are you referring to?
Meidinger high speed silent blower. My instrument is a hybrid.
Just interested. Sounds like you have quite the instrument.
Thanks, here's a link to photos and recordings.
Totally impressed, Doug. As in wow !
Where are the speakers fed by the MOTU 24 Ao installed?
Under Windows Driver and Software - Fixed an intermittent stop error when changing sample rates.
My speakers-8 Behringer Truth 2031 studio monitors are in the casework. I also have a pair of Rodgers and a 15" infinite baffle subwoofer on a ledge immediately behind and adjacent respectively to the open rear of the right side of the case at tha same level as the pipework. Finally, I have a second floor Klipsch sub behind the console.
I'm looking for additional Behringer passive 2031 units which were discontinued with only active versions still manufactured.
One of the guys building a church Hauptwerk system had some passives avaiolable but I do not remember his name. There is always Ebay.
Doug S. wrote: I'm looking for additional Behringer passive 2031 units which were discontinued with only active versions still manufactured.
I bought 4 units from him and they were in mint condition. He is located in Atlanta.


The first anatomically correct & durable calf roping ground dummy that feels and ropes like the real thing!
GTS is the new Elite Top of the Line calf roping ground dummy from SS Roping,llc, that replicates the actual look and feel of a live calf run. The head and neck are anatomically correct, causing you to rope exactly like you would as if roping a live calf in the arena. We made it portable with a handy handle, weather resistant, durable, and long lasting using the same exclusive Flexi-Foam rubber as the Tuf Kaf and Tuf Goat. This rubber-like material gives you that same realistic feel as you would on a live calf. Visual muscle memory is a big and vital part of your practice. You need to practice on what you are going to see and feel. GTS has the same head angle as a running calf. It not only looks like a real calf but, this will help you practice getting your tip down.
It has a solid roping platform, so it won't tip or slide when pulling your slack. Weight is approximately 47lbs. It is portable and hayrack friendly.
Price includes Free standard ground shipping!


The quality and quantity of your online reviews have an impact of whether Google ranks you in the local 3-pack — the top three search results that show up in local searches. If your business has a high volume of recent Google reviews, it's more likely to appear in the top three.
Remember, if your business shows up among the top results, Google will include links to your reviews. So quality matters. Keep lots of fresh reviews coming to make sure you're represented fairly online.
Read this blog post to learn more about making Google's local 3-pack.


The 1970s were a crazy time for the Gunners - starting off with a double and European glory, going through a disappointing spell in the middle of the decade, and finishing it on a brighter note with a string of Cup Finals - they showed everyone they were a team not to be messed with. Hark back to that awesome period with this retro shirt based on the red 1970s kit, and the one that they won the double in, in 1971. With long white sleeves and collar, and the Arsenal cannon on the left breast, it will look just as good for casual wearing as for a kick about in the park.


To get in touch with pieter joubert our records indicate that you can do so via their most recent address of 816-34 CUMBERLAND STREET NORTH, Thunder Bay, Ontario, Canada, P7A 4L3 or by phone: 807-344-8083. For a map to this location, scroll down and we've provided a map showing the approximate location of pieter joubert.
Have Additional Information on pieter joubert?
This listing can be enhanced to add additional details about pieter joubert including a description of services rendered, categories of services provided, contact email, and links to websites. You can also upload images (such as business cards and promotional materials) and link to Twitter, FaceBook, and LinkedIn profiles for pieter joubert. It's extremely easy to add these features and increase your exposure to new clients. Simply upgrade this listing to get started.


a president wanted to bomb Iran, it would be pretty easy to whip up the usual war frenzy over it. That's been baked into the cake for a long time. But Iraq? And without even a very big push from President Obama? I mean, for all that I'm not happy over his decision to go back to war in Iraq, he's been relatively sober about the whole thing.
But it barely matters. The mere concrete prospect of a new war was all it took. According to polls, nearly two-thirds of Americans are on board with the fight against ISIS and nearly half think we ought to be sending in ground troops. That's despite the fact that practically every opinion leader in the country says in public that they oppose ground troops. At this point it would take only a tiny shove—a bomb scare, an atrocity of some kind, pretty much anything—and 70 percent of the country would be in full-bore war frenzy mode.
It's like we've learned nothing from the past decade. Our politicians are in love with war. The public is in love with war. And the press is really in love with war. It just never ends.


Biermann, S & Townsend-Cross, M 2008, 'Indigenous pedagogy as a force for change', Australian Journal of Indigenous Education, vol. 37S, pp. 146-154.
IndIgenous academics over the past decade and a half have been focusing strongly, in terms of theory development, on Indigenous' epistemologies and research methodologies. What has not been given equal academic attention is the theoretical articulation of Indigenous pedagogy, not only as a valid system of knowledge and skill transfer, but also as one that conveys meaning, values and identity. In this paper, we want to explore some of the. practical aspects of Indigenous pedagogy in a tertiary setting by way of a student-teacher dialogue and also discuss the wider implications of a theoreticaL articulation from ol1r perspective as researchers and academics. We argue that at the intersection of the discourses on transformative pedagogy and Indigenous education in Australia lays an unexplored concept which, properly articulated and implemented, could have great benefits for all learners. Having been afforded attention elsewhere, particularly in North America, it is time to discuss Indigenous pedagogy as a teaching m.ethodology based on Indigenous values and philosophies in Australia today.


text:
Michael Knott | Mp3.com Download
Back in the days of the original mp3.com, Michael added an exclusive song for download. 'Frequency' was a live recording, recorded straight to a computer by Michael's manager. It was latter added as a bonus track to the Comatose Soul album.
Michael Knott
Mp3.com Download (2003 mp3.com)
Michael Knott – Vocals, acoustic guitar
Frequency Knott Also on Comatose Soul
Older comments on "Michael Knott – Mp3.com Download"
Gabriel "Skuzzy" Zolman on November 21, 2009 at 10:31 am said:
There was also a short-lived mp3 on that site called "Popsicle Stick," which was acoustic. This may have been a Strung Gurus song, but I can't be sure–it was listed as merely "Michael Knott" in the ID3 tag at the time…
Knotthead Matt on November 21, 2009 at 10:33 am said:
"Popsicle Stick" was released on the Aunt Betty's Ford Supersonic collection – so I guess you could call it an Aunt Betty's song?


text:
Most Trusted Online Stories
Latest News Politics Top Stories
Abiru, Saheed emerge APC candidates for Lagos East, Kosofe 2 by-elections
September 3, 2020 September 4, 2020 News Edge	0 Comments	Abiru, APC, Lagos, NewsEdge, Saheed
Former Group Managing Director, Polaris Bank Limited, Mr. Tokunbo Abiru, who retired from the bank on August 31, and Obafemi Saheed have emerged as All Progressives Congress, APC's consensus candidate for Lagos East Senatorial District and Kosofe 2 House of Assembly October by-elections in the state.
The candidates emerged after all registered party members in Lagos East and Kosofe ratified their candidature through direct primary election, held on Thursday in compliance with the requirements of the Independent National Electoral Commission, INEC.
The bye-elections in Lagos East Senatorial District and Kosofe 2 are scheduled to hold on October 31.
At the by-election, which was by affirmation, the Chief Returning Officer, Ibrahim Masari, announced that Tokunbo Abiru recorded a total vote of 111,551 votes only from the returned votes from the five local governments— Epe, Ibeju-Lekki, Ikorodu, Kosofe and Somolu— that make up the senatorial district covering 71 wards.
Obafemi Saheed scored a total of 34,012 votes only from the six wards that make up Kosofe 2 constituency.
Lagos APC Publicity Secretary, Seye Oladejo, said: "With the emergence of our candidates, all is now set for APC to contest and retain the respective legislative seats."
ALSO READ: Lagos APC: House divided against self?
Recall that the Lagos East Senatorial District and Kosofe II State Constituency seats became vacant following deaths of Senator Bayo Oshinowo and Tunde Buraimoh, who died of COVID-19 complications in June and July, respectively.
Earlier, all aspirants seeking senatorial nomination in Lagos East on the platform of APC, have withdrawn from the race in support of Abiru.
The aspirants that withdrew from the senatorial contest were Vice Chairman, Lagos APC, Chief Kaoli Olusanya; a former Lagos State Head of Service, Mr. Segun Ogunlewe, and a former Commissioner for Physical Planning & Urban Development, Mr. Rotimi Ogunleye.
A former General Manager/Permanent Secretary, Lagos Television, Mr. Lekan Ogunbanwo; a former member of the State House of Assembly, Olanrewaju Odesanya, and Chairman, Ikorodu-Oga Development Association, Chief Olusegun Abiru, also stepped down from the race.
In their separate accounts, the aspirants agreed to support Abiru's senatorial aspiration due to what they ascribed to the need for APC to conduct direct primaries free of acrimony and ensure harmony among all that aspirants that indicated interest in the senatorial seat.
Olusanya explained his decision to withdraw his senatorial aspiration was in the overall interest of Lagos APC and to allow a candidate emerge from the primary election without internal conflict, which he said, could polarise Lagos APC.
He said: "I have to step back and allow someone else to take on the task of representing our senatorial district at this time, for some reasons that seriously have to do with the larger interest of our dear state and our great party."
Apart from the aspirants that supported his senatorial nomination, Abiru has secured the support of the Governor Advisory Council, GAC, the highest making organ of the party in the state ahead of the direct primary election.
Among others, the Council comprises the APC National Leader, Senator Bola Tinubu; Governor Babajide Sanwo-Olu; Chairman, Lagos APC, Alhaji Babatunde Balogun; his Deputy, Chief Sunny Ajose, all previous governors of the state and all serving vice-chairmen of the party.
Also, all members of Lagos State House of Assembly and members of the National Assembly from Lagos State had earlier expressed support for the candidacy of Abiru.
At a consultation meeting with the lawmakers on Tuesday, Speaker of the State House of Assembly, Mudashiru Obasa, assured Abiru that all members of the assembly would deploy their campaign structure to canvass votes for the senatorial aspirant.
"At this time, this is the quality we need in politics to make the much-needed change in our political system.
"This is the time we need people with integrity to come into politics and change the erroneous perspective of the people," Obasa stated.
← This music video was shot entirely in Animal Crossing, and it's great
Semiconductor Wafer Polishing and Grinding Equipment Market 2020 Dynamics, Analysis, Top Manufacturers, Market Size, Share, Growth Factor and Forecast to 2025 →
NCDC announce 79 new cases of COVID-19, 30 in Lagos, Fatalities increases to 1082
September 13, 2020 News Edge	0
What to Make of the Suns' Big 2
July 24, 2020 July 24, 2020 News Edge	0
Kaduna Imposes Nightfall to Morning time Curfew
March 26, 2020 March 27, 2020 News Edge	0
I RECEIVED INSPIRATION TO FULFIL GANI FAWEHINMI'S DREAM – KUNLE ADEGOKE, SAN.
In Top Stories
A recently honoured radical […]
NCDC announce 150 new cases of COVID-19, 89 in Lagos, Total infection cases now 62,521
In Health, Latest News, Top Stories
NCDC announce 150 new cases of […]
8 Officers Face Murder Charges In Lagos List Of Ongoing Prosecution Of Cops
In Latest News, Top Stories
The Lagos State Ministry of […]
3 confirmed dead as NCDC […]
Lagos Bus Service (BRT) Suspends Operations Over #EndSARS Protest
The management of the Lagos Bus […]
Leaders of Fagba Market in Lagos Seek for Police Protection Over Rising Hausa's Treat in the Market
The Yoruba Community leaders and […]
All SARS Police Personnel Will Undergo Psychological Check – IGP
The Inspector-General of Police, […]
NCDC annnce 164 new cases of […]
Nigerian monarch, The Ooni of Ife, Oba Adeyeye Enitan Ogunwusi has praised Nigerian youths for finally waking up and speaking with one voice
Nigerian monarch, The Ooni of […]
BREAKING: #EndSARS Protester block Lekki gate
Despite the disbandment of the […]
Local Gists


search titles only has image posted today bundle duplicates include nearby areas bellingham wa bli bend or bnd, apache camping center is an rv dealership with 4 locations across oregon and washington including happy valley tacoma and everett we offer new and used tipos from awardwinning brands like marcas and more we serve our neighbors in vancouver salem eugene and clackamas. That is some inspiration bed frames portland oregon that can be given by myunioncity.org. Hopefully it is useful for all readers.
Related Posts of "Bed Frames Portland Oregon"


SKU: 1ce29dddbfb3 Categories: Carabiners, Draws & Belay, Carabiners;Climb, Climb, Products Tag: C.A.M.P.
As the lightest keylocking carabiner in the world, C.A.M.P.'s Photon carabiner marks an evolutionary advance in carabiner design. Not only is it the lightest, it is also full-size! Its radical design creates a large gate opening for easy clipping and the keylock closure is great for plucking draws from gear loops and cleaning overhanging sport routes. The Photon Bent Gate is the ultimate rope-end carabiner for overhanging sport routes. Its aggressive design is optimized for quick clips and the keylocking closure and large gate opening make for cuss-free cleaning.


Loracarbef is a topic covered in the Johns Hopkins ABX Guide.
Avdic, Edina, and Paul A Pham. "Loracarbef." Johns Hopkins ABX Guide, The Johns Hopkins University, 2019. Pediatrics Central, peds.unboundmedicine.com/pedscentral/view/Johns_Hopkins_ABX_Guide/540323/all/Loracarbef.
Avdic E, Pham PA. Loracarbef. Johns Hopkins ABX Guide. The Johns Hopkins University; 2019. https://peds.unboundmedicine.com/pedscentral/view/Johns_Hopkins_ABX_Guide/540323/all/Loracarbef. Accessed April 21, 2019.
Avdic E, Pham PA. Loracarbef [Internet]. In: Johns Hopkins ABX Guide. The Johns Hopkins University; 2019. [cited 2019 April 21]. Available from: https://peds.unboundmedicine.com/pedscentral/view/Johns_Hopkins_ABX_Guide/540323/all/Loracarbef.


Okay,what were the creators thinking?They really ruined a great cartoon and turned it into dog poo.Ben 10 did the same thing because they aired two stupid prequels.And now,this was worse.It's about al.
Campfire Song Song (SpongeBob SquarePants) – Roblox ID. Code: 145044514 – Copy it! Favorites: 87 – I like it too! If you are happy with this, please share it to your friends. You can use the comment box at the bottom of this page to talk to us. We love hearing from you! You may like.
The Campfire Song Song – Spongebob Squarepants lyrics by Nickelodeon – lyrics explanations and song meanings. (Spongebob) / Let's gather 'round the. No new notifications View all notifications Hey, click the icon to.
It has everything a camper could want: rustic cabins named after all the famous beans (such as soy, garbanzo, jumping and cocoa); a beach and boat dock for aquatic fun; an outdoor amphitheater and cam.
Check out Campfire Song Song by SpongeBob SquarePants on Amazon Music. Stream ad-free or purchase CD's and MP3s now on Amazon.com.
[Guitar plays a little, then shortly after]: Spongebob: I call this one, the campfire song song. Let's gather 'round the campfire, and sing our campfire song.
Campfire Song Song This song is by SpongeBob SquarePants and appears on the album The Yellow Album (2005) and on the compilation album SpongeBob's Greatest Hits (2009). This song is featured in the television series SpongeBob SquarePants. SpongeBob I call this one "The Campfire Song Song".
If you were looking for the article about the song, then see Campfire Song Song. "The Camping Episode" is a SpongeBob SquarePants episode from season three. In this episode, SpongeBob and Patrick go camping on SpongeBob's front lawn, to Squidward's dismay.
© 2018 Viacom International Inc. All Rights Reserved. Nick and all related titles, logos and characters are trademarks of Viacom International Inc.
Use Campfire Song Song and thousands of other assets to build an immersive game or experience. Select from a wide range of models, decals, meshes, plugins, or audio that help bring your imagination into reality.
The Campfire Song Song is a song performed by SpongeBob and Patrick in the episode "The Camping Episode." (spoken) I call this one the campfire song song. Let's gather 'round the campfire, and sing our campfire song.
Check out Campfire Song (Spongebob). It's one of the millions of unique, user-generated 3D experiences created on Roblox. this is a song.
"Spongebob Campfire Song Song" by Misc Cartoons ukulele tabs and chords. Free and guaranteed quality tablature with ukulele chord charts, transposer and auto scroller.
4 Star Hotels Cardiff Lacazette flicked Ozil's pass into Aubameyang's path and the ex-Borussia Dortmund star curled a wonderful effort across Etheridge from 25 yards. It was not enough to dissuade Cardiff, however, and War. Looking for a 5 Star hotel in Llanwern? Choose from over 587 5 Star hotels in Llanwern with great savings. Skip to main content.


text:
The United States circuit courts were the intermediate level courts of the United States federal court system from 1789 until 1912. They were established by the Judiciary Act of 1789, and had trial court jurisdiction over civil suits of diversity jurisdiction and major federal crimes. They also had appellate jurisdiction over the United States district courts.  The Judiciary Act of 1891 (, also known as the Evarts Act) transferred their appellate jurisdiction to the newly created United States circuit courts of appeals, which are now known as the United States courts of appeals. On January 1, 1912, the effective date of the Judicial Code of 1911, the circuit courts were abolished, with their remaining trial court jurisdiction transferred to the U.S. district courts.

During the 100 years that the Justices of the U.S. Supreme Court "rode circuit", many justices complained about the effort required. Riding circuit took a great deal of time (about half of the year) and was both physically demanding and dangerous. However, "members of Congress held firm to the belief that circuit riding benefited the justices and the populace, and they turned a deaf ear to the corps of justices that desired to abolish the practice."

The Judiciary Act of 1869 established a separate circuit court (and allowed the hiring of judges specifically to handle the cases) but the act required that Supreme Court justices had to ride circuit once every two years. However, this came to a final end in 1891 when the Circuit Courts of Appeals Act was passed.

Organization
Although the federal judicial districts were grouped into circuits, the circuit courts convened separately in each district and were designated by the name of the district (for example, the "U.S. Circuit Court for the District of Massachusetts"), not by the name or number of the circuit. The designation of circuits served only for the purpose of designating the districts in which a particular Supreme Court Justice, and later a circuit judge, would sit on the circuit court. The circuit court districts were usually, but not always, the same as the districts established for the district courts.

Congress had borrowed the general idea of circuit courts from England, but at their creation, the new United States circuit courts were "a unique institution, whose composition and jurisdiction did not resemble any prior court in England or America."  Each circuit court was composed initially of two Supreme Court justices and the district judge of the district, although in 1793 Congress provided that a quorum of one justice and one district judge could hold court. After 1802, only one justice was assigned to each circuit, and a quorum could consist of a single justice or judge. This "circuit riding" arrangement meant that the Supreme Court justices spent the majority of the year traveling to each district within their circuit to conduct trials, and spent far less time assembled at the capital to hear appeals. The burden of circuit riding was somewhat alleviated by the appointment of circuit judges under the Circuit Judges Act of 1869, but was not abolished until the creation of the intermediate courts of appeals in 1891.

In 1801, Congress attempted for the first time in its history to relieve the Supreme Court justices of this burden by enacting the Judiciary Act of 1801, commonly known as the Midnight Judges Act, but that proved to be highly controversial as the Act took effect with only 19 days remaining in John Adams's Federalist administration.  Before the oppositional Democratic-Republican administration of Thomas Jefferson took power, Adams took advantage of the Act to nominate several new federal judges expected to support the Federalist agenda. Although Jefferson also nominated a few judges, the Act was repealed after only one year because Jefferson feared the judiciary would become too powerful.

The same act also created the United States Circuit Court of the District of Columbia, a "circuit court" for the District of Columbia. This court had the same original jurisdiction and powers as the United States circuit courts but, unlike those courts, it continued to have its own judges even after the repeal of the Judiciary Act of 1801, and also exercised appellate jurisdiction over justices of the peace and other "local" courts of the District. The District of Columbia was not enumerated among the federal "circuits" at the time. This court was abolished in 1863.

Since each circuit court was initially staffed by sharing judges between the U.S. Supreme Court and each federal district court, the district court clerk usually acted as the circuit court clerk.  This arrangement persisted for many years in most federal judicial districts, even after Congress authorized the appointment of circuit judges in 1869 and allowed such judges to appoint a clerk without the concurrence of the district court judge.

Judges
Although any district court judge could be authorized to act as a circuit judge, only fifty judges solely designated as circuit court judges were ever appointed. These can be broadly categorized into four groups:

 Judges appointed pursuant to the Midnight Judges Act on or after February 20, 1801, and thereafter removed from office with the repeal of that Act on July 1, 1802.
 Judges appointed to the D.C. Circuit, abolished on March 3, 1863
 Judges appointed after 1869 pursuant to the Circuit Judges Act of 1869; those in office on June 16, 1891 were transferred to the newly created United States courts of appeals by operation of law, that is, without action on the part of the President.
 One judge appointed to the California circuit, established in 1855 and abolished on March 3, 1863.

Three circuit court judges, Samuel M. Blatchford, David Josiah Brewer, and William Burnham Woods, were later appointed to the Supreme Court.

Circuit court judges appointed pursuant to the Midnight Judges Act

Judges of the D.C. Circuit

Circuit court judges appointed pursuant to the 1869 Act

Circuit court judge of California

See also
 List of presidents of the United States by judicial appointments

Explanatory notes

References

External links
 Federal Judicial Center

1789 establishments in the United States
1911 disestablishments in the United States
Courts and tribunals disestablished in 1911
Courts and tribunals established in 1789
Circuit court

redpajama_set_name: RedPajamaWikipedia


Having a lot of qualities like or associated with some particular thing or type of person. He fancies himself as something of an expert on modernism in literature, just because he studied Joyce for his master's degree. She's something of a con-artist, isn't she? There's no way this repair should cost this much!
quite or rather a something; something to an extent: He has something of a reputation as a sportsman. ♢ Our walk home turned out to be something of an adventure.


Non-greasy essential oil blend and extracts that will leave your beard and hair, rejuvenated, hydrated, soft, conditioned and shiny. Eliminates dryness, itchiness and flakiness. Alleviates in-grown hairs. Leaves beard smelling amazing.
Following light application of Kings Solution Beard Balm for conditioning, evenly Mist/Spray a small amount of Kings Solution Hard & Beard Oil to beard and massage into the beard. Spray/Mist into scalp, massage, mist over hair as needed. Can be used as a body/massage oil as well.


Less than two weeks after the news broke that there was a massive security hole in its online NissanConnect telematics service, Nissan North America took its entire Nissan Owners web portal offline for several hours today, citing security concerns.
Usually accessible via Nissan's official U.S. website, the Nissan owners portal allows owners of both Nissan and Infiniti vehicles the capability to remotely interact with various vehicle features with a regular computer or smartphone. It serves as a one-stop-shop where customers can find out additional information about their car, learn how to use specific vehicle features, find a local dealership, and check on things like service schedules. For owners of the Nissan LEAF electric car, the same site allows owners of the Nissan LEAF SV and SL to remotely begin charging their vehicle, check on its state of charge, program a new destination in the satellite navigation system, and activate cabin preconditioning.
Earlier today, this is what greeted LEAF owners trying to access the NissanConnect EV portal.
While the site has since come back online, the reason for the switch off appears to be related to a security issue with the site itself.
Nissan has recently upgraded its in-car and smartphone telematics apps.
"The Nissan IT Security team has elected to take the North American Nissan and Infiniti Owner Portals temporarily offline for preventative maintenance. We plan to bring the U.S. and Canadian Nissan and Infiniti Owner Portals servers back online soon, and we regret any inconveninece this may cause our North American Nissan and Infiniti owners," a spokesperson for the the Japanese automaker told us earlier today in an official emailed statement.
While the Nissan LEAF itself has enjoyed reasonably good customer satisfaction since it launched back in late 2010, its telematics system has earned itself a poor reputation. From intermittent connectivity issues through to unreliable smartphone apps, Nissan made the decision last year to rebrand its original CARWINGS telematics system as NissanConnect EV, giving the system a refreshed app, new API and more features for owners of newer cars.
But despite the rebrand and the new hardware, Nissan's electric car telematics has remained unreliable. Earlier this year, Nissan Europe halted all sales of the 2016 Nissan LEAF due to a hardware fault with the new telematics system. Then two weeks ago, a far more serious flaw was discovered.
Unlike the old system, which required a username and password to be passed to the servers before access was granted, researchers demonstrated that the new NissanConnect EV allowed commands to be sent to any Nissan LEAF registered with the service by simply knowing the car's VIN — a string that is both easily guessable and displayed at the bottom of every vehicle windshield.
Nissan's servers are now back online, but the smartphone app will take some time.
In response to the publication of the exploit, Nissan promptly switched off all access to its systems from outside the NissanUSA domain, cutting off both third-party apps and its own smartphone apps. For the past two weeks, anyone seeking to connect to their car has been forced to go through Nissan's official owner's portal website — the very same one it took offline earlier today.
Upon logging back into the service this afternoon, Nissan LEAF owners will be greeted by the following message, acknowledging the lack of connectivity via the NissanConnect EV app.
Sadly, there's no news as to when that will happen, but at least Nissan LEAF customers — at least those with Nissan LEAF SV and SL trim levels — can now use Nissan's online web portal to remotely connect with their car.
As always, when that situation changes, we'll be sure to let you know.


BENGALURU: Thirteen-year old Akshat Mittal creator of Oddeven.com, which matches individuals to potential ride-share or carpool in the direction of their commute, has sold his company to carpool app Orahi.com for an undisclosed amount.
The site was developed and launched in December 2015 by the standard 9 student anticipating the odd-even vehicle rule implemented by the Delhi government in January this year, to control pollution in NCR.
Following the all-cash deal, the student of Amity International School in Delhi will be a part of the company's technical advisory board and will be mentored by Orahi for a year. "The algorithm was developed by me and I look forward to the year-long stint with the board," says Mittal. The odd-even.com website will re-direct users to the Orahi interface going ahead.
Also read: Akshat Mittal's entrepreneurial journey, first reported on ET.com.
"The name is catchy and easy to remember. It currently has 30,000 users and we anticipate more users to register after the second phase of odd-even rule comes into effect on April 15," says Arun Bhati, chief executive officer of Orahi.
The users will be redirected to Orahi after the verification process and the transaction and payment can now be completed over the web or app interface instead of the offline route used by odd-even.com Focused on home to office drops, Orahi recently raised Rs 3.5 crore from a group of investors from the Indian Angel Network (IAN). The company plans on introducing a new product for college-goers to carpool by end of the third quarter of this year.


text:
E-Pop! Issue # 23: Ronald Reagan and Dutch &, Garth Brooks and Chris Gaines
Did you hear a rumor that the delay in E-Pop!'s latest issue was due to writer's block? Or a lack of good chewy pop culture punditry? Or possibly, due to E-Pop!'s boobs getting frisked at Heathrow airport?
None of these are the E-Pop! True Hollywood Untold Story.
The true story is that, like writer Edmund Morris and his dilemma with Ronald Reagan, we've had trouble penetrating "the alabaster depths" of pop culture these past two weeks, trying to come up with a "final word" on the whole "Dutch" controversy.
Therefore, we have created a fictional character to be part of history at this crucial time. This character will see and interpret the real world through fake eyes. He will explain to us the dark recesses of what could have driven Edmund Morris down the terribly long, bizarre road of reinventing the genre we call "Biography."
Enter Chris Gaines.
Chris Gaines, E-Pop!'s skinny, black-haired "heroin chic," alternative-rock singing friend from college, bears a striking resemblance to the hefty, apple pie-faced, graying country singer Garth Brooks. In fact, Chris Gaines just released a music album that sounds suspiciously like Garth Brooks on percoset singing to a trance beat.
When Chris first told me that his friend Edmund Morris was writing a "fictionalized biography" of Ronald Reagan, we were shocked. Chris flicked his long black hair that falls in his face when he sings, smeared his black eye mascara until his face looked like a gooey black Dali canvas, and told us that yes, it was all true. Twenty-five years ago, he was Watergate's real infamous Deep Throat. That secret haunted him for years until Edmund Morris found Garth's alter ego slumped in the back of the White Horse Tavern drinking Chivas, wondering if his career would ever be more than just "that fake skinny guy who sings just like portly Garth Brooks, but isn't really."
Immediately prior to the release of "Dutch," Morris' fictionalized biography of Ronald Reagan, Chris Gaines and Edmund Morris found themselves at Heathrow Airport getting their boobs and butts frisked alongside Miss Diana Ross.
"Touch Me In The Morning, Just Not There" Diana urged Edmund on, saying that years of denial made her career, and would do wonders for him as well.
That gave Edmund the courage to finish the last, fake chapter of Reagan's life. In the final take on the Gipper, the former President speeds down the Pacific Coast Highway holding the hand of Edmund Morris' "Zelig" character, a la Thelma and Louise, headed toward either the rocky cliffs of La Jolla or the inner recesses of his mind. You E-Pop! reader, might as well take your pick.
Sound incredible? Not if you actually make it through the 600+ pages of "Dutch".
"Is there any there there?"
This is the question Edmund Morris asked of Reagan, but it is also the question E-Pop! asks of Edmund Morris.
The big pop culture message the past few weeks seems to be, "you're nobody if you are actually yourself." Reality is just too boring for the pre-Millenium pop culture-immersed population. We like interesting characters even if they're fake people. We like product offshoots. We like "truthiness." We like options.
Someone apparently forgot to mention to Edmund Morris that, in the event his unparalleled access to one of the most influential Presidents in history did not bear juicy fruit, he had another option. He could (gasp) just write what happened. Write about actual events. Chat about Iran Contra more than just skimming the topic. Or, discuss policy successes and failures and their context in American History.
Call me crazy, but thousand of biographers will back me up on this one, Ed.
Or maybe you should just get your own category at Amazon.com. Call it Cinematic Biography.
I suppose that pop culture fans shouldn't be surprised. Other media such as film and TV have been reinventing biography for years.
In the film JFK, Oliver Stone blurred the lines between fiction and real life documentary to the point where some history students are actually studying this film in college. The film Jefferson In Paris made slavery look like a footnote to the plight of star-crossed lovebirds. E! News and NBC's Dateline create, in their words, "recreations of actual news stories," where you see Selena's killer fleeing down steps and shadowy figures robbing gasoline stores. And then, of course, there was what some might say was the ultimate media precursor to the Reagan years, the Jerry Kazinski film called "Being There, Peter Sellers as Chauncy Gardener was the simple-minded gardener who says things like "We must tend the flowers in the winter to have blooms in Spring," and is heralded by a cynical America as a
brilliant leader.
If you read the myriad "Dutch" editorials and op-ed pieces that have inundated us lately, you know that some have griped with the mini-details. George Will, for one, spent too much time dissecting, quite literally, the truth behind Reagan's colonoscopy. He and Morris publicly disagreed about whether Reagan's doctor referred to part of the colon a "white, necrotic ridge, and compared it favorably to a vista of the Rocky Mountains.
Some have said that having a "Zelig-like" fictional character in a biography is a distraction.
But these details seem pretty minute in comparison to the fact that Morris took the "Zelig" concept one step further and constructed a whole family for himself in "Dutch," including a fake son who attended U.C. Berkeley in the 60's. The fake son's political ideology is seen as the backdrop for Reagan's crossover from Democrat to Republican in roughly the same time period.
But editorial mistakes are just the tip of the iceberg. If you think Diana Ross is pissed off lately, stop by the Reagan house in Bel Air. Nancy must be beside herself. Or is she?
As the dust settles on all the errors in "Dutch" (after all, many books have errors), and talk continues about writer Edmund Morris' single-handed creation of the new genre of fictional biography, conspiracy theorists are popping up to explain why Morris would take such a risk.
For example, is it a coincidence that Garth Brooks' new "concept" album entitled "Chris Gaines," apparently, also came out the same week as "Dutch"?
My favorite theory about Dutch is that Morris spent so much time with Reagan that he ended up becoming very close with him, and that the whole "fictional" aspect of "Dutch" was a device to cover up the presence of Reagan's Alzheimers in his final years of office. Remember all that cruising down the Pacific Highway in the "pre" second term debates that a misty Reagan shared with us?
Another theorist proposes that "Chris Gaines" is actually Deep Throat and that, if you take the 4th word in every lyric the fictional singer sings on his album, he is actually sending top secret information to the reforming "Evil Empire." The timing of the album was planned to coincide with the controversial "Dutch" to keep attention off of the subversive actions of that Communist Garth Brooks. I mean, Chris Gaines. Come on.
For fourteen years Edmund Morris trailed Ronald Reagan. Maybe he actually thought
he was there from the start. Maybe Morris has Alzheimer's, too.
That would explain why Morris says he couldn't find the words to explain a man who prepared for his summit meeting with Gorbachev by watching a video of The Sound of Music. What's Reagan supposed to do? Practice saying "Evil Empire" over and over again?
Morris writes about the Reagan pets as if they were humanoids of great historical influence. If this man had written Nixon's biography, you can bet there would have been a steamy "kiss and tell" from Checkers the dog.
In the final analysis, isn't this book the ultimate Reagan irony? Isn't it a perfect metaphor for Reagan that he would have "an imaginary friend"? Has anyone else noted that the first biography of a President known to have Alzheimers is filled with all sorts of "Alice in Wonderland" characters, with Washington, D.C. as the metaphorical looking glass?
Finally, does the public really care about fiction vs. fact? Or in this media age, does it really matter as long as the characters command the headlines?
Early sales of "Dutch' are strong in retail outlets, but their sales figures are tangibly linked to initial pre-orders. Last week's "Chris Gaines, the Television Special" was last in the ratings. And as for "Chris Gaines the CD", Garth Brooks' head-scratching attempt to re-invent himself as an Australian rock star was overshadowed by a real rock band from Florida in the latest record sales derby. For the first time since 1995, a Brooks album failed to debut at No. 1 on the U.S. pop album charts.
Despite the current environment in which they seem to thrive, fake people don't last. History will show that Morris' argument that he couldn't penetrate the "alabaster depths" of Reagan is as pale as Chris Gaines' fake, skinny ass, and probably just as clammy.
Posted by Dave Singleton at 10:15 AM
E-Pop! Highlights from Dave Singleton
E-Pop! The E-Zine Dedicated to Pop Culture Pundit...
E-Pop Issue # 1: The Best of E-Pop!'s New York Pos...
E-Pop! Issue # 2: The Oscars-Awards Shows are a Ga...
E-Pop! Issue # 3: Ricky and Grammy's Year of the ...
E-Pop! Issue # 4: Johnny We Hardly Knew Ye. Ed? No...
E-Pop! Issue # 5: Mad Cow Disease at Old Navy
E-Pop! Issue # 6: The Oscars-What Really Happened...
E-Pop! Issue # 7: Live from Booth 11 of Cafe Luxem...
E-Pop! Issue # 8: How Now Tae Bo?
E-Pop! Issue # 9: Lost in Translation-Madonna's Hu...
E-Pop! Issue # 10: The Top 10 Overexposed Pop Cul...
E-Pop! Issue # 11: It Takes Denial to Live in This...
E-Pop! Issue # 12: Grace Jones and The Book Expo
E-Pop! Issue # 13: The Blurry Pop Culture Landscap...
E-Pop! Issue # 18: Sound Bytes: Rupert Murdoch, Ru...
E-Pop! Issue # 19: Noncommittal Celebrities Piss ...
E-Pop! Issue # 20: Let's Talk About Talk Magazine ...
E-Pop! Issues # 21: The 1999 Emmy Awards (Mother! ...
E-Pop! Issue # 22: Flash! Miss America Exclusive...
E-Pop! Issue # 23: Ronald Reagan and Dutch &, Gart...
E-Pop! Issue # 25: E-Pop!'s Annual POPPIES Awards
Dave Singleton
For the last twenty years, I've been a marketer and researcher in the publishing industry as well as a freelance writer. I've written two books: The Mandates: 25 Real Rules for Successful Gay Dating and Behind Every Great Woman There's a Fabulous Gay Man: Advice from a Guy Who Gives It to You Straight. I am a regular columnist for MSN and Match.com, and a freelance contributor to websites, magazines and newspapers. My focuses are dating and relationships, LGBT issues, and pop culture. My website is www.davesingleton.com. Questions or ideas for a column? Send them to dave@davesingleton.com. All writing on this website © Dave Singleton 2009.


Comfortable and soft best meditation chair with back support floor seating decor. Amazon com wutrbyz wood tatami zaisu floor chair lazy sofa game regarding seating with back support prepare. Bonvivo easy ii adjustable floor chair with back support padded for seating ideas. Image from post replacing flooring interior design with throughout floor seating back support remodel. Amazon com wutrbyz collapsible tatami floor chair thickened regarding seating with back support remodel.
Adjustable floor seating with back support angles foldable for ideas.