text:
/*
Author: Charles Ricchio

An input manager based on SDL, as opposed to OIS. Will handle keyboard, mouse, and joystick input.
*/

#if defined(_WIN32) || defined(WIN32)

#include <windows.h>

#endif

#include <string>
#include <climits>
#include <algorithm>
#include "../Input/ChOgre_SDLInputHandler.h"

namespace ChOgre {

std::string const ChOgre_SDLInputHandler::WheelGUID = "6d049bc2000000000000504944564944";

ChOgre_SDLInputHandler::ChOgre_SDLInputHandler(Ogre::RenderWindow* renderWindow) {
    if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO | SDL_INIT_HAPTIC) != 0) {
        Ogre::LogManager::getSingleton().logMessage(
            Ogre::LogMessageLevel::LML_CRITICAL,
            "\n\nCould not initialize SDL: " + std::string(SDL_GetError()) + "\n\n");
    }

#if defined(_WIN32) || defined(WIN32)

    HWND windowHnd = 0;

    // Get window handle
    renderWindow->getCustomAttribute("WINDOW", &windowHnd);

    m_pSDLWindow = SDL_CreateWindowFrom(windowHnd);

#endif

    if (m_pSDLWindow == nullptr) {
        Ogre::LogManager::getSingleton().logMessage(
            Ogre::LogMessageLevel::LML_CRITICAL, "\n\nCould make SDL window: " + std::string(SDL_GetError()) + "\n\n");
    }

    m_pController = nullptr;

    int _nJoysticks = SDL_NumJoysticks();

    for (int i = 0; i < SDL_NumJoysticks(); ++i) {
        m_pController = SDL_JoystickOpen(i);

        SDL_JoystickGUID k = SDL_JoystickGetGUID(m_pController);
        char* l = new char[33];
        SDL_JoystickGetGUIDString(k, l, 33);
        if (l == WheelGUID) {
            m_WheelState.active = true;
            m_ControllerState.active = false;
        } else {
            m_ControllerState.active = true;
            m_WheelState.active = false;
        }
        delete l;

        if (m_pController) {
            m_pHaptic = SDL_HapticOpen(0);
            SDL_HapticRumbleInit(m_pHaptic);
            break;
        } else {
            Ogre::LogManager::getSingleton().logMessage(
                Ogre::LML_CRITICAL,
                "Could not open gamecontroller " + std::to_string(i) + ": " + std::string(SDL_GetError()) + "\n");
        }
    }

    AxisThreshold = INPUT_DEADZONE;
    WindowClose = false;
}

ChOgre_SDLInputHandler::~ChOgre_SDLInputHandler() {
    SDL_Quit();
}

