2 - 連続表示

新規書き込み

※該当の記事タイトル一覧はリンク一覧から参照できます。

Python + Pygameのミニゲーム第二弾 『たけのこ狩り』

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月16日
Python + Pygameのミニゲーム第二弾 『たけのこ狩り』先日の『DOG & BURGERS』に引き続き、Python + Pygameのミニゲーム第二弾『たけのこ狩り』が完成しました。今回も制作期間は1週間でしたが、これまでに作ったプログラムからコピペで流用したものも多く、『DOG & BURGERS』より3割ほどプログラムが長くなっています。

今回新たに試してみた機能は以下の通りです。

・マウスでの操作
・スプライト(オブジェクト、半透明処理、重ね合わせ、衝突等)
・三角関数の応用(角度と動きの連動)

そんな感じで、ゲームの動画です。


プログラムもどうぞ。


ファイル一式はこちらからダウンロードできます
※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。

ゲーム自体は「日本らしさ」に加えて、少し「薄気味悪さ」もあります。手のキャラクターは私の右手の写真から切り取ったもので、これをそのまま使うか少し迷いましたが(薄気味悪いので…)、「よりインパクトが強い方がいいだろう」ということでそのままにしています。カメムシとカマキリの敵キャラも、モノクロで可愛さゼロです。

スプライトについては、当初"Sprite Group"の機能を使っていっぺんに表示させたり、衝突処理もスプライトのCollision機能を使用したりする予定でいました。しかし、Sprite Groupを使うとキャラクターの重ね合わせの順番を制御する処理が煩雑になってしまう上、Collision機能もいろいろやってみたものの自分の思っていた精度が出ずに、どちらも断念しました(私の使い方が悪かっただけかもしれませんが…)。そのため、各キャラクターのオブジェクトは形だけSpriteオブジェクトを継承していますが、普通に画像を貼り付けるのと全く変わらない処理に落ち着いてしまっています。

三角関数については、前回のサンプルプログラムのように、サイン(sin)とコサイン(cos)の結果をリスト化して、たけのこの円運動、波状移動などに使用しています。加えてカメムシの移動には「手」とカメムシの座標の違いから、アークタンジェント(atan2)でラジアン(角度)を算出して方向をコントロールしています。

正直なところ、私は数日前までatan2という関数を知りませんでした。当初は「2」が付いていないatan関数を使って、タンジェント値からまずはラジアン-1/2π~+1/2π(-90°~ +90°)を算出した後、座標によって正確なラジアン-π~+π(-180°~ +180°)を決定することを考えていました。「2」の付いているatan2関数はx, yの2つの引数を取ることから、座標からダイレクトに正確なラジアンを得ることができます。

今回もミニゲーム制作という形になりましたが、やはりコンピューター言語を学んでいく上では、実際に何か形になるものを作っていく方が理解できます。今、頭のなかに2点ほど作ってみたいものがあるので(サンプルプログラム程度ですが)、また時間を見て制作に取り掛かろうと思います。



Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)

ゲームを作りながら楽しく学べるPythonプログラミング (Future Coders(NextPublishing)) eBook
ゲームを作りながら楽しく学べるPythonプログラミング (Future Coders(NextPublishing)) eBookをAmazon.co.jpでチェック

かぐらスキー場

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月13日
かぐらスキー場今日は会社を休んで、新幹線でかぐらスキー場に行ってきました。今シーズン初スキーです。朝4時に起きて、5時過ぎの西武池袋線で池袋に到着したところ、人身事故で山手線が止まっていました。時間に余裕を持って出発したので、慌てずに丸ノ内線に乗って東京駅に着きました。

さすがに平日ということもあって、新幹線の乗車率は50%程度でした。越後湯沢駅からはスキー場行きのバスに乗っていくのですが、「道路に停まる路線バス」と「スキー場のステーション前に行く急行バス」の2種類があって、よく分からずに「路線バス」の方はパスして、「急行バス」の方に乗りました。バス停の前の方で待っていたので運良く座れましたが、出発前にはぎゅうぎゅう詰めの状態になり、スキー場のベースである「みつまたステーション」までこのまま20分間走り続けました。

以前、かぐらに行ったのは「ドラゴンドラ」が完成して比較的すぐだったので、17~18年前と思います。その時は天気が良く、「景色の良いスキー場」のイメージがありました(写真もなく、あまり記憶にないのですが…)。しかし、今日の天気は雪。滑り始めの30分程度は雲の切れ間から太陽が覗いたりもしましたが、その後は吹雪のようになり、結局そのまま天気が回復することはありませんでした。

そんな中、一応滑ることのできる全エリアを滑ろうと思い、ベースのみつまたエリアからゴンドラで上部のかぐらエリアに行き、そのままスキー場マップで言うところの左へ左へと滑って行き、田代エリアの端にあるロープウェイ乗り場まで行きました。ちなみに、今日はまだシーズン始めということもあり、ドラゴンドラが運休だったのと、かぐらエリア最上部の林間エキスパートコースも閉鎖されていました。

