Profile

Thomas O'Keefe

3537 NE 87th St.

Seattle, WA 98115

Phone: 425-417-9012
user contact photo
Tom first got his start paddling and playing in the water during early childhood canoe trips to the Adirondacks in upstate New York. After a brief diversion as a competitive swimmer and water polo player through high school and college, Tom came back to paddling and began his first serious whitewater while living in Japan and shortly thereafter became a full-fledged fanatic with the University of Wisconsin Hoofers. Tom has traveled across the country and around the globe in search of great rivers and most recently completed a final descent of the Yangtze River through the Three Gorges, before the gates were closed on the world's largest dam. Tom has been a volunteer with American Whitewater for more than a decade and a Regional Coordinator in the Pacific Northwest for the past several years. Tom received his undergraduate degree at Cornell University before completing his graduate work in aquatic ecology at the University of Wisconsin where he received his PhD. In recent years Tom has worked at the University of Washington where his research projects have focused on the dynamics of nutrients returning salmon bring to river ecosystems and the structural development of riparian forests along large floodplain rivers. Tom has experience working with resource agencies including the National Park Service and Forest Service as many of his research projects have been conducted on public land. Tom has also taught courses in aquatic ecology, including watershed ecology and management, both at the university level and for youth programs. Bringing a wealth of experience to the organization, Tom contributes skills in river and fisheries ecology, teaching and outreach, grant writing, multimedia, web development, and inspiring local volunteers to help build American Whitewater's stewardship program. He is based in Seattle, WA and works closely with volunteers throughout the Pacific Northwest region on projects in Coastal WA/OR, the Columbia River watershed, Puget Sound, Fraser River watershed, coastal BC, and Alaska. In addition Tom covers project work in the Upper Midwest. And when the water's up, Tom still finds time to play on the water.


Photos

You are not permitted to complete this task. If you should be able to do this, please contact webmaster@americanwhitewater.org and tell them you need (PhotoGadget/do-search).