void ChOgre_SDLInputHandler::update() {
    SDL_Event _event;
    while (SDL_PollEvent(&_event)) {
        if (_event.type == SDL_KEYDOWN) {
            bool was_set = false;

            if (m_KeyStates_keycode[_event.key.keysym.sym].down) {
                was_set = true;
            }

            m_KeyStates_scancode[_event.key.keysym.scancode].down = true;
            m_KeyStates_scancode[_event.key.keysym.scancode].timestamp = (double)(_event.key.timestamp) / 1000.0;
            m_KeyStates_keycode[_event.key.keysym.sym].down = true;
            m_KeyStates_keycode[_event.key.keysym.sym].timestamp = (double)(_event.key.timestamp) / 1000.0;

            if (!was_set) {
                m_CallKeyboardCallbacks(_event.key.keysym.scancode, _event.key.keysym.sym,
                                        m_KeyStates_keycode[_event.key.keysym.sym]);
            }
#ifdef _DEBUG
            Ogre::LogManager::getSingleton().logMessage(
                Ogre::LML_NORMAL, "Key press ; Scanecode: " + std::to_string(_event.key.keysym.scancode) +
                                      " Keycode: " + std::to_string(_event.key.keysym.sym) + "\n");
#endif
        } else if (_event.type == SDL_KEYUP) {
            bool was_set = false;

            if (m_KeyStates_keycode[_event.key.keysym.sym].down) {
                was_set = true;
            }

            m_KeyStates_scancode[_event.key.keysym.scancode].down = false;
            m_KeyStates_scancode[_event.key.keysym.scancode].timestamp = (double)(_event.key.timestamp) / 1000.0;
            m_KeyStates_keycode[_event.key.keysym.sym].down = false;
            m_KeyStates_keycode[_event.key.keysym.sym].timestamp = (double)(_event.key.timestamp) / 1000.0;

            if (was_set) {
                m_CallKeyboardCallbacks(_event.key.keysym.scancode, _event.key.keysym.sym,
                                        m_KeyStates_keycode[_event.key.keysym.sym]);
            }
#ifdef _DEBUG
            Ogre::LogManager::getSingleton().logMessage(
                Ogre::LML_NORMAL, "Key release ; Scanecode: " + std::to_string(_event.key.keysym.scancode) +
                                      " Keycode: " + std::to_string(_event.key.keysym.sym) + "\n");
#endif
        } else if (_event.type == SDL_MOUSEBUTTONDOWN) {
            switch (_event.button.button) {
                case SDL_BUTTON_LEFT:
                    m_MouseState.left.down = true;
                    m_MouseState.left.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_RIGHT:
                    m_MouseState.right.down = true;
                    m_MouseState.right.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_MIDDLE:
                    m_MouseState.middle.down = true;
                    m_MouseState.middle.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_X1:
                    m_MouseState.x1.down = true;
                    m_MouseState.x1.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_X2:
                    m_MouseState.x2.down = true;
                    m_MouseState.x2.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
            }

            m_CallMouseCallbacks();
        } else if (_event.type == SDL_MOUSEBUTTONUP) {
            switch (_event.button.button) {
                case SDL_BUTTON_LEFT:
                    m_MouseState.left.down = false;
                    m_MouseState.left.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_RIGHT:
                    m_MouseState.right.down = false;
                    m_MouseState.right.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_MIDDLE:
                    m_MouseState.middle.down = false;
                    m_MouseState.middle.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_X1:
                    m_MouseState.x1.down = false;
                    m_MouseState.x1.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
                case SDL_BUTTON_X2:
                    m_MouseState.x2.down = false;
                    m_MouseState.x2.timestamp = (double)(_event.button.timestamp) / 1000.0;
                    break;
            }

            m_CallMouseCallbacks();
        } else if (_event.type == SDL_MOUSEMOTION) {
            m_MouseState.position.timestamp = (double)(_event.motion.timestamp) / 1000.0;

            int _w, _h;

            SDL_GetWindowSize(m_pSDLWindow, &_w, &_h);

            m_MouseState.position.x = (double)(_event.motion.x) / (double)_w;
            m_MouseState.position.y = (double)(_event.motion.y) / (double)_h;
            m_MouseState.position.xrel = (double)(_event.motion.xrel) / (double)INT_MAX;
            m_MouseState.position.yrel = (double)(_event.motion.yrel) / (double)INT_MAX;

            if (_event.motion.state & SDL_BUTTON_LMASK) {
                m_MouseState.left.down = true;
            } else {
                m_MouseState.left.down = false;
            }

            if (_event.motion.state & SDL_BUTTON_RMASK) {
                m_MouseState.right.down = true;
            } else {
                m_MouseState.right.down = false;
            }

            if (_event.motion.state & SDL_BUTTON_MMASK) {
                m_MouseState.middle.down = true;
            } else {
                m_MouseState.middle.down = false;
            }

            if (_event.motion.state & SDL_BUTTON_X1MASK) {
                m_MouseState.x1.down = true;
            } else {
                m_MouseState.x1.down = false;
            }

            if (_event.motion.state & SDL_BUTTON_X2MASK) {
                m_MouseState.x2.down = true;
            } else {
                m_MouseState.x2.down = false;
            }

            m_CallMouseCallbacks();

        } else if (_event.type == SDL_MOUSEWHEEL) {
            m_MouseState.wheel.timestamp = (double)(_event.wheel.timestamp) / 1000.0;
            m_MouseState.wheel.x = (double)(_event.wheel.x) / (double)INT_MAX;
            m_MouseState.wheel.y = (double)(_event.wheel.y) / (double)INT_MAX;

            m_CallMouseCallbacks();
        } else if (_event.type == SDL_JOYAXISMOTION) {
            if (std::abs(((double)_event.jaxis.value / (double)SHRT_MAX)) > AxisThreshold) {
                switch (_event.jaxis.axis) {
                    case 0:
                        m_ControllerState.lstickx.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.lstickx.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.wheel.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_WheelState.wheel.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 1:
                        m_ControllerState.lsticky.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.lsticky.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.accelerator.value =
                            std::abs((((double)_event.jaxis.value / (double)SHRT_MAX) - 1) / 2);
                        m_WheelState.accelerator.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 2:
                        m_ControllerState.rstickx.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.rstickx.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.brake.value = std::abs((((double)_event.jaxis.value / (double)SHRT_MAX) - 1) / 2);
                        m_WheelState.brake.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 3:
                        m_ControllerState.rsticky.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.rsticky.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 4:
                        m_ControllerState.ltrigger.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.ltrigger.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.clutch.value = std::abs((((double)_event.jaxis.value / (double)SHRT_MAX) - 1) / 2);
                        m_WheelState.clutch.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 5:
                        m_ControllerState.rtrigger.value = ((double)_event.jaxis.value / (double)SHRT_MAX);
                        m_ControllerState.rtrigger.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;
                }

            } else {
                switch (_event.jaxis.axis) {
                    case 0:
                        m_ControllerState.lstickx.value = 0;
                        m_ControllerState.lstickx.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.wheel.value = 0;
                        m_WheelState.wheel.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 1:
                        m_ControllerState.lsticky.value = 0;
                        m_ControllerState.lsticky.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.accelerator.value = 0;
                        m_WheelState.accelerator.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 2:
                        m_ControllerState.rstickx.value = 0;
                        m_ControllerState.rstickx.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.brake.value = 0;
                        m_WheelState.brake.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 3:
                        m_ControllerState.rsticky.value = 0;
                        m_ControllerState.rsticky.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 4:
                        m_ControllerState.ltrigger.value = 0;
                        m_ControllerState.ltrigger.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        m_WheelState.clutch.value = 0;
                        m_WheelState.clutch.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;

                    case 5:
                        m_ControllerState.rtrigger.value = 0;
                        m_ControllerState.rtrigger.timestamp = (double)(_event.jaxis.timestamp) / 1000.0;
                        break;
                }
            }

#ifdef _DEBUG
            if (((((double)_event.jaxis.value) / ((double)SHRT_MAX)) > INPUT_DEADZONE) ||
                ((((double)_event.jaxis.value) / ((double)SHRT_MAX)) < -(INPUT_DEADZONE))) {
                Ogre::LogManager::getSingleton().logMessage(
                    Ogre::LML_NORMAL, "Controller axis motion - Axis:" + std::to_string(_event.jaxis.axis) + "\n");
            }
#endif
        } else if (_event.type == SDL_JOYBUTTONDOWN) {
            switch (_event.jbutton.button) {
                case 0:
                    m_ControllerState.d_up.down = true;
                    m_ControllerState.d_up.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red1.down = true;
                    m_WheelState.red1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 1:
                    m_ControllerState.d_down.down = true;
                    m_ControllerState.d_down.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red2.down = true;
                    m_WheelState.red2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 2:
                    m_ControllerState.d_left.down = true;
                    m_ControllerState.d_left.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red3.down = true;
                    m_WheelState.red3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 3:
                    m_ControllerState.d_right.down = true;
                    m_ControllerState.d_right.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red4.down = true;
                    m_WheelState.red4.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 4:
                    m_ControllerState.start.down = true;
                    m_ControllerState.start.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.rpaddle.down = true;
                    m_WheelState.rpaddle.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 5:
                    m_ControllerState.back.down = true;
                    m_ControllerState.back.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.lpaddle.down = true;
                    m_WheelState.lpaddle.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 6:
                    m_ControllerState.lstick.down = true;
                    m_ControllerState.lstick.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.rwheelb1.down = true;
                    m_WheelState.rwheelb1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 7:
                    m_ControllerState.rstick.down = true;
                    m_ControllerState.rstick.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.lwheelb1.down = true;
                    m_WheelState.lwheelb1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 8:
                    m_ControllerState.lbumper.down = true;
                    m_ControllerState.lbumper.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear1.down = true;
                    m_WheelState.gear1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 9:
                    m_ControllerState.rbumper.down = true;
                    m_ControllerState.rbumper.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear2.down = true;
                    m_WheelState.gear2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 10:
                    m_ControllerState.a.down = true;
                    m_ControllerState.a.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear3.down = true;
                    m_WheelState.gear3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 11:
                    m_ControllerState.b.down = true;
                    m_ControllerState.b.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear4.down = true;
                    m_WheelState.gear4.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 12:
                    m_ControllerState.x.down = true;
                    m_ControllerState.x.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear5.down = true;
                    m_WheelState.gear5.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 13:
                    m_ControllerState.y.down = true;
                    m_ControllerState.y.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear6.down = true;
                    m_WheelState.gear6.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 14:
                    m_WheelState.reverse.down = true;
                    m_WheelState.reverse.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 15:
                    m_WheelState.black_up.down = true;
                    m_WheelState.black_up.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 16:
                    m_WheelState.black_left.down = true;
                    m_WheelState.black_left.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 17:
                    m_WheelState.black_down.down = true;
                    m_WheelState.black_down.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 18:
                    m_WheelState.black_right.down = true;
                    m_WheelState.black_right.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 19:
                    m_WheelState.rwheelb2.down = true;
                    m_WheelState.rwheelb2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 20:
                    m_WheelState.lwheelb2.down = true;
                    m_WheelState.lwheelb2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 21:
                    m_WheelState.rwheelb3.down = true;
                    m_WheelState.rwheelb3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 22:
                    m_WheelState.lwheelb3.down = true;
                    m_WheelState.lwheelb3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;
            }

#ifdef _DEBUG
            Ogre::LogManager::getSingleton().logMessage(
                Ogre::LML_NORMAL, "Controller button press - Button:" + std::to_string(_event.jbutton.button) + "\n");
#endif
        } else if (_event.type == SDL_JOYBUTTONUP) {
            switch (_event.jbutton.button) {
                case 0:
                    m_ControllerState.d_up.down = false;
                    m_ControllerState.d_up.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red1.down = false;
                    m_WheelState.red1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 1:
                    m_ControllerState.d_down.down = false;
                    m_ControllerState.d_down.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red2.down = false;
                    m_WheelState.red2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 2:
                    m_ControllerState.d_left.down = false;
                    m_ControllerState.d_left.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red3.down = false;
                    m_WheelState.red3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 3:
                    m_ControllerState.d_right.down = false;
                    m_ControllerState.d_right.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.red4.down = false;
                    m_WheelState.red4.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 4:
                    m_ControllerState.start.down = false;
                    m_ControllerState.start.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.rpaddle.down = false;
                    m_WheelState.rpaddle.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 5:
                    m_ControllerState.back.down = false;
                    m_ControllerState.back.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.lpaddle.down = false;
                    m_WheelState.lpaddle.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 6:
                    m_ControllerState.lstick.down = false;
                    m_ControllerState.lstick.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.rwheelb1.down = false;
                    m_WheelState.rwheelb1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 7:
                    m_ControllerState.rstick.down = false;
                    m_ControllerState.rstick.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.lwheelb1.down = false;
                    m_WheelState.lwheelb1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 8:
                    m_ControllerState.lbumper.down = false;
                    m_ControllerState.lbumper.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear1.down = false;
                    m_WheelState.gear1.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 9:
                    m_ControllerState.rbumper.down = false;
                    m_ControllerState.rbumper.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear2.down = false;
                    m_WheelState.gear2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 10:
                    m_ControllerState.a.down = false;
                    m_ControllerState.a.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear3.down = false;
                    m_WheelState.gear3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 11:
                    m_ControllerState.b.down = false;
                    m_ControllerState.b.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear4.down = false;
                    m_WheelState.gear4.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 12:
                    m_ControllerState.x.down = false;
                    m_ControllerState.x.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear5.down = false;
                    m_WheelState.gear5.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 13:
                    m_ControllerState.y.down = false;
                    m_ControllerState.y.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    m_WheelState.gear6.down = false;
                    m_WheelState.gear6.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 14:
                    m_WheelState.reverse.down = false;
                    m_WheelState.reverse.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 15:
                    m_WheelState.black_up.down = false;
                    m_WheelState.black_up.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 16:
                    m_WheelState.black_left.down = false;
                    m_WheelState.black_left.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 17:
                    m_WheelState.black_down.down = false;
                    m_WheelState.black_down.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 18:
                    m_WheelState.black_right.down = false;
                    m_WheelState.black_right.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 19:
                    m_WheelState.rwheelb2.down = false;
                    m_WheelState.rwheelb2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 20:
                    m_WheelState.lwheelb2.down = false;
                    m_WheelState.lwheelb2.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 21:
                    m_WheelState.rwheelb3.down = false;
                    m_WheelState.rwheelb3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;

                case 22:
                    m_WheelState.lwheelb3.down = false;
                    m_WheelState.lwheelb3.timestamp = (double)(_event.jbutton.timestamp) / 1000.0;
                    break;
            }

#ifdef _DEBUG
            Ogre::LogManager::getSingleton().logMessage(
                Ogre::LML_NORMAL, "Controller button release - Button:" + std::to_string(_event.jbutton.button) + "\n");
#endif
        } else if (_event.type == SDL_JOYHATMOTION) {
            m_WheelState.d_pad.reset();
            switch (_event.jhat.value) {
                case SDL_HAT_UP:
                    m_WheelState.d_pad.up = true;
                    break;
                case SDL_HAT_RIGHTUP:
                    m_WheelState.d_pad.up_right = true;
                    break;
                case SDL_HAT_RIGHT:
                    m_WheelState.d_pad.right = true;
                    break;
                case SDL_HAT_RIGHTDOWN:
                    m_WheelState.d_pad.down_right = true;
                    break;
                case SDL_HAT_DOWN:
                    m_WheelState.d_pad.down = true;
                    break;
                case SDL_HAT_LEFTDOWN:
                    m_WheelState.d_pad.down_left = true;
                    break;
                case SDL_HAT_LEFT:
                    m_WheelState.d_pad.left = true;
                    break;
                case SDL_HAT_LEFTUP:
                    m_WheelState.d_pad.up_left = true;
                    break;
                case SDL_HAT_CENTERED:
                    m_WheelState.d_pad.centered = true;
                    break;
            }
        } else if (_event.type == SDL_JOYDEVICEADDED) {
            if (_event.jdevice.which == 0) {
                if (m_pController) {
                    SDL_JoystickClose(m_pController);
                    m_pController = nullptr;
                }
                m_pController = SDL_JoystickOpen(0);

                SDL_JoystickGUID k = SDL_JoystickGetGUID(m_pController);
                char* l = new char[33];
                SDL_JoystickGetGUIDString(k, l, 33);
                if (l == WheelGUID) {
                    m_WheelState.active = true;
                    m_ControllerState.active = false;
                } else {
                    m_ControllerState.active = true;
                    m_WheelState.active = false;
                }
                delete l;

                m_pHaptic = SDL_HapticOpen(0);
                SDL_HapticRumbleInit(m_pHaptic);
            }
        } else if (_event.type == SDL_JOYDEVICEREMOVED) {
            if (_event.jdevice.which == 0) {
                if (m_pController) {
                    SDL_JoystickClose(m_pController);
                    m_pController = nullptr;
                    m_ControllerState.active = false;
                    m_WheelState.active = false;
                    SDL_HapticClose(m_pHaptic);
                }
            }
        } else if (_event.type == SDL_WINDOWEVENT) {
            if (_event.window.event == SDL_WINDOWEVENT_CLOSE) {
                WindowClose = true;
            }
        }
    }
}

void ChOgre_SDLInputHandler::grabMouse(bool grab) {
    SDL_bool _grab = grab ? SDL_TRUE : SDL_FALSE;
    SDL_SetWindowGrab(m_pSDLWindow, _grab);
}

