How to make your own "Stimpmeter"

A "Stimpmeter" is a device used to measure the speed of a golf course putting green. It consists of a metal or plastic frame with a notch at one end and a graduated scale along its length. Here's how you can make a basic Stimpmeter:

Materials Needed:

  • A sturdy piece of metal or plastic (e.g., aluminum, PVC)
  • A ruler or tape measure
  • A protractor or angle measuring tool
  • A saw (if cutting the material to size)
  • Sandpaper (if needed to smooth edges)

Instructions:

  1. Select a Material: Choose a sturdy material such as aluminum or PVC. Aluminum is commonly used due to its durability and ease of cutting.
  2. Determine Dimensions: A standard Stimpmeter is typically about 36 inches (91 cm) in length and 2.75 inches (7 cm) in width. However, you can adjust the dimensions based on your preference.
  3. Cut the Material: If necessary, use a saw to cut the material to the desired length and width. Make sure to wear appropriate safety gear when cutting.
  4. Smooth Edges: Use sandpaper to smooth any rough edges on the Stimpmeter to prevent injury during use.
  5. Mark the Graduated Scale: Along one edge of the Stimpmeter, use a ruler or tape measure to mark evenly spaced increments. These increments represent the distance rolled by a golf ball when released from the notch at the end of the Stimpmeter. A typical scale ranges from 0 to 10 feet (0 to 3 meters).
  6. Add a Notch: At one end of the Stimpmeter, create a small notch or groove. This is where you'll place the golf ball before releasing it to measure the green's speed.
  7. Optional: Angle Measurement: Some Stimpmeters include an angled section to help with consistency in releasing the golf ball. If desired, use a protractor or angle measuring tool to create a slight angle near the notch.
  8. Test and Calibrate: To use the Stimpmeter, place a golf ball in the notch, lift the other end of the device to a 20 to 30-degree angle, and then release the ball. Measure the distance the ball rolls along the green's surface. Adjust the green's maintenance practices accordingly to achieve desired green speed.

By following these steps, you can create a basic Stimpmeter for measuring the speed of a golf course putting green.

Stimpmeter


I did my research because I , Mark Errington, applied for a part time job in Feb 2024 for a Greenskeeper with Oswego Lake Country Club in Lake Oswego, Oregon.  I was interviewed by Nolan Wenker, CGCS, Green Superintendent. I did not get the job.

Golf Course Greenskeeper Duties from Beginner Level to Expert Level

The duties of a golf course greenskeeper can vary depending on the specific needs of the course and the level of experience of the greenkeeper. Here's a breakdown of typical duties from beginner to advanced levels:

Golf Course Greenskeeper Duties

Beginner Level:

  • Mowing fairways, tees, and rough using ride-on or push mowers.
  • Raking bunkers (sand traps) to ensure they are smooth and even.
  • Watering plants and turf as directed by senior staff.
  • Assisting with basic landscaping tasks such as planting flowers or shrubs.
  • Learning to operate and maintain basic equipment such as mowers, trimmers, and irrigation systems.
  • Observing and learning about turfgrass management practices.

Intermediate Level:

  • Operating and maintaining more specialized equipment such as aerators and top dressers.
  • Performing routine maintenance tasks on greens, including mowing, aerating, topdressing, and fertilizing.
  • Learning to diagnose and treat common turf diseases and pests.
  • Assisting with irrigation system maintenance and repair.
  • Participating in course renovation projects under supervision.
  • Beginning to take on more responsibility for specific areas of the course, such as a set of greens or fairways.

Advanced Level:

  • Leading small teams of greenkeepers and assigning tasks.
  • Developing and implementing turf management plans to optimize playing conditions.
  • Troubleshooting and repairing equipment breakdowns.
  • Training and mentoring junior staff.
  • Assisting with budgeting and procurement of supplies and equipment.
  • Participating in continuing education and professional development opportunities to stay current on industry best practices.
  • Collaborating with golf course management to plan and execute long-term course improvements and renovations.
  • Specializing in a particular aspect of course maintenance, such as greenskeeping or irrigation management.