かぐらメインゲレンデ
[ かぐらメインゲレンデ ]

かぐらエリア・田代エリア分岐ポイント
[ かぐらエリア・田代エリア分岐ポイント ]

田代第2ロマンスリフト
[ 田代第2ロマンスリフト ]

その後、またかぐらエリアまで戻ったのですが、雪で視界が悪い上に、斜面に雪だまりが多くできていて滑りづらかったです。

今日はリフトとゴンドラに計20回乗り、滑走距離32kmでした。天気が悪かったので景色を楽しめず、またカービングの滑りはほぼ皆無でしたが、まあスキーシーズン始めは晴れる確率が低いので、仕方のないところです。

かぐらエリアとみつまたエリアを結ぶゴンドラコース
[ かぐらエリアとみつまたエリアを結ぶゴンドラコース ]

かぐらスキー場の感想ですが…、スキー場の印象は天候によって大きく変わるので判断が難しいですが、コース上に平坦な所が意外と多くあるのと(スノボの人は大変そうです)、エリアの広さの割には長い中斜面が少ないかな、というところです。ただ、晴れた日の景色を見たら印象が変わるかも知れませんね。

ちなみに昨シーズンに購入したGoProも持参したのですが、ネジが緩んでいたからか映像が下向きになっていて、目の前の斜面しか映っていないような感じでした。ですので、今回は動画なしです。

あと、この前新調したスキージャケット「MILLET BULLIT II JKT」ですが、サイズがぴったりで動きやすかったです。やはり、今のスキーウェアは、変にサイズに余裕を持たせない方がいいですね。

以上、まとまりの無い文章ですみません。



スキー関連記事(リンク一覧): 富士見パノラマリゾート(2025年) / ピラタス蓼科スノーリゾート / ガーラ湯沢スキー場(2024-2025シーズン) / 今までに行ったことのあるスキー場まとめ(2024年) / 富士見パノラマリゾート(2024年2回目) / ...(記事連続表示)

(ミレー) Millet メンズ スキー・スノーボード アウター White Cargo Neo 3L Jackets [並行輸入品]
(ミレー) Millet メンズ スキー・スノーボード アウター White Cargo Neo 3L Jackets [並行輸入品]をAmazon.co.jpでチェック

湘南国際マラソン 10kmレース

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月4日
湘南国際マラソン 10kmレース昨日は湘南国際マラソンの10kmレースに参加しました。私が今までに出たレースの中でも最大規模で、フルマラソンは19,000人、10kmレースでも4,000人もの参加者がいます。集合は大磯プリンスホテルで、ここから西湘バイパスに入り、少し東に歩いたところからスタートになります。

スタートは9:50でしたが、少し早めの8時過ぎに現地に到着しました。着替えてから荷物を預けて、「トイレに行っておこう」と思い、8:40頃から仮設トイレに並んだものの中々前に進みません。ようやく9時頃にトイレを済ませることができたのですが、フルマラソンのスタートが9時ちょうどということもあって、この頃にはトイレの周りもガラガラになりました。

今回は知人の方2名とスタート前に待ち合わせていて、9:30頃に指定された集合場所に向かったのですが、既に集団で西湘バイパスのスタート地点に向かって歩いていました。小走りで人の間を早歩きで抜けていったところ、運良く途中で知人の方と合流することができました。

9:50に号砲が鳴りました。しかし、ゆっくりと歩くような感じで、中々前に進みません。スタートラインを通過できたのは号砲から約3分後でしたが、スタート地点にゲストのトレンディエンジェルと千葉真子がいて、皆スマートフォンで写真を撮っていたことが原因のようです。かく言う私もスマートフォンでゲストの方々の写真を撮ってしまいました。

スタートラインを通過してすぐに走り始められたものの、人混みが凄くて中々ペースが掴めませんでした。道路の端の縁石の上を走りつつ人を抜かしたりして、最初の1kmは自分としては遅めの5分15秒でした。その後は人がバラけてきて、1kmあたり4分40秒前後の一定のペースで走り続けました。

コースはほぼ平坦で、しかも気温10℃程度で走りやすかったです。給水は最初の1回だけでした。4km過ぎの折り返し地点の後は、左手に海を見ながら、正面のやや右寄りに雪をかぶった富士山が見えて、景色や雰囲気を楽しむという点でも中々良かったです。

西湘バイパス
[ 西湘バイパス ]

9km地点を過ぎた所でややペースを上げて、西湘バイパス出口の下り坂では「ここで加速をつけて…」ということで、一瞬3分半/kmを切るようなスピードで走り抜けました。しかし、大磯プリンスホテルの敷地に入ってすぐに急な上り坂があり、これは完全に想定外でした。それでも速度を落としすぎることなく坂を登りきり、無事にゴールしました。