void ChOgre_SDLInputHandler::runHapticEffect(ChOgreHapticEffect& effect, int iterations) {
    int _effect_id = SDL_HapticNewEffect(m_pHaptic, &effect);

    // SDL_HapticRunEffect(m_pHaptic, _effect_id, iterations);
    SDL_HapticRumbleInit(m_pHaptic);
    SDL_HapticRumblePlay(m_pHaptic, 0.5, 2000);

    SDL_HapticDestroyEffect(m_pHaptic, _effect_id);
}

void ChOgre_SDLInputHandler::runHapticRumble(float strength, double length) {
    SDL_HapticRumblePlay(m_pHaptic, strength, ((unsigned int)(length * 1000.0)));
}

void ChOgre_SDLInputHandler::stopHapticRumble() {
    SDL_HapticRumbleStop(m_pHaptic);
}

ChOgreKeyState& ChOgre_SDLInputHandler::getKeyState(SDL_Scancode scancode) {
    return m_KeyStates_scancode[scancode];
}

ChOgreKeyState& ChOgre_SDLInputHandler::getKeyState(SDL_Keycode keycode) {
    return m_KeyStates_keycode[keycode];
}

ChOgreMouseState& ChOgre_SDLInputHandler::getMouseState() {
    return m_MouseState;
}

ChOgreControllerState& ChOgre_SDLInputHandler::getControllerState() {
    return m_ControllerState;
}

ChOgreWheelState& ChOgre_SDLInputHandler::getWheelState() {
    return m_WheelState;
}

///////////////////////////////////////////////////////////////////////////////////////////
void ChOgre_SDLInputHandler::addCallback(ChOgreKeyboardCallback& callback) {
    m_KeyboardCallbackPtrs.push_back(&callback);
}

void ChOgre_SDLInputHandler::addCallback(ChOgreMouseCallback& callback) {
    m_MouseCallbackPtrs.push_back(&callback);
}

void ChOgre_SDLInputHandler::addCallback(ChOgreControllerCallback& callback) {
    m_ControllerCallbackPtrs.push_back(&callback);
}

void ChOgre_SDLInputHandler::addCallback(ChOgreWindowCallback& callback) {
    m_WindowCallbackPtrs.push_back(&callback);
}
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
void ChOgre_SDLInputHandler::removeCallback(ChOgreKeyboardCallback& callback) {
    auto a = *std::find(m_KeyboardCallbackPtrs.begin(), m_KeyboardCallbackPtrs.end(), &callback);
    auto b = m_KeyboardCallbackPtrs.back();
    std::swap(a, b);
    m_KeyboardCallbackPtrs.pop_back();
}

void ChOgre_SDLInputHandler::removeCallback(ChOgreMouseCallback& callback) {
    auto a = *std::find(m_MouseCallbackPtrs.begin(), m_MouseCallbackPtrs.end(), &callback);
    auto b = m_MouseCallbackPtrs.back();
    std::swap(a, b);
    m_MouseCallbackPtrs.pop_back();
}

void ChOgre_SDLInputHandler::removeCallback(ChOgreControllerCallback& callback) {
    auto a = *std::find(m_ControllerCallbackPtrs.begin(), m_ControllerCallbackPtrs.end(), &callback);
    auto b = m_ControllerCallbackPtrs.back();
    std::swap(a, b);
    m_ControllerCallbackPtrs.pop_back();
}

void ChOgre_SDLInputHandler::removeCallback(ChOgreWindowCallback& callback) {
    auto a = *std::find(m_WindowCallbackPtrs.begin(), m_WindowCallbackPtrs.end(), &callback);
    auto b = m_WindowCallbackPtrs.back();
    std::swap(a, b);
    m_WindowCallbackPtrs.pop_back();
}
///////////////////////////////////////////////////////////////////////////////////////////

void ChOgre_SDLInputHandler::m_CallKeyboardCallbacks(scancode_t ScanCode,
                                                     keycode_t KeyCode,
                                                     const ChOgreKeyState& KeyState) {
    std::for_each(
        m_KeyboardCallbackPtrs.begin(), m_KeyboardCallbackPtrs.end(),

        [ScanCode, KeyCode, &KeyState](ChOgreKeyboardCallback* ptr) { ptr->call(ScanCode, KeyCode, KeyState); });
}

void ChOgre_SDLInputHandler::m_CallMouseCallbacks() {
    std::for_each(m_MouseCallbackPtrs.begin(), m_MouseCallbackPtrs.end(),

                  [this](ChOgreMouseCallback* ptr) { ptr->call(this->getMouseState()); });
}

void ChOgre_SDLInputHandler::m_CallControllerCallbacks() {
    std::for_each(m_ControllerCallbackPtrs.begin(), m_ControllerCallbackPtrs.end(),

                  [this](ChOgreControllerCallback* ptr) { ptr->call(this->getControllerState()); });
}

void ChOgre_SDLInputHandler::m_CallWindowCallbacks() {
    std::for_each(m_WindowCallbackPtrs.begin(), m_WindowCallbackPtrs.end(),

                  [this](ChOgreWindowCallback* ptr) { ptr->call(); });
}
}


text:
GUSY, JAMES J. SR.
James J. Gusy, Sr. 81, of East Hartford, beloved husband for 53 years to Yolanda (Urbanski) Gusy, passed from this life on Tuesday (January 7, 2003) at St. Francis Hospital in Hartford. James was born in Buffalo, NY and had lived in the East Hartford community for 49 years. James had attended Wittenberg College in Wittenberg Ohio and had been a proud World War II veteran of the U.S. Air Force. James had been very active in the East Hartford Little League and had been a charter member of both the Glenbrook Swim Club and the East Hartford Ski Club. His most enjoyable moments were spent at family events. Along with his wife, James is survived by his sons, James J. Gusy Jr. and his wife, Susan C. of Vernon, and Jeffrey J. Gusy and his wife, Kate of South Windsor; and by his daughter, Susan M. Mears and her husband, Keith E. of Vernon. James also leaves his two sisters, Annette Stevens and Joan Gusy both of Buffalo, NY; and by his six grandchildren, Sarah, Justin, Shannon and Julie Gusy and Rebecca and Jennifer Mears. He Was predeceased by his brother, Eugene Gusy Jr. Relatives and friends are invited to gather on Friday January 10, at St. Christopher Church, 538 Brewer St., East Hartford, where a Mass of Christian Burial will be celebrated at 10 a.m. Committal services will follow in the Silver Lane Cemetery, East Hartford. There are no calling hours. Expressions of sympathy may be made in the form of memorial donations in James's name to the American Lung Association, 45 Ash St. East Hartford, CT 06108-3272.
Saint Francis Care

redpajama_set_name: RedPajamaCommonCrawl


Parents' play talk is coded into other categories only when they are directed toward the child or towards a toy that the child is playing with.
For example, if the parent spoke to the child as Mr. Potato Head, you would code that speech.
If the child was holding Hamm, the Piggy bank, and the parent (pretending to be Mr. Potato Head) spoke to Hamm, you would code that speech.
HOWEVER, if the parent (pretending to be Mr. Potato Head) spoke to Hamm, who was standing on the table or in the parent's hand, you would not code the parent's speech.


text:
Home » Briefly Noted: Aurora Imaging introduces reimbursement hotline
Briefly Noted: Aurora Imaging introduces reimbursement hotline
Aurora Imaging Technology (North Andover, Massachusetts) reported the formal launch of the Aurora Breast MRI reimbursement hotline. An example of key services offered through the hotline include third-party payor coverage and reimbursement overviews, new account billing assistance, locale specific billing insights, and answers to questions on breast imaging reimbursement issues, with a goal of facilitating accurate billing to Medicare and private payors for breast MRI procedures.
"For many practices today, barriers to payment are sometimes a result of a lack of accurate billing tools," said Olivia Ho Cheng, president/CEO. "When practices do not have access to appropriate coding and coverage guidelines, they don't have the correct tools to report procedures, resulting in potential reimbursement issues."
Applied Biosystems unveils support center
Applied Biosystems (Foster City, California) reported the opening of an Application Support Center located at its R&D headquarters. The 10,000 square foot facility is intended to drive closer relationships between Applied Bio scientists and its life science customers, the company said.
Applied Bio offers training and application support through 20 centers around the world, including the facility recently opened in Shanghai, China.
Toshiba sponsors virtual colonoscopy course
Toshiba America Medical Systems (Tustin, California) reported it will sponsor a continuing medical education course in virtual colonoscopy in collaboration with Brigham and Women's Hospital (Boston) Massachusetts General Hospital ( Boston) and the Department of Continuing Education of Harvard Medical School (Boston).
Courses in virtual colonoscopy have been offered at Harvard Medical School since 2004, and Harvard is now expanding the program by offering this course at the Toshiba Education Center in Irvine, California, with open enrollment to physicians.
Toshiba produces diagnostic imaging systems and coordinates clinical diagnostic imaging research for all modalities in the U.S.


Built for smaller-statured shooters, the 720 Reduced Length has a 13″ length of pull and a 24″ barrel, and ships with 5 flush choke tubes. The CZ 720 is a gas-operated semi-automatic shotgun built on a lightweight alloy receiver. Chambered to accept both 2 3/4″ and 3″ shells, making it a great choice for both upland game and waterfowl. With a chrome-lined bore and black hard chrome exterior finish, the 720 will resist corrosion after many seasons in the field.
The 712/720 comes with a magazine tube plug installed for waterfowl. If the plug is removed, it gives the upland hunter a 4+1 capacity.
I've had a 720 RL for a couple years now. I bought it for my daughters who don't hunt, only shoot clays.
When I got the gun, I took it apart and cleaned and lubed it per the instructions on the CZ YouTube videos. The gun would choke on the cheap, 7/8 oz rounds. Put a few boxes of hunting loads, and the gun runs fine now.


In Bond's latest adventure, and possibly the last for Daniel Craig, a cryptic message from his past sends Bond on a trail to uncover a sinister organization. While M battles political forces to keep the secret service alive, Bond peels back the layers of deceit to reveal the terrible truth behind SPECTRE. This film is releasing in regular and IMAX versions, this is the regular version.


TORONTO features timeless scandinavian furniture design and ideal seating. It's a feast to the eyes and joyful pleasure to sit in.
In order to receive our latest news and trends you can subscribe to our newsletter system to receive news in your email inbox. We do not share your registration information with any third parties. Every newsletter will contain unsubscription link if you want to cancel news delivery.