Expert Level:

  • Overseeing all aspects of course maintenance and operations.
  • Developing and implementing sustainable and environmentally friendly maintenance practices.
  • Managing budgets, staffing, and scheduling for the entire course maintenance department.
  • Serving as a liaison between course management and outside contractors, consultants, and regulatory agencies.
  • Representing the course in professional organizations and industry events.
  • Continuously seeking ways to improve course conditions and enhance the overall player experience.
  • Providing leadership and guidance to the entire course maintenance team, setting high standards for performance and professionalism.

As a greenkeeper progresses through these levels, they gain knowledge, skills, and experience that enable them to take on more responsibility and contribute to the overall success of the golf course. Continuing education and a commitment to excellence are key factors in advancing in this field.


 

I did my research because I , Mark Errington, applied for a part time job in Feb 2024 for a Greenskeeper with Oswego Lake Country Club in Lake Oswego, Oregon.  I was interviewed by Nolan Wenker, CGCS, Green Superintendent. I did not get the job.

disable text selection, copying, and certain keyboard shortcuts in web pages

It seems like the script you provided is intended to disable text selection, copying, and certain keyboard shortcuts in web pages. However, there are a few issues in the script that need to be addressed to make it work properly. Let's go through them:

Undefined Variables: There are several variables like alertMsg_IMG and show_wpcp_message that are used in the script but not defined. You need to define them or remove the references to these variables.

Compatibility: Some parts of the script use older methods that might not work in modern browsers. For example, window.event is not supported in Firefox. You should use the e parameter instead, which is passed to the event handler functions.

Event Listeners: The script is setting event listeners directly on elements, which may not be the best practice. It's better to use event delegation or attach event listeners dynamically to specific elements.

Syntax Errors: There are a few syntax errors in the script, such as missing semicolons and incorrect function names (wccp_pro_is_passive vs wccp_free_iscontenteditable).

CSS Selectors: The CSS selectors used in the script might not cover all cases where text selection needs to be disabled. You may need to adjust the CSS selectors to target specific elements more accurately.

Here's a revised version of the script addressing the above issues:

<script type="text/javascript">
var smessage = "Content is protected !!";

function disableEnterKey(e) {
    var elemtype = e.target.tagName.toUpperCase();

    if (elemtype === "TEXT" || elemtype === "TEXTAREA" || elemtype === "INPUT" || elemtype === "PASSWORD" || elemtype === "SELECT" || elemtype === "OPTION" || elemtype === "EMBED") {
        elemtype = 'TEXT';
    }

    if (e.ctrlKey) {
        var key = e.which || window.event.keyCode;
        if (elemtype !== 'TEXT' && (key === 97 || key === 65 || key === 67 || key === 99 || key === 88 || key === 120 || key === 26 || key === 85 || key === 86 || key === 83 || key === 43 || key === 73)) {
            if (wccp_free_iscontenteditable(e)) return true;
            alert('You are not allowed to copy content or view source');
            return false;
        } else {
            return true;
        }
    }
}

function wccp_free_iscontenteditable(e) {
    var target = e.target || e.srcElement;
    var elemtype = target.nodeName.toUpperCase();
    var iscontenteditable = target.getAttribute("contenteditable");

    if (iscontenteditable === "true") {
        if (target.style) target.style.cursor = "text";
        return true;
    }

    return false;
}

function disable_copy(e) {
    var elemtype = e.target.tagName.toUpperCase();

    if (elemtype === "TEXT" || elemtype === "TEXTAREA" || elemtype === "INPUT" || elemtype === "PASSWORD" || elemtype === "SELECT" || elemtype === "OPTION" || elemtype === "EMBED") {
        elemtype = 'TEXT';
    }

    if (wccp_free_iscontenteditable(e)) return true;

    var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);

    if (elemtype === "IMG" && e.detail >= 2) {
        alert('Image copying disabled');
        return false;
    }

    if (elemtype !== "TEXT") {
        if (smessage !== "" && e.detail === 2) alert(smessage);
        if (isSafari) return true;
        else return false;
    }
}