手元の時計ではスタートラインからゴールまで47分09秒でしたが、後ほど公式サイトにアップされたものは、ネットで47分18秒、グロス(正式タイム)で50分17秒でした。レース以外のランも含めて10kmのStrava上のベストタイムは45分44秒ですが、StravaのGPS測定の誤差を加味すると、今回のネットタイムはベストよりも1分弱遅かったと言えます。ただよく考えると、正式なレースで10kmちょうどを走るのは今回が初めてなので、いずれにしても「10kmレース」としてはベストタイムではあります。

ゴール後にまた知人の方2名と合流、その後はフルマラソンに参加していた方とも合流し、夜には楽しい打ち上げ会がありました。ここでフルマラソンのお誘いを受けたりしましたが、「うーん、ちょっと考えてみようかな…」という気になりました。まあ、早くても来年の秋以降ですね。

そんな感じでランニングのレース参加はこれで一休みです。これから3月下旬まではスキーの方に集中します。



ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)

ランニングする前に読む本 最短で結果を出す科学的トレーニング (ブルーバックス)
ランニングする前に読む本 最短で結果を出す科学的トレーニング (ブルーバックス)をAmazon.co.jpでチェック

Python - リスト内包表記とPygameのスプライト機能

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月2日
Python - リスト内包表記とPygameのスプライト機能先日のPythonミニゲーム(DOG & BURGERS)の後、Webサーバー上で動くプログラムを作成しようと思っていました。しかし、その前にやっておきたいことが2点あったので、今回はそれを試す目的でサンプルプログラムを作成してみました。

以下、ソースコードです。

-------------------------
""" list_comprehension_sprite.py """

import math
import pygame
from pygame.locals import *
import sys

pygame.init()
SCR_RECT = Rect(0,0,400,300)
SURFACE = pygame.display.set_mode(SCR_RECT.size)
FPSCLOCK = pygame.time.Clock()

pygame.display.set_caption("Sunflowers")

class MySprite(pygame.sprite.Sprite):
""" スプライト定義 """
def __init__(self, filename, x=0, y=0):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(filename)
self.width = self.image.get_width()
self.height = self.image.get_height()
self.x = x
self.y = y
self.rect = Rect(self.x, self.y, self.width, self.height)
#スプライト表示
def locate(self, x = 9999, y = 9999):
if x < 9999:
self.x = x
if y < 9999:
self.y = y
self.rect = Rect(self.x, self.y, self.width, self.height)

def main():
""" メインルーチン """

#三角関数結果をリスト化(内包表記)
circle_x = [math.cos(math.pi/180*i) for i in range(360)]
circle_y = [math.sin(math.pi/180*i) for i in range(360)]

#スプライトグループ作成
sprites = pygame.sprite.Group()

#ひまわりスプライト定義(リスト)
sunflowers = []
for i in range(10):
sunflowers.append(0)
sunflowers[i] = MySprite("sunflowers.gif", circle_x[i*36]*100+200, circle_y[i*36]*100+200)
sprites.add(sunflowers[i])

#変数初期設定
circle_counter = 0
a = 0

while True:

#ウインドウ閉じるボタン
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()

#画面塗りつぶし
SURFACE.fill((0,0,0))

#角度カウンター
circle_counter += 1
if circle_counter >= 360:
circle_counter = 0

#ひまわり座標計算
for i in range(10):
a = circle_counter + i * 36
if a >= 360:
a -= 360
sunflowers[i].locate(circle_x[a]*100+175, circle_y[a]*110+125)

#スプライトグループ表示
sprites.draw(SURFACE)

#画面アップデート
pygame.display.update()
FPSCLOCK.tick(100)

if __name__ == '__main__':
main()
-------------------------


ファイル一式はこちらからダウンロードできます
※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。

まずはリスト内包表記(List Comprehension)です。

今から30年近く前(高校2年でした)、X68000であるゲームを作っている時に、円運動するキャラクターを設置しようと思いつきました。シンプルに三角関数(サイン/sin、コサイン/cos)で座標を決めればいいと思っていたのですが、当時のパソコンは今のものに比べて処理速度が貧弱ということもあり、キャラクターを複数設置すると三角関数の繰り返しの計算の影響で、動作に遅延が起きるようになってしまいました。そこで考えついたのが、「三角関数の計算で得られた数値を予め配列変数に格納しておき、キャラクターの座標はその配列変数から順番に取り出していく」という方式です。これにより繰り返しの処理が変数から数値を取り出すだけになったことから、動作の遅延は解消されました。

Pythonでは配列変数とは言わず、「リスト」と呼びますが、今回のソースコードでは、以下の部分が三角関数(コサイン)の計算とリストへの格納になります。
circle_x = [math.cos(math.pi/180*i) for i in range(360)]