Join AW and support river stewardship nationwide!
7.4.3PHP Version793msRequest Duration7MBMemory UsageGET content/{url}Route
    • Booting (39.23ms)
    • Application (754ms)
    • 1 x Application (95.05%)
      754ms
      1 x Booting (4.95%)
      39.23ms
      17 templates were rendered
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • legacy.views.container-view (resources/views/legacy/views/container-view.blade.php)6blade
        Params
        0
        components
        1
        controls
        2
        id
        3
        class
        4
        title
        5
        formRenderService
      • app::layout.gadget (resources/views/layout/gadget.blade.php)2blade
        Params
        0
        contents
        1
        formRenderService
      • layout.columnstyle.one (resources/views/layout/columnstyle/one.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.columnstyle.componentstack (resources/views/layout/columnstyle/componentstack.blade.php)9blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        stack
        8
        component
      • components.reports.list (resources/views/components/reports/list.blade.php)4blade
        Params
        0
        reach
        1
        shouldIncludeHeader
        2
        title
        3
        formRenderService
      • layout.main (resources/views/layout/main.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout._headers (resources/views/layout/_headers.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.header (resources/views/layout/header.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout._scripts (resources/views/layout/_scripts.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      • layout.navigation (resources/views/layout/navigation.blade.php)8blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
      • includes.alert.membership (resources/views/includes/alert/membership.blade.php)17blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
        8
        searchurl
        9
        loginurl
        10
        logouturl
        11
        __currentLoopData
        12
        child
        13
        loop
        14
        otherchild
        15
        shouldNotifyUser
        16
        user
      • navigation.menu.static (resources/views/navigation/menu/static.blade.php)15blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
        8
        searchurl
        9
        loginurl
        10
        logouturl
        11
        __currentLoopData
        12
        child
        13
        loop
        14
        otherchild
      • includes.footer (resources/views/includes/footer.blade.php)8blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
        7
        menu
      • layout.pagemap (resources/views/layout/pagemap.blade.php)7blade
        Params
        0
        obLevel
        1
        __env
        2
        app
        3
        errors
        4
        contents
        5
        formRenderService
        6
        layout
      uri
      GET content/{url}
      middleware
      web
      controller
      App\Http\Controllers\Wh2oController@content
      namespace
      App\Http\Controllers
      where
      as
      generated::7S3RnBZOjVwYvccb
      file
      app/Http/Controllers/Wh2oController.php:34-68
      11 statements were executed, 6 of which were duplicated, 5 unique82.71ms
      • select * from security where domain in ('ContactGadget') and area is null;
        502μs/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476legacy db
        Metadata
        Backtrace
        • 4. /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476
        • 6. /app/Legacy/Repositories/InfoADO.php:368
        • 7. /app/Legacy/Repositories/InfoADO.php:391
        • 8. /app/Legacy/Repositories/SecurityInfo.php:188
        • 9. /app/Legacy/Security/BaseSecurity.php:143
      • select * from "contacts" where "contacts"."id" = '580' limit 1
        7.63ms/app/Legacy/Repositories/UserInfo.php:865wh2o
        Metadata
        Bindings
        • 0. 580
        Backtrace
        • 19. /app/Legacy/Repositories/UserInfo.php:865
        • 20. /code/wh2o/ContactGadget.inc:206
        • 21. /code/wh2o/ContactGadget.inc:151
        • 22. /code/wh2o/Page1.inc:930
        • 23. /code/wh2o/Page1.inc:1019
      • select * from security where domain in ('ReportGadget') and area is null;
        195μs/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476legacy db
        Metadata
        Backtrace
        • 4. /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476
        • 6. /app/Legacy/Repositories/InfoADO.php:368
        • 7. /app/Legacy/Repositories/InfoADO.php:391
        • 8. /app/Legacy/Repositories/SecurityInfo.php:188
        • 9. /app/Legacy/Security/BaseSecurity.php:143
      • select r.river || ', ' || r.section as reachname, j.id as post_id, reach_id, photo_date, "level", j.detail, uid, observation, title, post_date, reading, gauge_id, metric_id, extract('epoch' from now()-post_date) as updated,count(jp.id) as num_photos from posts j left join posts_photos jp on j.id = jp.post_id left join reaches r on j.reach_id = r.id and r.is_final = true where uid = 580 -- key sql and post_date is not null and post_date < now() and j.deleted_at is null and j.is_final=true and jp.is_final = true and (jp.deleted_at is null ) group by r.river, r.section, j.id, reach_id, photo_date, "level", j.detail, uid, observation, title, post_date, reading, gauge_id, metric_id ,extract('epoch' from now()-post_date) order by post_date desc,j.id desc limit 20 offset 0
        61.83ms/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476legacy db
        Metadata
        Backtrace
        • 4. /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:476
        • 6. /app/Legacy/Repositories/InfoADO.php:368
        • 7. /app/Legacy/Repositories/InfoADO.php:391
        • 8. /app/Legacy/Repositories/PhotoInfo.php:303
        • 9. /code/wh2o/ReportGadget.inc:265
      • select * from "articles" where ("id" = '-SecurityGadget-explain' or "short_name" = '-SecurityGadget-explain') and "articles"."deleted_at" is null and "articles"."is_final" = 'true' limit 1
        880μs/app/Legacy/Repositories/NewsInfo.php:61wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        • 1. -SecurityGadget-explain
        • 2. true
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:61
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where "short_name" = '-SecurityGadget-explain' limit 1
        810μs/app/Legacy/Repositories/NewsInfo.php:64wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:64
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where ("id" = '-SecurityGadget-explain' or "short_name" = '-SecurityGadget-explain') and "articles"."deleted_at" is null and "articles"."is_final" = 'true' limit 1
        510μs/app/Legacy/Repositories/NewsInfo.php:61wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        • 1. -SecurityGadget-explain
        • 2. true
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:61
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where "short_name" = '-SecurityGadget-explain' limit 1
        850μs/app/Legacy/Repositories/NewsInfo.php:64wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:64
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where ("id" = '-SecurityGadget-explain' or "short_name" = '-SecurityGadget-explain') and "articles"."deleted_at" is null and "articles"."is_final" = 'true' limit 1
        440μs/app/Legacy/Repositories/NewsInfo.php:61wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        • 1. -SecurityGadget-explain
        • 2. true
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:61
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "articles" where "short_name" = '-SecurityGadget-explain' limit 1
        5.89ms/app/Legacy/Repositories/NewsInfo.php:64wh2o
        Metadata
        Bindings
        • 0. -SecurityGadget-explain
        Backtrace
        • 15. /app/Legacy/Repositories/NewsInfo.php:64
        • 16. /code/wh2o/ArticleGadget.inc:128
        • 17. /code/wh2o/Page1.inc:930
        • 18. /code/wh2o/Page1.inc:1019
        • 19. /code/wh2o/SecurityGadget.inc:150
      • select * from "contacts" where "contacts"."id" = 580 limit 1
        3.17ms/code/wh2o/views/ContactView.inc:210wh2o
        Metadata
        Bindings
        • 0. 580
        Backtrace
        • 19. /code/wh2o/views/ContactView.inc:210
        • 20. /code/wh2o/views/ContactView.inc:156
        • 21. /code/wh2o/views/ContactView.inc:134
        • 22. /code/wh2o/views/View.inc:144
        • 23. /code/wh2o/ContactGadget.inc:367
      App\Contact
      2
          _token
          79KGe5NfFFsDr2jr9difWxSIE9iE0ybGeq0blnuI
          page
          array:1 [ "count" => -1 ]
          PHPDEBUGBAR_STACK_DATA
          []
          path_info
          /content/Contact/profile/contact_id/580
          status_code
          200
          
          status_text
          OK
          format
          html
          content_type
          text/html; charset=UTF-8
          request_query
          []
          
          request_request
          []
          
          request_headers
          0 of 0
          array:15 [ "priority" => array:1 [ 0 => "u=0, i" ] "accept-encoding" => array:1 [ 0 => "gzip, deflate, br, zstd" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "host" => array:1 [ 0 => "beta.americanwhitewater.org" ] ]
          request_server
          0 of 0
          array:42 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_PRIORITY" => "u=0, i" "HTTP_ACCEPT_ENCODING" => "gzip, deflate, br, zstd" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_HOST" => "beta.americanwhitewater.org" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "beta.americanwhitewater.org" "SERVER_PORT" => "443" "SERVER_ADDR" => "172.31.18.125" "REMOTE_PORT" => "27201" "REMOTE_ADDR" => "3.144.155.16" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => true "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/opt/americanwhitewater.org/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/content/Contact/profile/contact_id/580" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "PHP_VALUE" => "post_max_size=20M" "SCRIPT_FILENAME" => "/opt/americanwhitewater.org/public/index.php" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1744549074.1654 "REQUEST_TIME" => 1744549074 ]
          request_cookies
          []
          
          response_headers
          0 of 0
          array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sun, 13 Apr 2025 12:57:54 GMT" ] "set-cookie" => array:1 [ 0 => "XSRF-TOKEN=eyJpdiI6Im0vTERaWVMyb2F6VGtXV1QrTFFIMlE9PSIsInZhbHVlIjoiSFJpalA1T2swVEpTK2hmWXM3NkY2WmhETGlabXVvTE9ZL3F4d29xRDBCd1JkUVV0empzQ1hwOS83dGg1TThXQVpub3Z4V1pBL21HcENZeDVVeDJ4MkdZRkE0Q0w0TW82a1ZjbG9tK0tJUzZ1aGhZY0xDaloyYy9tMXVQN0Zpd3oiLCJtYWMiOiI1ZmIxODVhMTg5YjVkYTc5ZWRhMzgyYWY3MWVjNWE2NGNlZDQ5MzJiMWZkZDdkZWNjM2EwZjIyZjUxOWY3YmVlIn0%3D; expires=Sun, 13-Apr-2025 14:57:54 GMT; Max-Age=7200; path=/XSRF-TOKEN=eyJpdiI6Im0vTERaWVMyb2F6VGtXV1QrTFFIMlE9PSIsInZhbHVlIjoiSFJpalA1T2swVEpTK2hmWXM3NkY2WmhETGlabXVvTE9ZL3F4d29xRDBCd1JkUVV0empzQ1hwOS83dGg1TThXQVpub3Z4V" ] "Set-Cookie" => array:1 [ 0 => "XSRF-TOKEN=eyJpdiI6Im0vTERaWVMyb2F6VGtXV1QrTFFIMlE9PSIsInZhbHVlIjoiSFJpalA1T2swVEpTK2hmWXM3NkY2WmhETGlabXVvTE9ZL3F4d29xRDBCd1JkUVV0empzQ1hwOS83dGg1TThXQVpub3Z4V1pBL21HcENZeDVVeDJ4MkdZRkE0Q0w0TW82a1ZjbG9tK0tJUzZ1aGhZY0xDaloyYy9tMXVQN0Zpd3oiLCJtYWMiOiI1ZmIxODVhMTg5YjVkYTc5ZWRhMzgyYWY3MWVjNWE2NGNlZDQ5MzJiMWZkZDdkZWNjM2EwZjIyZjUxOWY3YmVlIn0%3D; expires=Sun, 13-Apr-2025 14:57:54 GMT; path=/XSRF-TOKEN=eyJpdiI6Im0vTERaWVMyb2F6VGtXV1QrTFFIMlE9PSIsInZhbHVlIjoiSFJpalA1T2swVEpTK2hmWXM3NkY2WmhETGlabXVvTE9ZL3F4d29xRDBCd1JkUVV0empzQ1hwOS83dGg1TThXQVpub3Z4V" ] ]
          session_attributes
          0 of 0
          array:3 [ "_token" => "79KGe5NfFFsDr2jr9difWxSIE9iE0ybGeq0blnuI" "page" => array:1 [ "count" => -1 ] "PHPDEBUGBAR_STACK_DATA" => [] ]