text:
Tag: The Legen of Zelda: Triforce Heroes
Saying Sayonara to 2016
As the holiday season and the year 2016 come to a close (very conveniently at the same time in this case), I feel like I can't help but take a moment to reflect on some things. As I mentioned in my last post about Carrie Fisher's passing, the general attitude seems to be that 2016 can't end soon enough. Globally, the world is a bit of a mess. In the United States, the incredibly divisive presidential election we just completed left everything feeling a little bit fractured and not-so-unified. In the world of popular culture lots of people who were well-known and highly adored by the general public passed away.
It's understandable why people feel the year was so bad, and admittedly there's some of that I've gotten bogged in too over the last couple months. However, for me personally, the year really hasn't been all that awful. In fact, it's been a fairly great year all things considered.
One thing I always find interesting as a gamer is reflecting on what games "defined my year," as it were. Granted I didn't necessarily diversify my interests a whole lot, but that doesn't mean there weren't a lot of things I played.
Toward the beginning of the year, I was still riding some of my Wii U hype. I just got my system as a present last Hanukah, in fact, so games like Super Mario Maker were still huge time sucks, moreso than they are now.
Image provided by Wikimedia Commons
Another thing that I'd gotten for Hanukah in 2015 also continued to take up my time, and that was The Legend of Zelda: Triforce Heroes.
While the game wasn't a traditional Zelda game like we'd all been waiting for in the relatively soon-to-be-announced Breath of the Wild, it was still a blast to play. The game had some awesome multiplayer functionality both with friends and with strangers, and to this day I don't think I'm over how hilarious it is to spam the cheerleader pom-pom Link emoji.
On top of that, you could literally dress Link up as a cheerleader and it was one of the most viable costumes in that game. Not sure I ever thought I'd be so gung-ho to get Link to cross dress in all honesty, but I was.
Also earlier on in the year, while I was still getting into the swing of the Spring semester, I remember binging every Shantae game that's been released thus far.
Image provided by WayForward
Not only did I play the original Shantae for the Game Boy, I played Shantae: Risky's Revenge and Shantae and the Pirate's Curse. I fell in love with the series fast thanks to the lovable characters, the quirky and fun writing, the beautiful animation style and of course the music (composed by Jake Kaufman, who also produced the music for another one of my favorite games in the same general style: Shovel Knight). I literally played through all three in a row and loved every minute of it, even if none of the games were necessarily all that beefy.
I do know that I can thank MowtenDoo for really sparking my interest in the series thanks to his indescribably wonderful rendition of one of the game's songs, "The Nightmare Woods (Run Run Rottytops!)" in a way that's truly unforgettable and continues to be one of my favorite videos on YouTube. Seriously, I listened to this way too many times this year I'm sure. But it was worth it.
Doing a little bit of research, it looks like the latest installment in the series, Shantae: Half-Genie Hero, has been released just recently, but it apparently slipped under my radar somehow. I'm wholeheartedly Ret-2-Go with that game as soon as I can pick it up, as there are a few too many games in 2016 that I unfortunately missed despite wanting to play them. Didn't have quite as much time to devote to these things as I would have liked.
Next on the list of my year's rundown is the first in what I would consider my 'return of old gaming loves' trilogy. That, of course, was Fire Emblem Fates. All three together technically, but Birthright was undoubtedly my personal favorite.
There's a few things I'll never forget just leading up to the games being released. First, I'll never forget the hunt my friends and I went on trying to find some of the special edition three-in-one game cartridges for Fates that was a resounding failure but had some great moments. Like getting literally laughed at by a guy in a Game Stop one time. That was awesome.
I'll also never forget getting the first game, Birthright, as it was actually a gift that was given to me by the editors of the News section on the Daily Titan, Micah and Brianna, as thanks for being their assistant for the Fall 2015 semester. Seriously, check it out, I still have the note here:
It was really awesome, especially considering it apparently took a lot of work to build up to the reveal, including using my friend Kaleb as a spy to figure out which version of the game I wanted more.
Fire Emblem took up a huge chunk of my life from there on out, as I went on to play all three versions. In a row. In hindsight, admittedly not the best idea, but I'm really into the games so it was the decision I made at the time. Birthright was incredible, rose-colored glasses or not, Conquest literally made my just about cry on multiple occasions from how unnecessarily difficult it got to be at times (Seriously, screw the port level. If I never play that game again, the port level is to blame) and Revelations was… Admittedly underwhelming.
I meant to talk about it on here a little bit, but beyond just being burnt out on the games by the time I hit the third, there were a few things that really sort of killed the experience for me unfortunately. First, I padded it out too much for myself. I tried to grind all the characters up to have a ton of diverse skills rather than planning ahead what I would've wanted, and it wound up being far more effort than I was honestly willing to put in. Second, they killed off my favorite character in what was literally the worst possible way in my opinion. I have a huge, huge rant still built up about it because the moment was so caustic for me, but this isn't really the time or the place, so perhaps I'll still come back to it later. Third, there was another game coming on the horizon that left me rushing to finish, which took away a lot of my enjoyment toward the latter half of the storyline. Who knows, maybe if I go back to it now I'll have a better time, but for now Birthright will continue to be the high point of my memories for Fire Emblem Fates.
The second game in my personal trilogy was Monster Hunter Generations.
I talked about it on here a bit, so I don't think I need to go into too much detail, but this game sucked away quite a bit of my time as well. Though I've only been playing Monster Hunter since the last major release, Monster Hunter 4U, it has quickly become one of my favorite franchises.
The seemingly near infinite levels of customization thanks to a wide range of monsters and a progression-based-on-skill system is something almost totally unique to Monster Hunter in my gaming experience, and it ticks boxes like crazy for me. There are very few games that I get super in depth about building sets and doing hours of research into said sets and also things like lore, but Monster Hunter is definitely one of them. It's also one of the favorite games of my friend Juan, so we always have a good time going on extravagant hunts as a super powered duo, Hunting Horn and Charge Blade in hands.
Granted, I'll admit that the game wasn't quite as invigorating as MH4U for me, since that was the game where I truly had a skill curve to learn and overcome so I could truly become a master, but Generations was still a blast to play through and through.
Last, but certainly not least, comes what must be an obvious entry on this list. Hell, there's only one game that really defined not only the latter half of my year, but also most of what I've built my blogging experience on so far.
And that game is, of course, Pokémon Sun and Moon. Because technically they go together even if they're two separate games. Because Pokémon works like that.
Pokémon Sun Box Art
Pokémon Moon Box Art
Images provided by Serebii.net
Really I've said more than enough about these games in many, many posts over the last year, so I don't think I need to waste too much time on it right now. Not only were the games beautiful and fun experiences in themselves, surpassing what I consider to be some of my favorite and some of the best constructed games in the series thus far, they reinvigorated the love of competitive Pokémon breeding that I fostered in Alpha Sapphire and got me back into the Pokémon YouTube communities I followed around the same time.
I have been and will continue to do some breeding in the games, especially once the Pokébank opens in January, and I've considered doing more competitive battling in 2017. There's an official battle competition coming up pretty soon that I'm pretty sure I'll be entering, so I'm sure there will be plenty more posts in the future on the subject as well.
Beyond those massive entries that took up my time, there are a few other games that permeated my year's experiences. The 20th Anniversary of Pokémon for me included the continued playing of Pokémon Shuffle and Pokémon Picross on my 3DS, which were my puzzle game obsessions that I've only recently seemed to kick.
Images provided by Serebii.net (here and here)
The summer was undoubtedly defined by Niantic's Pokémon GO, the game which really felt the most universally unifying during the sub-par situations of the year surrounding it.
My whole family was playing the game together and I still remember wandering El Camino College hatching eggs after my summer classes there. Though I wound up a little disillusioned with the game, and still haven't jumped in to catch the start of the Generation 2 Pokédex, I still can't imagine Pokémon GO won't hold a place in history in some way or another.
Also hitting the mobile gaming scene this year was Super Mario Run.
I gave my thoughts on the game in depth a little while ago, and as a small follow-up I will say that having spent money on the full game has made the experience even better for me. I've gotten really into collecting all the colored coins in single player on long road trips and I have a pretty well developed town so far. As a first jump into the mobile scene for Nintendo, I can personally say that Super Mario Run has been a success, and I'm looking forward to seeing more.
I also replayed quite a few older Steam games that I adore but haven't touched in some time this year.
My friend Samantha and I played Terraria for a long stretch of time together, progressively getting better and better as we learned and built more complicated structures and items together. The Binding of Isaac: Rebirth ate up huge chunks of my time in brief intervals throughout the year, as it's always an addictive rogue-like experience that I'll never get tired of. The same could be said for FTL, which I can only describe as a real-time rogue-like spaceship command and battle simulator. For anyone who hasn't heard of the game it can be hard to explain, but it's one of my favorite games of all time.
My 2016 was defined by more than just the video games I played, however. It marked the end of my first year at college. It also included my first semester as an editor for a college paper, one which I feel went really well considering all the crazy things that happened politically while I was in charge of the News page.
2016 was where I really feel like I got into the rhythm of driving and being able to get myself places. It was also the first year where I got to vote for a serious election – despite how divisive it might have been as far as an election went.
However, because of my time as a journalist, I felt like this was the first time I really got to apply what I was doing and learning to a real-world event. Literally the more I learned, the more prepared I felt to vote in November.
On top of that, I feel like I really learned a lot just in general. Two semesters and a summer intersession at college had me taking classes all over the proverbial spectrum at two different schools: Cal State Fullerton and El Camino College. Not only was the subject matter of the things I learned interesting, I also got to explore more places at the same time, which I also enjoy doing.
I got my first few relatively well-paying jobs in 2016 between being an editor on the Daily Titan and working for Boom: A Journal of California. Thanks to that, I've felt more independent than I ever really have before.
In 2016, I went to New York for the first time in I honestly don't know how long.
I used to have a lot of family living out there, but now most of my close relatives live here in California, so I rarely ever get to go out to the East Coast anywhere that isn't Florida. The trip was amazing and so much fun, and I really felt like I got close to a lot of my friends and colleagues in the newsroom that went with me.
While I was there, not only did I get to visit the Nintendo store inNew York (an experience you can read more about in one of my earliest posts):
I also got to relive a part of my Dad's childhood by finding his old high school.
So, all and all, I'd say that trip was probably one of the most memorable parts of the year for me.
I got to visit SpaceX for the first time this year, and though I wasn't allowed to take any pictures inside, it was still a phenomenal place to see. Seriously, some of the stuff they have going on in there is incredible.
In my opinion, I really started to come out of my shell a little bit more in 2016, and that helped me meet and interact with some people who I can really see myself continuing to talk to for a long time to come. Both those in and out of the newsroom.
2016 was also the first year I've let my beard grow out. It started as a No Shave November thing we did for the Daily Titan, but in the end I wound up getting such a positive reception that I kept the hair grown out.
Seriously, what a difference a little bit of hair will make. I look totally different from one picture to the other, if you ask me. Probably helps that I had more hair on top of my head to cover my forehead in the first picture too… But that's another story.
Finally, 2016 was where I really got into blogging. Yeah, seems like a silly thing to cap this whole list off with, but you are literally reading this on my blog. I started this blog back on February 18, a day after my birthday, thanks to some school assignments I had to do. My Communications 233 class required us to have a blog that we posted 20 things on of any subject we chose. Naturally, I chose to make this a blog about video games and about my journalism experience.
Though it started as an assignment, one that I literally had to come up with ways to finish by coming up with admittedly silly things to post, I've come to really love doing this. Writing is a passion of mine, and getting the chance to write more often has been wonderful. It's also been a way to voice my opinions and thoughts on various subjects, which I don't tend to do in a largely public forum like this very often. I may be a relatively small blog still, but I feel like I've found somewhat of a rhythm thanks to Pokémon Sun and Moon, and I'm looking forward to writing more on whatever comes up in 2017. As goofy as it might be to say it, one of my New Year's Resolutions is to try and write more next year, so I hope you all stick around to see whatever it is I come up with to write about.
Really, from the bottom of my heart thank you to everyone who's following my blog, everyone who's read anything I've wrote and to all my family and friends who have helped me explore, encouraged my writing ambitions, and worked to make sure I put my best foot forward. If you have any of your own favorite memories from 2016, or if you just want to send a good riddance sendoff to the year, feel free to share them down in the comments below.
I hope everyone has a Happy New Year, and here's to 2017 being a happier time overall than 2016 seems to have been!
Boom Magazine
Fire Emblem Fates
Hunting Horn
Jake Kaufman
MH4U
Monster Hunter 4 Ultimate
Monster Hunter Generations
MowtenDoo
New Year's Eve 2016
Nintendo NY
Pokemon Picross
Pokemon Shuffle
School of Performing Arts
Shantae and the Pirate's Curse
Shantae: Risky's Revenge
The Binding of Isaac: Rebirth
The Legen of Zelda: Triforce Heroes