他の言語に慣れている人なら、恐らくこんな感じの方が馴染み深いと思います。
for i in range(360):
circle_x[i] = math.cos(math.pi/180*i)


これが一行でまとまる上に見た目も分かりやすいので、 これからも内包表記を多用していこうと思います。

ちなみに、比較的「低速」と言われるPythonですが、当時のX68000のX-BASIC+Cコンパイラーで作成したプログラムよりも断然早く、この程度の円運動なら繰り返し三角関数を計算させる方法でも全く問題ありませんでした(10倍速でも問題無いです)。しかし、今後大きなプログラムを作る時など、端末側に負担をかけない意味で、このやり方は慣れておいた方が良いかなと思っています。

次にスプライト(Sprite)機能です。

また昔話になりますが、上述のX68000のX-BASICや、その数年前のファミコンのプログラミングソフト「ファミリーBASIC」でもスプライト機能に対応していました。スプライト機能を使うとキャラクターを動かしつつ特別な処理をしなくても、背景画像が崩れることはありません。逆にスプライト機能が無いパソコンでは、キャラクターが動作した後に残像が残ってしまうため、その部分のみを都度描き直したり、もしくは画面全体を毎回リフレッシュして描画するなどの手法が必要でした。

ちなみに、昨年作成したHTML5+JavaScriptのミニゲームでは、div要素をブロックにして座標を設定する形で、ほぼスプライト機能と同じことができました。

Pygameのスプライトについても、同じような機能を期待していたのですが、残念ながら何らかの処理をしない限り、キャラクターを動かした後に残像が残ってしまいます。そのため、今回作成したサンプルプログラムでは、動作毎に画面をリフレッシュする方式を取っています。

ただ、Pygameのスプライトは衝突(collision)判定が充実していて、グループ化の機能と合わせて使用すれば効率よくプログラムが書けるかも知れません。今回のサンプルプログラムにはその辺りの関数は含めていませんが、また近いうちにスプライト+衝突判定を利用したミニゲームを作ってみようと思います。



Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)

Pythonゲームプログラミング 知っておきたい数学と物理の基本 (Future Coders(NextPublishing)) eBook
Pythonゲームプログラミング 知っておきたい数学と物理の基本 (Future Coders(NextPublishing)) eBookをAmazon.co.jpでチェック

Pythonの学習とPygameを使ったミニアクションゲーム作成

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月25日
Pythonの学習とPygameを使ったミニアクションゲーム作成ある知人の方より「機械学習(AI)用のプログラミング言語はPythonがメジャー」ということを聞いて、少し前からPythonには興味を持っていました。ただ、40代半ばにもなって、新しいプログラミング言語を学ぶというのは少し抵抗があって、なかなか腰を上げられずにもいました。

私は小学6年~高校2年の間に、PC-6001mkII(NEC)とX68000(シャープ)というパソコンで、BASIC言語を使ってゲームを作ったりしていました。その後、数年のブランクがありましたが、Visual Basic、Excel VBAからプログラミングを再開し、ホームページを自作するようになってからは、Web開発系言語のPerl、JavaScript、PHPも使うようになりました。一方、CやJavaなどのソフトウェア開発系の言語は、今までに全くと言っていい程触れていません。もとからプロのプログラマーではありませんが、週末に時間がある時などに趣味でプログラミングをしている「週末プログラマー」であります(Excel VBAのみ少し仕事で使っています)。ちなみに、PHPを使い始めたのが今から10年前で、それ以降は新しいプログラミング言語には手を出していませんでした。

何だかんだで、今月始めにようやくPythonの入門書を2冊購入し、PCにはPythonパッケージとして人気のあるAnacondaを入れてみました。入門書にあるサンプルプログラムを実際に書いたり書き換えたりしながら、Pythonの基礎を学習していきましたが、「学びやすい言語」という印象を受けました。第一に「読みやすく書きやすい」というのがあり、ユーザー関数やクラスの定義なども他の言語で慣れた人であれば、問題なく使うことができると思います。海外では子供のプログラミング学習でもPythonが使われ始めていると聞いていますが、これも頷けます。子供やプログラミング初心者から、大学の研究、人工知能、アプリの開発などまで幅広く使われており、さらに私のような中年が新たに学び始めるのにもPythonの壁は低いと感じます。

ただ、プログラミング言語を学ぶ上では、本を読んだりサンプルプログラムを少し動かしただけでは、使い方を理解しきれません。自分なりの使い方を確立していくステップとして、まずはミニアクションゲームを作成することにしました。ゲーム制作用のモジュールとしてPygameも利用します。