function disable_copy_ie() {
    var elemtype = window.event.srcElement.nodeName.toUpperCase();
    if (wccp_free_iscontenteditable(e)) return true;
    if (elemtype === "IMG") {
        alert('Image copying disabled');
        return false;
    }
    if (elemtype !== "TEXT" && elemtype !== "TEXTAREA" && elemtype !== "INPUT" && elemtype !== "PASSWORD" && elemtype !== "SELECT" && elemtype !== "OPTION" && elemtype !== "EMBED") {
        return false;
    }
}

function reEnable() {
    return true;
}

document.onkeydown = disableEnterKey;
document.onselectstart = disable_copy_ie;

if (navigator.userAgent.indexOf('MSIE') === -1) {
    document.onmousedown = disable_copy;
    document.onclick = reEnable;
}

function disableSelection(target) {
    if (typeof target.onselectstart !== "undefined") {
        target.onselectstart = disable_copy_ie;
    } else if (typeof target.style.MozUserSelect !== "undefined") {
        target.style.MozUserSelect = "none";
    } else {
        target.onmousedown = function() { return false; };
    }
    target.style.cursor = "default";
}

window.onload = function() {
    disableSelection(document.body);
};

document.ondragstart = function() { return false; };

function nocontext(e) {
    return false;
}

document.oncontextmenu = nocontext;
</script>

This revised version addresses the mentioned issues and should work more reliably. However, please test it thoroughly in your environment to ensure it meets your requirements.

php code for "sunrise" and "sunset"

If you are using the date_sunrise and date_sunset functions in PHP, you can specify the zenith angle to get sunrise and sunset times. The zenith angle represents the angle between the sun and a line perpendicular to the Earth's surface. The values you mentioned, date.sunrise_zenith and date.sunset_zenith, are not directly available in PHP, but you can achieve similar results by specifying the zenith angle in the date_sunrise and date_sunset functions.

Here's an example using these functions with a custom zenith angle:

<?php

// Replace these values with the latitude and longitude of your desired location
$latitude = 37.7749;
$longitude = -122.4194;

// Specify the custom zenith angle for sunrise and sunset
$zenith = 90.83; // Civil twilight

// Get sunrise and sunset times as timestamps
$sunriseTimestamp = date_sunrise(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90.5, $zenith);
$sunsetTimestamp = date_sunset(time(), SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90.5, $zenith);

// Set your desired timezone
$timezone = new DateTimeZone('America/New_York'); // Replace with your timezone

// Create DateTime objects with the specified timezone
$sunriseDateTime = new DateTime("@$sunriseTimestamp");
$sunriseDateTime->setTimezone($timezone);

$sunsetDateTime = new DateTime("@$sunsetTimestamp");
$sunsetDateTime->setTimezone($timezone);

// Format times in AM/PM format
$sunriseFormatted = $sunriseDateTime->format('h:i A');
$sunsetFormatted = $sunsetDateTime->format('h:i A');

// Output the times
echo "Sunrise: $sunriseFormatted" . PHP_EOL;
echo "Sunset: $sunsetFormatted" . PHP_EOL;
?>

Make sure to replace 'America/New_York' with your actual timezone. This should provide you with accurate sunrise and sunset times in your local time.

In this example, the $zenith variable is set to 90.83, which corresponds to the civil twilight. You can adjust this value to get sunrise and sunset times based on different twilight phases or other zenith angles.

In this example, the format('h:i A') method is used to format the times in the desired format with AM/PM indication. Adjust the format string as needed for your specific requirements.

Keep in mind that the date_sunrise and date_sunset functions use the system's timezone settings, so make sure your server's timezone is correctly configured. Additionally, these functions may not be available if the "date" extension is not enabled in your PHP configuration.

- All From ChatGPT
PLG_GSPEECH_SPEECH_BLOCK_TITLE