text:
require 'abstract_unit'

# a controller class to facilitate the tests
class ActionPackAssertionsController < ActionController::Base

  # this does absolutely nothing
  def nothing() head :ok end

  # a standard template
  def hello_world() render :template => "test/hello_world"; end

  # a standard template
  def hello_xml_world() render :template => "test/hello_xml_world"; end

  # a standard partial
  def partial() render :partial => 'test/partial'; end

  # a redirect to an internal location
  def redirect_internal() redirect_to "/nothing"; end

  def redirect_to_action() redirect_to :action => "flash_me", :id => 1, :params => { "panda" => "fun" }; end

  def redirect_to_controller() redirect_to :controller => "elsewhere", :action => "flash_me"; end

  def redirect_to_controller_with_symbol() redirect_to :controller => :elsewhere, :action => :flash_me; end

  def redirect_to_path() redirect_to '/some/path' end

  def redirect_to_named_route() redirect_to route_one_url end

  # a redirect to an external location
  def redirect_external() redirect_to "http://www.rubyonrails.org"; end

  # a 404
  def response404() head '404 AWOL' end

  # a 500
  def response500() head '500 Sorry' end

  # a fictional 599
  def response599() head '599 Whoah!' end

  # putting stuff in the flash
  def flash_me
    flash['hello'] = 'my name is inigo montoya...'
    render :text => "Inconceivable!"
  end

  # we have a flash, but nothing is in it
  def flash_me_naked
    flash.clear
    render :text => "wow!"
  end

  # assign some template instance variables
  def assign_this
    @howdy = "ho"
    render :inline => "Mr. Henke"
  end

  def render_based_on_parameters
    render :text => "Mr. #{params[:name]}"
  end

  def render_url
    render :text => "<div>#{url_for(:action => 'flash_me', :only_path => true)}</div>"
  end

  def render_text_with_custom_content_type
    render :text => "Hello!", :content_type => Mime::RSS
  end

  # puts something in the session
  def session_stuffing
    session['xmas'] = 'turkey'
    render :text => "ho ho ho"
  end

  # raises exception on get requests
  def raise_on_get
    raise "get" if request.get?
    render :text => "request method: #{request.env['REQUEST_METHOD']}"
  end

  # raises exception on post requests
  def raise_on_post
    raise "post" if request.post?
    render :text => "request method: #{request.env['REQUEST_METHOD']}"
  end

  def get_valid_record
    @record = Class.new do
      def valid?
        true
      end

      def errors
        Class.new do
           def full_messages; []; end
        end.new
      end

    end.new

    render :nothing => true
  end

  def get_invalid_record
    @record = Class.new do

      def valid?
        false
      end

      def errors
        Class.new do
           def full_messages; ['...stuff...']; end
        end.new
      end
    end.new

    render :nothing => true
  end

  # 911
  def rescue_action(e) raise; end
end

# Used to test that assert_response includes the exception message
# in the failure message when an action raises and assert_response
# is expecting something other than an error.
class AssertResponseWithUnexpectedErrorController < ActionController::Base
  def index
    raise 'FAIL'
  end

  def show
    render :text => "Boom", :status => 500
  end
end

class UserController < ActionController::Base
end

module Admin
  class InnerModuleController < ActionController::Base
    def index
      render :nothing => true
    end

    def redirect_to_index
      redirect_to admin_inner_module_path
    end

    def redirect_to_absolute_controller
      redirect_to :controller => '/content'
    end

    def redirect_to_fellow_controller
      redirect_to :controller => 'user'
    end

    def redirect_to_top_level_named_route
      redirect_to top_level_url(:id => "foo")
    end
  end
end

# a test case to exercise the new capabilities TestRequest & TestResponse
class ActionPackAssertionsControllerTest < ActionController::TestCase
  # let's get this party started
  def setup
    ActionController::Routing::Routes.reload
    ActionController::Routing.use_controllers!(%w(action_pack_assertions admin/inner_module user content admin/user))
  end

  def teardown
    ActionController::Routing::Routes.reload
  end

  # -- assertion-based testing ------------------------------------------------

  def test_assert_tag_and_url_for
    get :render_url
    assert_tag :content => "/action_pack_assertions/flash_me"
  end

  # test the get method, make sure the request really was a get
  def test_get
    assert_raise(RuntimeError) { get :raise_on_get }
    get :raise_on_post
    assert_equal @response.body, 'request method: GET'
  end

  # test the get method, make sure the request really was a get
  def test_post
    assert_raise(RuntimeError) { post :raise_on_post }
    post :raise_on_get
    assert_equal @response.body, 'request method: POST'
  end