ということで、「DOG & BURGERS」というミニアクションゲームが完成しました。先週末から作り始めたので、製作期間は約1週間です。なぜ「犬」と「ハンバーガー」なのかというと、手持ちの画像素材集の犬とハンバーガーの画像が目についたので、そのままこれを使ってゲームにした、という流れです。以下、ゲームの動画になります。



プログラムはこんな感じです。


ファイル一式はこちらからダウンロードできます
※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。

今回のミニゲームではPythonのユーザー関数やクラスの定義の他、Pygameによるキー入力、画像ファイルの表示、音の再生などを試すことができました。ここ最近では一年前にJavaScriptでミニゲームをいくつか作りましたが、ほぼ同じようなレベルのものがPythonでも作れそうです。ただ、「DOG & BURGERS」では以下の問題があり、今のところ解決せずにそのまま放置しています(他のPCでは確認していないので、私のPCだけの問題の可能性もあります)。

・効果音の遅延。0.3秒程ズレが出てしまいます。
・キー入力がやや不安定。カーソルキーやスペースキーを押しているのに、たまに反応しないことがあります。

今回はPython学習の第一歩という位置づけですが、次はWebサーバー上で動く何らかのプログラムを作ってみようと思います。WebArenaのSuiteXでもPython対応ということなので(ただし、バージョンは2.7)、せっかくなのでこれを使って色々と動かしてみます。



Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)

みんなのPython 第4版
みんなのPython 第4版をAmazon.co.jpでチェック
コメント:Pythonの学習とPygameを使ったミニアクションゲーム作成
名前: mafunana524 日付: 2020年12月8日
コメント:Pythonの学習とPygameを使ったミニアクションゲーム作成vs cordにプログラムをコピペして実行したところ
7行目の「from pygame.locals import *」の「from」に
「No name 'locals' in module 'pygame'pylint(no-name-in-module)
Unable to import 'pygame.locals'pylint(import-error)」というエラーが出ました。
これはvs cordが悪いのですか?
それとも他に何か原因がありますか? 
コメント:Pythonの学習とPygameを使ったミニアクションゲーム作成
名前: 小川 邦久 リンク: https://kunisan.jp 日付: 2020年12月8日
すみません、3年位Pythonに触れていなかったため頭から抜けてしまっている上、vs cordについても全く分からないため、対応方法については正直コメントができないです。すみません…。
ちなみに我が家ではAnacondaで動作しています。

2017川崎国際多摩川マラソン(ハーフマラソン)

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月19日
2017川崎国際多摩川マラソン(ハーフマラソン)今日は知人の方と一緒に川崎国際多摩川マラソン(ハーフマラソン)に参加しました。ハーフマラソンは2015年3月の立川シティマラソン以来なので、2年8ヶ月ぶりになります。とは言いつつ、今回のレースに向けて、9月、10月の2ヶ月間に、練習で3回ほどハーフマラソンの距離を走りました。ですので、距離に対する不安は前回ほどではありませんでした。

スタートは等々力陸上競技場。朝9時半の号砲ですが、気温12℃で30分程待っていたりして、かなり寒く感じました。もともと上はTシャツだけで走る予定だったのですが、ウインドブレーカーをTシャツの内側に着て寒さ対策をし、なおかつゼッケンが隠れないようにしました。下は短パン+ロングタイツです。

スタート直後は混み合っていて、なかなかペースが掴めませんでしたが、最初の1kmを超えたあたりで少しばらけてきて、当初予定していた1kmあたり5分05秒~15秒程度で走れるようになりました。

スタートから4kmちょっとの所でダートコースに入ります。所々に砂が深いところがあり、足の蹴りが推進力になりきらず、少し滑ってしまう感じです。これが18.5km地点あたりまで続くので、かなりパワーのいるコースでした。道の端に少しだけ芝が生えていて、砂のある所よりもやや滑りづらくなっていたので、できるだけここを走るようにしました。

多摩川沿いのダートコース
[ 多摩川沿いのダートコース ]

終始景色に大きな変化がなく、ある意味退屈なコースかもしれません。ただ、全体的にフラットなので、一定のペースで走り続けることができます。途中、1kmあたり5分15秒できれいにペースを刻んでくれるおじいさんランナーがいて、しばらくはこの方に付いていくようにしました。

残り4~5kmの所でも体力が残っている感覚があったので、17km付近でややペースを上げていきました。18.5kmの舗装路に戻ったところからは、1kmあたり5分を切るペースで走るようにしました。

最後は等々力陸上競技場に戻ってラストスパート。無事ゴールしました。公式記録は1:50:33、ネットタイムは1:49:55でした。ゴール直後に右のハムストリングが攣ってしまった位なので、とりあえず自分の中では「ほぼ限界まで実力を出しきった」ということだと思っています。

久しぶりのハーフマラソンは気温もコースもキツかったですが、完走後の爽快感や「やりきった感」は今まで参加したレースの中でも一番でした。走り終わった後は丸子温泉で疲れを取り(いつも通り湯船につかる時間は「カラスの行水」でしたが…)、王将でたらふく飲み食いして帰路につきました。

ハーフマラソンを次に走るのは…、まあ明言はできないですね。とりあえず、すぐではなさそうです。



ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)

ゼロから始めるマラソン&ジョギング入門
ゼロから始めるマラソン&ジョギング入門をAmazon.co.jpでチェック

湘南ラン

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月12日
湘南ラン昨日は知人の方お二人と一緒に「湘南ラン」でした。大船を起点に鎌倉に向かい、由比ヶ浜から海岸沿いを江ノ島まで走るルートです。合計15km弱です。実は一度10月中に計画していたのですが、台風が近づいていた影響で、昨日に延期となっていました。

鎌倉では建長寺と鶴岡八幡宮に立ち寄りました。土曜日ということもあって、鶴岡八幡宮は多くの人で混み合っていました。階段の前にある舞殿では結婚式が行われています。その後は小町通りに行ったのですが、こちらも多数の人でごった返していて走ることはできず、ここは通りの写真を撮りながらゆっくりと歩きました。

建長寺
[ 建長寺 ]

鶴岡八幡宮
[ 鶴岡八幡宮 ]

小町通り
[ 小町通り ]

鎌倉駅近くから再び走り始め、由比ヶ浜から海沿いのルートになります。海沿いを走るは初めての経験ですが、「白波とサーファー」の風景を見ながら、海風の中を走るのは本当に心地よかったです。途中江ノ電と何度かすれ違いました。

湘南の海岸と江ノ島
[ 湘南の海岸と江ノ島 ]

江ノ電"
[ 江ノ電 ]

海岸沿いのルートは約6km。終始キロ5分半前後のペースで走り続けて、江ノ島が近づいてきました。夕日をバックにした江ノ島は、サザンの歌にでも出てきそうな雰囲気です。江ノ島弁天橋を渡った後、本当は江島神社まで行こうとしたのですが、こちらも人混みが凄いのと、日が暮れて少し寒くなってきたのとで、そのまま引き返すことにしました。

夕日と江ノ島
[ 夕日と江ノ島 ]

江島神社につながる鳥居
[ 江島神社につながる鳥居 ]

最後に江ノ島からモノレールの湘南江の島駅まで走って、ラン終了です。モノレールで大船まで戻り、それから銭湯で汗を流し、居酒屋で酒と料理を思う存分楽しみました。

ここ最近、山道ランに心が動きつつありましたが、海沿いランの楽しさを味わった一日でした。



ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)

鎌倉・湘南・三浦ウォーキング (大人の遠足BOOK)
鎌倉・湘南・三浦ウォーキング (大人の遠足BOOK)をAmazon.co.jpでチェック

スキージャケット新調 - MILLET BULLIT II JKT(ミレー・ブリット2ジャケット)

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月4日
スキージャケット新調 - MILLET BULLIT II JKT(ミレー・ブリット2ジャケット) 今日は神保町の石井スポーツに行き、新しいスキージャケットを買ってきました。MILLET BULLIT II JKTです。

2年前に購入したゴールドウィンのジャケットはまだ2シーズンしか使っておらず、デザインについてもそこそこ気に入っていたのですが、サイズが「L」で袖の部分が少し長すぎるのと、全体的にダボダボした感じで何となく動きづらさがありました。試着の際、Mサイズでは少しきつい気がしたのでLサイズにしたのですが、今からすると選択ミスでした。一方、一緒に購入したスキーパンツ(Mサイズ)の方は履き心地が良く、そのまま使い続けることにしたので、今回はスキージャケットのみの購入です。

新しく買ったMILLET BULLIT II JKTですが、袖の長さも含めてサイズはバッチリです。フードは今までのものに比べて小さめで、ヘルメットの上からかぶることはできませんが、手持ちのインナーやミドルレイヤーの方でヘルメットの内側に入るフードがあるので問題なしとしました。逆にスキー以外で着るような場合(ヘルメットなして着る場合)には、フードが大きすぎずに目の所で邪魔にならず、きちんと使えそうです。

内側のポケットからヘッドホン用のケーブルが出せる専用の穴があったり(私はスキー中は音楽を聞きませんが)、外側のポケットにゴーグルを拭く専用の布が付いていたり、フードが脱着可能だったり、細かいところにも気配りのある作りになっています。

スキーシーズンが始まるまで1ヶ月半ほどありますが、早くも楽しみで仕方ありません。



スキー関連記事(リンク一覧): 富士見パノラマリゾート(2025年) / ピラタス蓼科スノーリゾート / ガーラ湯沢スキー場(2024-2025シーズン) / 今までに行ったことのあるスキー場まとめ(2024年) / 富士見パノラマリゾート(2024年2回目) / ...(記事連続表示)