#   the following test fails because the request_method is now cached on the request instance
#   test the get/post switch within one test action
#   def test_get_post_switch
#     post :raise_on_get
#     assert_equal @response.body, 'request method: POST'
#     get :raise_on_post
#     assert_equal @response.body, 'request method: GET'
#     post :raise_on_get
#     assert_equal @response.body, 'request method: POST'
#     get :raise_on_post
#     assert_equal @response.body, 'request method: GET'
#   end

  # test the redirection to a named route
  def test_assert_redirect_to_named_route
    with_routing do |set|
      set.draw do |map|
        map.route_one 'route_one', :controller => 'action_pack_assertions', :action => 'nothing'
        map.connect   ':controller/:action/:id'
      end
      set.install_helpers

      process :redirect_to_named_route
      assert_redirected_to 'http://test.host/route_one'
      assert_redirected_to route_one_url
    end
  end

  def test_assert_redirect_to_named_route_failure
    with_routing do |set|
      set.draw do |map|
        map.route_one 'route_one', :controller => 'action_pack_assertions', :action => 'nothing', :id => 'one'
        map.route_two 'route_two', :controller => 'action_pack_assertions', :action => 'nothing', :id => 'two'
        map.connect   ':controller/:action/:id'
      end
      process :redirect_to_named_route
      assert_raise(ActiveSupport::TestCase::Assertion) do
        assert_redirected_to 'http://test.host/route_two'
      end
      assert_raise(ActiveSupport::TestCase::Assertion) do
        assert_redirected_to :controller => 'action_pack_assertions', :action => 'nothing', :id => 'two'
      end
      assert_raise(ActiveSupport::TestCase::Assertion) do
        assert_redirected_to route_two_url
      end
    end
  end

  def test_assert_redirect_to_nested_named_route
    with_routing do |set|
      set.draw do |map|
        map.admin_inner_module 'admin/inner_module', :controller => 'admin/inner_module', :action => 'index'
        map.connect            ':controller/:action/:id'
      end
      @controller = Admin::InnerModuleController.new
      process :redirect_to_index
      # redirection is <{"action"=>"index", "controller"=>"admin/admin/inner_module"}>
      assert_redirected_to admin_inner_module_path
    end
  end

  def test_assert_redirected_to_top_level_named_route_from_nested_controller
    with_routing do |set|
      set.draw do |map|
        map.top_level '/action_pack_assertions/:id', :controller => 'action_pack_assertions', :action => 'index'
        map.connect   ':controller/:action/:id'
      end
      @controller = Admin::InnerModuleController.new
      process :redirect_to_top_level_named_route
      # assert_redirected_to "http://test.host/action_pack_assertions/foo" would pass because of exact match early return
      assert_redirected_to "/action_pack_assertions/foo"
    end
  end

  def test_assert_redirected_to_top_level_named_route_with_same_controller_name_in_both_namespaces
    with_routing do |set|
      set.draw do |map|
        # this controller exists in the admin namespace as well which is the only difference from previous test
        map.top_level '/user/:id', :controller => 'user', :action => 'index'
        map.connect   ':controller/:action/:id'
      end
      @controller = Admin::InnerModuleController.new
      process :redirect_to_top_level_named_route
      # assert_redirected_to top_level_url('foo') would pass because of exact match early return
      assert_redirected_to top_level_path('foo')
    end
  end

  # -- standard request/response object testing --------------------------------

  # make sure that the template objects exist
  def test_template_objects_alive
    process :assign_this
    assert !@response.has_template_object?('hi')
    assert @response.has_template_object?('howdy')
  end

  # make sure we don't have template objects when we shouldn't
  def test_template_object_missing
    process :nothing
    assert_nil @response.template_objects['howdy']
  end

  # check the empty flashing
  def test_flash_me_naked
    process :flash_me_naked
    assert !@response.has_flash?
    assert !@response.has_flash_with_contents?
  end

  # check if we have flash objects
  def test_flash_haves
    process :flash_me
    assert @response.has_flash?
    assert @response.has_flash_with_contents?
    assert @response.has_flash_object?('hello')
  end

  # ensure we don't have flash objects
  def test_flash_have_nots
    process :nothing
    assert !@response.has_flash?
    assert !@response.has_flash_with_contents?
    assert_nil @response.flash['hello']
  end

  # check if we were rendered by a file-based template?
  def test_rendered_action
    process :nothing
    assert_nil @response.rendered[:template]

    process :hello_world
    assert @response.rendered[:template]
    assert 'hello_world', @response.rendered[:template].to_s
  end

  def test_assert_template_with_partial
    get :partial
    assert_template :partial => '_partial'
  end

  def test_assert_template_with_nil
    get :nothing
    assert_template nil
  end

  def test_assert_template_with_string
    get :hello_world
    assert_template 'hello_world'
  end

  def test_assert_template_with_symbol
    get :hello_world
    assert_template :hello_world
  end

  def test_assert_template_with_bad_argument
    assert_raise(ArgumentError) { assert_template 1 }
  end

  # check the redirection location
  def test_redirection_location
    process :redirect_internal
    assert_equal 'http://test.host/nothing', @response.redirect_url

    process :redirect_external
    assert_equal 'http://www.rubyonrails.org', @response.redirect_url
  end

  def test_no_redirect_url
    process :nothing
    assert_nil @response.redirect_url
  end

  # check server errors
  def test_server_error_response_code
    process :response500
    assert @response.server_error?

    process :response599
    assert @response.server_error?

    process :response404
    assert !@response.server_error?
  end

  # check a 404 response code
  def test_missing_response_code
    process :response404
    assert @response.missing?
  end

  # check client errors
  def test_client_error_response_code
    process :response404
    assert @response.client_error?
  end

  # check to see if our redirection matches a pattern
  def test_redirect_url_match
    process :redirect_external
    assert @response.redirect?
    assert @response.redirect_url_match?("rubyonrails")
    assert @response.redirect_url_match?(/rubyonrails/)
    assert !@response.redirect_url_match?("phpoffrails")
    assert !@response.redirect_url_match?(/perloffrails/)
  end

  # check for a redirection
  def test_redirection
    process :redirect_internal
    assert @response.redirect?

    process :redirect_external
    assert @response.redirect?

    process :nothing
    assert !@response.redirect?
  end

  # check a successful response code
  def test_successful_response_code
    process :nothing
    assert @response.success?
  end

  # a basic check to make sure we have a TestResponse object
  def test_has_response
    process :nothing
    assert_kind_of ActionController::TestResponse, @response
  end

  def test_render_based_on_parameters
    process :render_based_on_parameters, "name" => "David"
    assert_equal "Mr. David", @response.body
  end

  def test_assert_redirection_fails_with_incorrect_controller
    process :redirect_to_controller
    assert_raise(ActiveSupport::TestCase::Assertion) do
      assert_redirected_to :controller => "action_pack_assertions", :action => "flash_me"
    end
  end

  def test_assert_redirection_with_extra_controller_option
    get :redirect_to_action
    assert_redirected_to :controller => 'action_pack_assertions', :action => "flash_me", :id => 1, :params => { :panda => 'fun' }
  end

  def test_redirected_to_url_leading_slash
    process :redirect_to_path
    assert_redirected_to '/some/path'
  end

  def test_redirected_to_url_no_leadling_slash
    process :redirect_to_path
    assert_deprecated /leading/ do
      assert_redirected_to 'some/path'
    end
  end

  def test_redirected_to_url_full_url
    process :redirect_to_path
    assert_redirected_to 'http://test.host/some/path'
  end

  def test_assert_redirection_with_symbol
    process :redirect_to_controller_with_symbol
    assert_nothing_raised {
      assert_redirected_to :controller => "elsewhere", :action => "flash_me"
    }
    process :redirect_to_controller_with_symbol
    assert_nothing_raised {
      assert_redirected_to :controller => :elsewhere, :action => :flash_me
    }
  end

  def test_redirected_to_with_nested_controller
    @controller = Admin::InnerModuleController.new
    get :redirect_to_absolute_controller
    assert_redirected_to :controller => '/content'

    get :redirect_to_fellow_controller
    assert_redirected_to :controller => 'admin/user'
  end

  def test_assert_valid
    get :get_valid_record
    assert_deprecated { assert_valid assigns('record') }
  end

  def test_assert_valid_failing
    get :get_invalid_record

    begin
      assert_deprecated { assert_valid assigns('record') }
      assert false
    rescue ActiveSupport::TestCase::Assertion => e
    end
  end

  def test_assert_response_uses_exception_message
    @controller = AssertResponseWithUnexpectedErrorController.new
    get :index
    assert_response :success
    flunk 'Expected non-success response'
  rescue ActiveSupport::TestCase::Assertion => e
    assert e.message.include?('FAIL')
  end

  def test_assert_response_failure_response_with_no_exception
    @controller = AssertResponseWithUnexpectedErrorController.new
    get :show
    assert_response :success
    flunk 'Expected non-success response'
  rescue ActiveSupport::TestCase::Assertion
    # success
  rescue
    flunk "assert_response failed to handle failure response with missing, but optional, exception."
  end
end

class ActionPackHeaderTest < ActionController::TestCase
  tests ActionPackAssertionsController

  def test_rendering_xml_sets_content_type
    process :hello_xml_world
    assert_equal('application/xml; charset=utf-8', @response.headers['Content-Type'])
  end

  def test_rendering_xml_respects_content_type
    @response.headers['type'] = 'application/pdf'
    process :hello_xml_world
    assert_equal('application/pdf; charset=utf-8', @response.headers['Content-Type'])
  end

  def test_render_text_with_custom_content_type
    get :render_text_with_custom_content_type
    assert_equal 'application/rss+xml; charset=utf-8', @response.headers['Content-Type']
  end
end

redpajama_set_name: RedPajamaGithub