skier 2018 「スキーと旅」 (別冊 山と溪谷)
skier 2018 「スキーと旅」 (別冊 山と溪谷)をAmazon.co.jpでチェック

KUNISAN.JP全ウェブページのUTF-8化 (複数ファイルの文字コード変換)

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年10月29日
KUNISAN.JP全ウェブページのUTF-8化 (複数ファイルの文字コード変換)昨日、今日と週末二日間で、KUNISAN.JPの全ウェブページの文字コードをUTF-8化しました。大小全部で約50個のサイトがあり、関連のテキストファイルはHTML、PHP、Perl、データファイルを合わせて2000個程度あるので、さすがに手作業での変更は無理です。以下の無料ソフトを使って作業を進めました。

Notepad++ - 基本はテキストエディターですが、複数ファイルのテキスト一括変換も対応しています。正規表現も使えます。
KanjiTranslatior - 複数ファイルの文字コード一括変換ができます。

作業はHTMLのmetaタグ中の文字コード宣言をShift_JIS(SJIS)からUTF-8に変更し、その後にファイルをUTF-8形式に変換するというのが中心になります(逆の順番で行うと、Notepad++が文字コードを誤認識する影響で、文字化けが発生してしまいます)。

作業はそれなりに順調に進みましたが、やはりPerlやPHPの文字列絡みのところで何度かひっかかりました。具体的には以下のような所でした。

・Perlでのメール送信。今まではjcode.plを使って日本語の処理をしていましたが、jcode.plはUTF-8に対応していません。ただ、Perl5.8からデフォルトで各種コードが扱えるようになっているので、"use utf8"の宣言をして、encode関数、decode関数を使ってメール作成、送信の処理をしています。
・PHPの文字列処理。今まではmb_internal_encoding、mb_regex_encodingがいずれもSJIS指定になっていましたが、これをUTF-8に変更しています。MySQLとのデータやり取り(UTF-8⇔SJIS)などで使用していたmb_convert_encodingも全て無効にしました。
・PHPでのメール送信。送信者名が日本語の場合、UTF-8のままメール送信処理を行うと、受信者側のメールクライアントによっては文字化けする不具合が発生しました。mb_encode_mimeheaderを使うことで回避しています。

対策に何時間もかかるような大きなトラブルは無かったものの、やはり一括変換だけでは処理しきれないファイルも多数あったことから、トータルで10時間ほどかかってしまいました。ただ、今週末は関東地方に台風が近づいていて雨が降り続いていたので、こういった作業を自宅で集中的にやるには最適のタイミングではありました。

KUNISAN.JPのウェブページは、1997年から作り始めたこともあって、ほぼ全ページ文字コードがSJISでした。しかし、データベース(MySQL)や外部APIとの絡みや、昨今のWeb関連の流れに沿う形で、今回のUTF-8化への決断となりました。表面的には何も変わっていないように見えますが、今後のメンテや新しい外部サービスとの接続などでは、より効率化が図れるようになったと思います。



Web管理関連記事(リンク一覧): さくらのレンタルサーバ 新サーバーへの移行 / SPF、DKIM、DMARCの設定とネームサーバー(DNS)設定のトラブル / さくらレンタルサーバーのアクセス履歴をPHPで表示 / PHPで画像のアップロード(さくらレンタルサーバーのPHPでImageMagick) / KUNISAN.JPサイトのメンテナンス(2018) / ...(記事連続表示)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)
プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)をAmazon.co.jpでチェック

奥多摩ドライブ&ラン&トレッキング(日原、海沢三滝)

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年10月25日
奥多摩ドライブ&ラン&トレッキング(日原、海沢三滝)昨日は仕事を休み、トヨタレンタカーでヴィッツを借りて、奥多摩にドライブに行ってきました。目的地は日原と海沢(うなざわ)の2ヶ所です。台風の翌日ということで、多摩川が増水していて、青梅街道近くの河原は立入禁止になっていました。

前日の風と雨で、道中の日原街道は葉っぱと枝が沢山落ちていました。その後、日原鍾乳洞付近の駐車場で車を停めて、周りを歩いてみました。本当は紅葉を期待して行ったものの、「少し色づき始めたかな」という程度で、ピークには少し早かったようです。

鍾乳洞の中には何度も入ったことがあるので、今回は中には入りませんでした。鍾乳洞入口近くの川も、増水でいつもよりも勢い良く流れていました。

「せっかくなので」ということで、鍾乳洞近くの道路を1km程走ってみました。いつものGarminで測定してみたものの、山に囲まれているせいもあって、GPSのプロットがかなり不正確です(数十mずれるところもありました)。スマートフォンのGPSもかなり不安定で、「この辺りで山に迷い込んでも、GPSは役に立たなそう」と思いました。