Int. Res J Pharm. App Sci.
normal and negative controls gave a significance value.
Keywords: Indonesian herbals, antidiabetic, blood sugar.
worldwide was estimated at 2.8% in 2000 and 4.4% in 2030.
of contracting diabetes than men 1, 2.
the drug use could be as self-selected3.
Indonesia has medicinal plants as potential anti-diabetic)4,5,6.
(Carica papaya L), sirih merah (Piper betle L. var.
Rubrum), keji beling (Strobilanthes crispus Bl.
polyphenols, tannins, saponins, and volatile oil7.
anthocyanins the pigment that has antioxidant activity8.
known to have anti-cancer properties 9.
arthritis, gout, fever medication, and tense nerves10.
3(1): 90-95 increased neural memory. black hair. namely ethanol (70% & 96%). cancer sores. namely stirred bar. and scales. cholesterol. Test group 3: Strawberry (Fragraria x ananassa Duch) + PGA 2% + glucose 2. diabetes mellitus. papaya leaves (Carica papaya L ).Int. roots. ISSN: 2277-4149 Rubrum). difficult defecation15. vacuum pumps. knives. Part used: Leaves. rheumatism. Diseases that can be treated diabetes mellitus. Besides the leaves. stimulate growth of nails. Comparison group: Mahkota Dewa (Phaleria macrocarpa) + PGA 2% + 2. namely: 1. abdominal pain during menstruation. macerator. Keji beling (Strobilanthes crispus Bl).8 mg/kgw/w. Plant part used is the skin of the fruit. piles (hemorrhoids). analytical scales. Treatable disease: kidney stones. Tools The tools used in the extraction process. treat leprosy. gray hair. saponins. This study aims to screen all ten plants traditionally known as antidiabetic drugs by the method of reduction of blood sugar in mice. hypertension. measuring cups.2 Methods The method used to obtain the extra plants by performing the extraction stage. syringes. weight 20-30 grams. Ahmad Muhtadi et al.8mg/kgw/w 9. glucose. excessive menstruation. Hiris (Cajanus cajan L. cough with phlegm.8 mg/kg w/w 4. soybean (Glycine max L. roots and papaya latex also contains papayotin. Rind used to treat dysentery. laxative fart. antispasmodic. var. Test group 4: Rambutan (Nephelium lappaceum L.) Merr. saponins and tannins. kautsyuk. Petai Cina (Leucaena leucocephala Benth). diabetes drugs. urinary tract disorders. 2013 2. cure wounds and ulcers.). diarrhea. 2013. saponins. experimental animals used were white mice (Mus muculus) male.) The name rambutan is derived from the Indonesian word rambutan. gotu kola also works to increase the repair and strengthening skin cells. 2. and polyphenols while stem contains flavonoids. vaporizer bowls. Seeds lamtoro efficacious as anthelmintic. 6. Seeds used to treat diabetes (diabetes mellitus)16. Res J Pharm. for extraction. Besides lamtoro also be used as a contraceptive in men13. liver (jaundice).  Extraction Simplicia Macerated by EtOH 70 % & 96% Liquid extract Evaporated Viscous extract   Test of blood sugar levels drop Research methods to test the activity of insulin sensitivity by dividing the mice into 13 groups with each group number as many as five animals. Millsp)14 leaves contain flavonoids. stopwatch. bark. meaning "hairy": diseases that can be treated: Rind efficacious as fever. abdominal disorder. Bark used to treat cancer sores. and stimulants. myosin. Materials & Methods 2. 8. kaca piring (Gardenia augusta (L. and roots. can hit the snake and the black ant. pipette drops. 7. 5. strawberry (Fragraria x ananassa Duch). worms. While its roots are widely used as a laxative menstruation. karpain. leucorrhoea. to test blood sugar levels decrease in the glucose meter and glucose test strips GlukoDr  Blood Test Meter. Test group 5: Petai Cina (Leucaena leucocephala Benth) + PGA 2 + glucose 2. ulcers. sprue. restrainer. glass beaker. Test group 6: Keji beling (Strobilanthes crispus Bl) + PGA + 2% glucose + 2. saponins.) Merr. Kaca Piring (Gardenia augusta L. Diseases that can be treated tumors.8 mg/kgw/w8. age 3-4 months.1 Materials The materials used are simplicia of hiris (Cajanus cajan (L) Millsp). antitumor.8 mg/kg w/w 3. seeds. acne. improve digestion. leaves contain alkaloid. Sirih merah (Piper betle L.8 mg/kg w/w Test group 2: Kaca piring (Gardenia augusta (L. Papaya (Carica papaya L. lamtoro (Leucaena glauca Benth). Gardenia augusta and Gardenia jasminoides of research experts substances known to have oil evaporated compounds. malaria. Rambutan (Nephelium lappaceum L.) originally from Central America. Petai china. eczema.8 mg/kg 91 .) + PGA 2% + glucose 2. and the PGA. Nutritious seeds lower blood sugar (hypoglycemic). Leaves are used to treat diarrhea. Curable Disease: Jaundice (jaundice). bruises. In addition. and seeds. Keji Beling (Strobilanthes crispus Bl) leaves contain alkaloids. App Sci. Merr). rambutan (Nephelium lappaceum L. Normal Control Group: PGA 2% 2. leaves. to test decrease blood sugar levels the distilled water. flavonoids and tannins. fever. hypertension.. malnutrition. flavonoids and polyphenols17. Roots used to treat fever. Pegagan (Centella asiatica (L) Urban).) + PGA 2% + glucose 2. karposit and vitamins4.). hair and connective tissue12. diarrhea. Negative (-) Control Group: PGA 2% + glucose 2. rotary evaporator.Merr ) is an annual herbaceous tribe of coffee-copy or Rubiaceae. cuts.8 mg/kg w/w Test group 1: Hiris (Cajanus cajan (L) Millsp + PGA 2% + glucose 2. fever. protein. cough. dysentery.
Graph of the average blood glucose levels of mice on the impairment testing of blood sugar levels can be seen in Figure 1.8 mg/kg w/w ISSN: 2277-4149 Pegagan (Centella asiatica (L ) Urban).36 33. 3(1): 90-95 10. Rubrum) and papaya addressing significant results against a Normal control and Rambutan (Nephelium lappaceum) seeds. Pegagan (Centella asiatica (L) Urban). cajans (b).33 16. besides the soybean group. From below figures (see Fig. 30.76 21. x ananassa (d).33 16. Res J Pharm. 2013 How to calculate of blood sugar levels that make use of glucose tolerance is a pretty prevalent used today.2 47.) group. 60. The end mice cut. Simplisia a Weight (g) b c d e f g h i j 23. rubrum) + PGA 2% glucose + glucose 2.05. rubrum). The test group 10: Sirih merah (Piper betle L. seed Rambutan (Nephelium lappaceum).95 27. Ahmad Muhtadi et al. var. 12. augusta (c). Papaya Leaf (Carica papaya L).49 63. fruit Petai China (Leucaena leucocephala). then the blood dripped to the end of the strip and after 20 seconds the blood glucose level will appear on the monitor glucose meter. Soy bean (Glycine maxmenr). C. C. Newman-Keuls test performed to determine the decrease in blood sugar levels of the test plants in mice given the highest impact on blood sugar levels drop. To prove that the blood sugar levels will decline after addition of the 10 extracts.52 23.24 Rendemen (%) 23. L.95 27. Sirih merah (Piper betle L.8 mg/kg w/w Table 1.49 63.95 23. Test group 7: Soybean (Glycine max L. while the Kaca piring (Gardenia augusta (L. it can be seen significant results in the Hiris (Cajanus cajan (L) Millsp group againts the negative (-) control . blood sampling performed on all mice before administration of glucose and insulin (t = 0).8 mg/kg w/w Given the same treatment for all of these groups. kaca piring plates (Gardenia augusta). To Fig. From the observations decrease blood sugar levels in the blood of mice.05. crispus Blood glucose measurements performed using a glucose meter and glucose test strips. S.Int. 90 and 120) after being given glucose 14 mg / kg w/w. F. G. App Sci. P. G.36 33. Keji beling (Strobilanthes crispus Bl) of 100 g macerated with ethanol 70% and fruits Strawberry (Fragraria x ananassa) of 100 g macerated with 96% ethanol with stirring a few times that aims to allow the flow of fresh solvent repeatedly came across the surface simplicia. Test group 9: Papaya leaves (Carica papaya L) + PGA 2% + glucose 2. and Newman-Keuls test. 2. Rambutan (Nephelium lappaceum) seed. mar (h).95 23. we should know the difference of the blood sugar levels decrease between the treatment group and the control and the comparison groups. Another common way is to use alloxan induction. The test is performed when the ANOVA test results obtained from the data are significantly different or significantly. Sirih Merah (Piper betle L. N. Results and Discussion Simplicia Hiris deciduous plants (Cajanus cajan (L) Millsp). asiatica (g). For testing glucose levels elapsed areas typically use fasting blood sugar 2 hours.76 21. var. Mahkota Dewa (Phaleria macrocarpa).24 Note: (a). leucocephala (f). Petai Cina (Leucaena leucocephala) and negative (-) control yielded significant results only for the N (normal) control group. Analysis was conducted Variants (ANOVA) Statistical analysis using Student's t test on a real level of 0. 2013.. betle (j). Average blood glucose levels were analyzed statistically using Student's t to see the difference in blood sugar levels decrease compared with the comparator plant Phaleria macrocarpa. control (N) and Petai Cina (Leucaena leucocephala).20 18. Extraction rendemen results 13. Keji beling (Strobilanthes crispus Bl. var. 3. Test group 8: Pegagan (Centella asiatica (L) Urban) + PGA 2% + glucose 2. 92 .20 18. C. Merr) + PGA 2% + glucose 2.8 mg/kg w/w 11. obtained data on the number average reduction in blood sugar levels for 2 hours. lappaceum (e).) Merr. papaya (i). and every 30 minutes to 120 minutes (minutes 0. 5) along with calculation of Student's t test with a real level of 0.2 47.52 23. Fasted 2 hours.
App Sci. 2 The average percentage reduction in blood glucose levels (%) of mice in the 30th minutes 40 35 30 25 20 15 10 5 0 mahkota dewa pegagan Kacapiring Kejibeling Papaya Kedelai Lamtoro 60 Minute Rambutan Hiris Fig 3: The average percentage reduction in blood glucose levels (%) of mice in the 60th minutes Ahmad Muhtadi et al. Res J Pharm.. 2013.Int. 2013 93 . 3(1): 90-95 ISSN: 2277-4149 Average blood glucose level (%) 350 K(N) 300 K(-) 250 Mahkota dewa 200 Pegagan Kacapiring 150 Kejibeling 100 Papaya 50 Kedelai Lamtoro 0 0 30 60 90 120 Rambutan Hiris Minute Avberage percentage reduction in blood glucose level (%) Fig.1 The average blood glucose levels (%) of mice on activity assays medicinal plant extracts 50 mahkota dewa 40 pegagan 30 Kacapiring 20 Kejibeling 10 Papaya 0 Kedelai 30 Minute Lamtoro Rambutan Average percentage reduction in blood glucose level (%) Fig.
27(5): 1047–1053. Tanaman berguna Indonesia III. This research suggests finding out further elucidated compounds from the above plants which responsible in lowering blood sugar levels to diabetes mellitus. King H. Wild S. Trubus Agriwijaya : Jakarta. can even decrease over Mahkota Dewa (Phaleria macrocarpa) and the smallest found in strawberry plants and comparisons between positive and normal controls provide significant comparisons. Res J Pharm. Atlas Tumbuhan Obat Indonesia Jilid 3. In Phenolic Compounds in Food and Their Effects on Health I. 11(1): 2. Heyne K. Mustarichie R. 1999. Purwanti S. Dalimanta S. 2003. Tyler VE. 5. Supriyatna Muhtadi A. Sicree R. 3(1): 305-309. Atlas Tumbuhan Obat Indonesia Jilid 1. Phytomedicines: Back to the Future. ACS Symposium Series. 9. 2004. 2. 2013 8. Ho. 1987. Moektiwardoyo M. The Research Evidence of Antioxidant and Anti-Cancer Activity of Genistein Content In The Indonesian Traditional Food 94 . Green A. 2003. Tropical Journal of Pharmaceutical Research. REFERENCE 1. Ahmad Muhtadi et al. Jurnal Alta Agrosia Ilmu Pertanian. Journal of Natural Product. Roglic G. Leaf Extract on Experimental Diabetes in Rats. 7. Trubus Agriwijaya : Jakarta. App Sci..Average percentage reduction in blood glucose level (%) Int. Kajian Suhu Ruang Simpan Terhadap Kualitas Benih Kedelai Hitam dan Kedelai Kuning. 3(1): 90-95 ISSN: 2277-4149 50 mahkota dewa 40 pegagan 30 Kacapiring 20 Kejibeling 10 Papaya 0 Kedelai Lamtoro 90 Rambutan Hiris Minute Avergae percentage reductionrah in blood glucose level (%) Fig 4: The average percentage reduction in blood glucose levels (%) of mice in the 90th minutes 60 mahkota dewa 50 pegagan 40 Kacapiring 30 Kejibeling 20 Papaya 10 Kedelai Lamtoro 0 Rambutan 120 Hiris Sirih merah Minute Fig 5: The average percentage reduction in blood glucose levels (%) of mice in the 120th minutes CONCLUSION It can be concluded that the test on the test plant extracts the largest decline in levels occurred at minute 120. Global Prevalence of Diabetes Estimates for the year 2000 and projections for 2030. Balai Penelitian dan Pengembangan Kehutanan Departemen Kehutanan RI : Jakarta. 2013. Nalamolu RK. Levita J. Effect of Chronic Administration of Boerhaavia diffusa Linn. American Chemical Society: Washington. 1992. Greatest percentage decline occurred in Pegagan (Centella asiatica (L) Urban). Diabetes Care. Dalimanta S. Subarnas A and Udin LZ. 62: 1589-1592. 6.1992. C(Ed). 3. Boini KM and Nammi S. 2004. DC. 4.
) dengan berbagai pelarut. Ngawi (Indonesia). App Sci. Handbook of legumes of world economic importance. 13. Int.htm . 1998. 2013 ISSN: 2277-4149 95 . Simon (Eds. Res J Pharm. Oryx Press. Journal of clinical psychopharmacology . Dan Soenardi. J. 3. 145-173.Int. 2013. Zulhipri Kartika IR and Sumaji I. Dela SY. 14. 1999. 10. 15.E. Kartnig T. 20(6): 680–684. 11. 12. 2. Ebers Papyrus. 1995. Saroso B.E. Arizona. App Sci.com /strawberry. 2011 Ahmad Muhtadi et al.com/harian/0711/12/ragam03 . 1999. Lamtoro (Leucaena glauca) used for traditional in Ngrambe. 2012. Res J Pharm. Yogyakarta (Indonesia). http://www. USA. 3(1): 90-95 (Oncom) Ethanol Extract. 2012. Bradwejn J. New York). 2(5): 65-73. "A doubleblind.suaramerdeka. Uji fitokimia dan aktivitas antidiabetes ekstrak biji rambutan (Nephelium lappaceum L.. Zhou Y. Available at http://www. Herbs. D. Kacapiring.controlled study on the effects of Gotu Kola (Centella asiatica) on acoustic startle response in healthy subjects". Koszycki. Cracker. 16. L. Spices and Medicinal Plants. Seminar dan Lokakarya Nasional Etnobotani II. 33–37. placebo. vol. Duke JA. pp. Wangi dan Berkhasiat.botanical-online. 24-25.). Shlik J. Plenum Press.
Res J Pharm. 3(1): 90-95 ISSN: 2277-4149 96 ..Int. 2013. App Sci.


text:
Litigation, Licensing and Employment - Assistant Team Leader
Employer: Buckinghamshire Council
Reference: Buc03836
Published: Mon 20/12/2021, 9:31 AM
Closing on: Fri 18/02/2022, 9:31 AM
Location: Bucks, Countywide
Are you committed to making a difference? Do you want the work to do to have a real impact for the local community? Are you looking for an opportunity to develop your career to undertake varied and complex case work?
Buckinghamshire Council is a new, ambitious Unitary Authority committed to establishing one of the best councils in the Country, creating positive change for local people, communities and business. The recently redesigned in-house legal service is expanding to support the varied work of this diverse Authority and to provide a wider range of in-house specialism.
We are recruiting an Assistant Team Leader for our Litigation, Licensing and Employment team. The role will support the Team Leader in managing the civil litigation and employment specialisms. We are seeking an exceptional lawyer who enjoys working collaboratively to offer proactive, innovative and customer-focussed advice. Working closely with client departments to deliver the Council's statutory functions, legal services is at the heart of the organisation giving lawyers a real opportunity to shape services and to support multi-disciplined, high-profile projects.
We offer a fast-paced and extremely rewarding career in a supportive environment. This is an exciting time to join us, as we continue to grow and develop our service. Career development is something we are very passionate about; we are committed to building an exceptional in-house Legal Service, utilising our colleague's talent and making the most of what they have to offer.
We welcome applications from Solicitors, Barristers and Legal Executives. As a part of the litigation, licensing and employment team you will be flexible and prepared to take on challenging and varied legal work, sometimes within tight timescales.
The work of the team is wide ranging from employment matters and judicial review to personal injury, possession proceedings and complex construction disputes. The role includes representing the Council in courts, inquiries and tribunals. The Assistant Team Leader acts as a senior liaison point for the clients and assists the Team Leader to ensure the team operates effectively and efficiently, maintaining the highest standards of client care. Experience of managing would be advantageous but not essential.
Naturally, you'll be highly motivated and proactive. Whether you are a senior lawyer looking to take that first step into management or an experienced manager with significant experience built from a career in the public or private sector, we are interested to hear from you.
Lessons learned from our response to Covid-19 have shaped the way we want to work in future. Online meetings via Microsoft Teams, and vlogs from our Senior Leadership Team have all played their part in allowing us to come together and work in ways which are even more flexible. We've adopted a new hybrid way of working, encouraging our colleagues to take control of their own work life balance. There will be times where you'll need to be in one of our offices, attend external meetings or hearings in Buckinghamshire and further afield.
If that's not enough reason to join us, you will be entitled to a range of benefits from Buckinghamshire Council including a very competitive employer pension contribution, generous annual leave allowance and discounts in a range of services and restaurants.
Take a look at our dedicated career social media pages @bucks_careers for exclusive content from our Legal Team, and to find out more about life at Buckinghamshire Council.
For an informal chat about this role in more detail, contact Angela Mills, Team Leader on 01494 421376.
We reserve the right to close the vacancy once we have received sufficient applications, so please be advised to submit your application as early as possible.
Our values and culture
We have a set of values, which our employees have chosen, that represent what we are - Proud, Ambitious, Collaborative and Trustworthy.
By joining Buckinghamshire Council, you can expect:
a fair and inclusive culture
the chance to really make a difference to those around you
health and well-being initiatives including an Employee Assistance Programme, Mental Health First Aiders and mindfulness workshops
a unified voice through our Employee Representative Group
ongoing support, and the opportunity to develop and progress in your career with us
opportunities to take part in fun activities such as fundraising and social events
At Buckinghamshire Council, we know that our biggest strength comes from the people that work for us, and that's why we're working hard to ensure we continue to be an accessible and inclusive organisation.
From dedicated staff networks overseen by our Equality, Diversity and Inclusion Steering Group, to proudly standing as a Disability Confident employer, it's important to us that all our colleagues feel engaged, listened to, and valued. Our offer of flexible working empowers a productive and happy workforce and allows employees to combine work with other responsibilities and commitments.
We believe our workforce should reflect the diverse communities we service in Buckinghamshire, and are looking for like-minded individuals to join us in promoting equality, fairness, and inclusion for everyone.
Keywords: Litigation Licensing and Employment Assistant Team Leader
Job Types: Legal
Location: Bucks


Framed 3D-fluorescent painting on aluminum by Massimo Meda. This painting inch 59x39.5 (66x46.5 with frame) is original and signed on the back by the artist. The frame is made of plaster on wood, and was designed by the artist. However, the painting can be purchased also without the frame. In this case, it would measure 150 x 100 cm and cost US$18,000. Massimo Meda is an Italian painter and pianist, and he is considered the founder and master of Tridimensionalismo. He paints in layers of acrylic and fluorescent paint, and his paintings glow in the dark when exposed to the blacklight. Shipping worldwide.


Sea Level Anomalies reveal Ierapetra gyre in the Mediterranean Sea.
Ocean currents are sometimes compared to 'sea highways', because ships follow their flow to gain speed. But this picture is not wholly accurate. In fact, ocean currents are more like secondary roads branching off into narrow country roads and lanes, winding their way around hills and natural obstacles. The main flow of these currents is often disturbed by eddies that form at their edge. So the ocean is really more like a vast, slowly swirling whirlpool bath than a swimming pool divided into perfectly straight lanes.
The mesoscale circulation is defined like a class of energetic phenomena of spatial scales ranging from about ten to several hundred kilometers and time scales ranging from a few days to several months. Its forcing mechanisms are mainly instabilities from the large-scale circulation and interactions between currents and bathymetry and the direct forcing by the wind.
Altimetry enables to observe such phenomena by measuring hills and valleys around which currents swirling. A best resolution is obtained with several satellites to study and understand eddies, with sizes ranging from 100 to 300 km (when the ground track separation at equator is about 315 km for Jason). The existence of at least two satellites operating simultaneously is therefore necessary for this type of research. For operational applications, three, or even better, four operational satellites at the same time are required.
Brief description of mesoscale processes observed by altimetry and review of the various scientific applications. Mesoscale products and tools developped at the CTOH.
Analysis of Sea Level Anomalies from merged satellite data, for more than ten years, reveals the areas of high eddy activity. Warm and cold eddies.
The combination between Altimetry, and other sensor's data, or between more than one altimetric satellite's data is a powerful tool to analyse ocean circulation and its variability.
Some examples of eddies around the world : Tehuantepec eddies, Agulhas rings, Ierapetra gyre, Alboran eddies.
Some eddies as seen by altimetry on Google Earth (Download the kml file and open it in Google Earth).
November 2003 :Different points of view.
July 2003 :North Atlantic eddies.
March 2007 :Cool Australian eddies.
August 2007 :The Alboran eddies.
Radar Altimetry Tutorial, data use case : Ocean eddies as seen by satellite altimetry : the Kuroshio current.
Eddies around the world .


Does owning a supercar make any sense in the modern world? No. Is it efficient in any way, or is it a sound investment? Unlikely. Hell, you can't even drive most supercars in civilized nations in anything above third gear or you're liable to get pulled over. Oh, and you will get pulled over -- going 55 in a 54, as Jay-Z would lament. But part of the attraction of desire is not the allure of the unattainable, but rather the allure of the utterly irrational. It's not just that these supercars are beyond our scope of attainability, but that they make no goddamn sense in the real world. And we want them all the more for it.
There are now nearly a dozen supercars with horsepower that have eclipsed the absurd millennium mark, with no end to the buildup in sight. Keep in mind landmark '80s supercars like the Ferrari Testarossa only had 390 horsepower, the Lamborghini Countach 375. We're now engaged in a cold-war race for power in a world without space to exercise it; we're building bombs for enemies that don't exist. I mean, where can you honestly, legally enjoy the benefits of one of these machines? The answer is you can't. Legally. But, really, who the hell cares? You won't, I offer, if you ever find yourself settling into the tightly bolstered seats of a McLaren (or Ferrari or Porsche or Lambo or Zenvo) and hear that euphonic engine spring to life in a chorus of fire and exploding pistons. The sanity of your decision will be the last thing on your mind. Instead you will only smile stupidly and think of the potential rumbling before you. Supercars are clearly not the tangible goals of men, but are rather the fever dreams of princes. We can all agree on that. And, hey, who doesn't want to be a prince for a day?