その後、再び車に乗り込み、奥多摩駅の方まで戻りました。車を停めて、もえぎの湯(温泉)を起点に海沢三滝に向かってラン&トレッキングのスタートです。

今回のランニングのメインコースである海沢林道は、舗装されてはいるものの、基本は車が1台通れる程度の幅しかなく、アスファルトが剥がれたりして路面が荒れている箇所もあります。逆に車がほとんど通らないので(平日だからかも知れませんが)、ランニングしやすい所でもあります。ただ、台風の翌日で所々水たまりがあったり、川のように水が流れている箇所もありました。メインの滝はまだ先ですが、林道の脇を流れる海沢川に流れ込む小さな滝がいくつもあって、自然を感じながら上り坂をスローペースで走り続けました。

海沢トンネル(うなざわトンネル)
[ 海沢トンネル(うなざわトンネル) ]

5kmほど走った後、海沢園地(うなざわえんち)に到着しました。ここから海沢三滝のハイキングコースがスタートします。地面がぬかるんでいて滑りやすく、またアップダウンも激しいので、ここではトレイルランニングのようなことはやらずに、転ばないようゆっくりと歩くようにします。

「ハイキングコース」とは言うものの、所々で道なのか道でないのか分かりづらく、また急な階段があったり、ロープを使って昇り降りをしなければいけない箇所もあったりします。でも、歩いている間は山林特有の雰囲気を感じながら、川や滝の音も聞こえてきて、気分も高まってきます。平日ということもあってか、ハイキングコースでは1人しかすれ違わず、あとはずっと私一人の世界でした。


台風の直後で川の水量があり、海沢三滝(三つ釜の滝、ネジレの滝、大滝)はいずれももの凄い迫力でした。行く前までは「奥多摩にある滝」ということで、正直なところあまり大したものを期待していなかったのですが、想像を遥かに超える水量と音とパワーを目の当たりにして、思わず感動してしまいました。



三つ釜の滝、ネジレの滝、大滝と順番に見た後、海沢園地に戻ろうと山道を引き返しました。ところが三つ釜の滝の近くであるはずの場所で、「道でない」所を歩いていることに気づきました。「あれ?」と思いましたが、「まあ下の方に歩いていけば戻れるかな」とも考え、斜面をゆっくりと下っていきました。しかし、ランニングシューズは山道では滑りやすく、転んで尻もちをついて2m程滑り落ちてしまいました。木につかまってそれ以上は落ちることはありませんでしたが、かなりヒヤッとしました。そこからさらに「海沢園地があると思われる方向」に歩いていったら、今度は崖のような急斜面に行く手を阻まれてしまいました。

頭の中に「遭難」の二文字が浮かんできてしまいました。スマートフォンのGPSを見ても、うまく電波を捉えておらず、またGoogleマップには山道は表示されません。ここで直感的に「元の場所に戻ろう」ということで、記憶と勘を頼りに歩いてみました。運良く数分で逸れる前の山道に戻ることができて、さらにそこから別の方向に伸びる正しいルートがありました。

迷った時間は20分ほどだったと思いますが、「やはり山を甘く見てはいけない」と思いました。反省点は以下の通りです。

・山道を含めたラン&トレッキングでは、ランニングシューズではなく、トレッキングシューズを履くべき。トレッキングシューズはランニングシューズよりは重いものの、走れないということはなく、山道でスリップのリスクも抑えられる。
・道中「何かおかしい」と少しでも感じたら、元の場所に戻るようにする。「下に行けばどうにかなる」という考えは危険。あてもなく進むようなこともしない。
・ウエストポーチに500mlの水を入れているだけで、下山までに飲み干してギリギリだった。コースにもよるが、リュックに1リットルなど多めの水を入れて、さらにある程度の食べ物も入れておいた方が安心。
・他に一人もいないような場所で孤立すると危ないので、誰かと一緒に行った方がベター。できれば山登り経験者と。

海沢園地からは、また走ってもえぎの湯まで戻りました。帰りはほぼ下り坂で、特に最初の3kmはキロ4分台前半のいつもよりも早いペースでした。

もえぎの湯では、まず外の自動販売機でスポーツドリンクを一気に飲み干し、中の受付で支払いを済ませた後、温泉にゆっくりとつかりました。温泉から出た後、20分ほど休憩して、それから帰りの車に乗り込みました。既に周りは暗くなり始めていました。

今回は遭難しかねないミスもあったりしましたが、それでもドライブ&ラン&トレッキングは楽しかったです。また別の場所でもやってみようと思っていますが、次回以降はしっかりと対策しないといけませんね。



ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)

山と高原地図 奥多摩 御岳山・大岳山 2017 (登山地図
山と高原地図 奥多摩 御岳山・大岳山 2017 (登山地図をAmazon.co.jpでチェック



※該当の記事タイトル一覧はリンク一覧から参照できます。