<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Python on dyama&#39;s page</title>
		<link>https://dyama.org/tag/python/</link>
		<description>Recent content in Python on dyama&#39;s page</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Mon, 13 Sep 2021 18:26:00 +0900</lastBuildDate>
		
			<atom:link href="https://dyama.org/tag/python/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>OpenCV でカメラキャリブレーション</title>
				<link>https://dyama.org/2021/09/7409/</link>
				<pubDate>Mon, 13 Sep 2021 18:26:00 +0900</pubDate>
				<guid>https://dyama.org/2021/09/7409/</guid>
				<description>&lt;p&gt;自分用の覚え書きです。&lt;/p&gt;&#xA;&lt;h2 id=&#34;python-でのキャリブレーション&#34;&gt;Python でのキャリブレーション&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qiita.com/ReoNagai/items/5da95dea149c66ddbbdd&#34;&gt;こちらの記事&lt;/a&gt;のコードが参考になります。(大枠はほぼそのまんま)&lt;/p&gt;&#xA;&lt;p&gt;元がビデオキャプチャデバイスから画像を取得しているので、弟氏に撮影済みの複数の画像ファイルからできるように変更してもらったのをさらにちょっと修正しています。&lt;/p&gt;</description>
			</item>
			<item>
				<title>3/26メモ</title>
				<link>https://dyama.org/2017/03/3026/</link>
				<pubDate>Mon, 27 Mar 2017 01:10:14 +0900</pubDate>
				<guid>https://dyama.org/2017/03/3026/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://dyama.org/wp-content/uploads/2017/03/heroku-logo.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;heroku&#34;&gt;heroku&lt;/h2&gt;&#xA;&lt;p&gt;わかりやすい。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://dotinstall.com/lessons/basic_heroku&#34;&gt;Heroku入門 (全12回) – プログラミングならドットインストール&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;heroku 上で Rails アプリが動くところまでざっと見てみました。てか、heroku の前にまともに Rails の勉強しなきゃ。&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenCVでステレオマッチング(ステレオカメラ)</title>
				<link>https://dyama.org/2017/03/2998/</link>
				<pubDate>Sat, 25 Mar 2017 16:58:59 +0900</pubDate>
				<guid>https://dyama.org/2017/03/2998/</guid>
				<description>&lt;p&gt;前日より引き続き、OpenCV でステレオ画像による深度計算をやっています。 &lt;a href=&#34;https://dyama.org/2017/03/3010/&#34;&gt;昨晩、スマホの単眼カメラで撮影した2枚のステレオ画像の深度計算で割と良さそうな結果が出た&lt;/a&gt;ので、Amazonで安いWebカメラを二つ注文。早速届いたので遊んでみます。&lt;/p&gt;&#xA;&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LMDE2 64bit&lt;/li&gt;&#xA;&lt;li&gt;OpenCV2&lt;/li&gt;&#xA;&lt;li&gt;Python2.7&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;カメラ&#34;&gt;カメラ&lt;/h2&gt;&#xA;&lt;p&gt;ロジクールの安いWebカメラを2台購入。購入時には1台1081円でした。田舎でも前日の深夜に注文した商品が翌日午後には届くのって素晴しすぎますね！引きこもって生きてゆけそう… _(:3」∠)_&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenCVでステレオマッチング</title>
				<link>https://dyama.org/2017/03/3010/</link>
				<pubDate>Thu, 23 Mar 2017 23:35:33 +0900</pubDate>
				<guid>https://dyama.org/2017/03/3010/</guid>
				<description>&lt;p&gt;かなりの今更感はさておき、OpenCV でステレオ画像による深度計算をやっています。&lt;/p&gt;&#xA;&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;LMDE2 64bit&lt;/li&gt;&#xA;&lt;li&gt;OpenCV2&lt;/li&gt;&#xA;&lt;li&gt;Python2.7&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;スクリプト&#34;&gt;スクリプト&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;stereo.py&lt;/strong&gt; (&lt;a href=&#34;https://gist.github.com/dyama/277e23c35bdfd8d8d4b5b992c03683e5&#34;&gt;Gist&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#57606a&#34;&gt;#!/usr/bin/python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#57606a&#34;&gt;# coding: utf-8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;numpy&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;np&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;cv2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;matplotlib&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;import&lt;/span&gt; pyplot &lt;span style=&#34;color:#cf222e&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img_left &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;imread&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;l.jpg&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img_right &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;imread&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;r.jpg&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img_left &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;GaussianBlur&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;equalizeHist&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;img_left&lt;span style=&#34;color:#1f2328&#34;&gt;),&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;),&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;img_right &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;GaussianBlur&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;equalizeHist&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;img_right&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;,(&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;),&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window_size &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;stereo &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;StereoSGBM&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    minDisparity &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;           &lt;span style=&#34;color:#57606a&#34;&gt;# 視差の下限&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    numDisparities &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;32&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;        &lt;span style=&#34;color:#57606a&#34;&gt;# 最大の上限&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SADWindowSize &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; window_size&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#57606a&#34;&gt;# SADの窓サイズ&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    uniquenessRatio &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;        &lt;span style=&#34;color:#57606a&#34;&gt;# パーセント単位で表現されるマージン&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    speckleWindowSize &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;      &lt;span style=&#34;color:#57606a&#34;&gt;# 視差領域の最大サイズ&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    speckleRange &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;16&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;          &lt;span style=&#34;color:#57606a&#34;&gt;# それぞれの連結成分における最大視差値&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    disp12MaxDiff &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;          &lt;span style=&#34;color:#57606a&#34;&gt;# left-right 視差チェックにおけて許容される最大の差&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    P1 &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;8&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;*&lt;/span&gt;window_size&lt;span style=&#34;color:#0550ae&#34;&gt;**&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;    &lt;span style=&#34;color:#57606a&#34;&gt;# 視差のなめらかさを制御するパラメータ1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    P2 &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;32&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;*&lt;/span&gt;window_size&lt;span style=&#34;color:#0550ae&#34;&gt;**&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt;   &lt;span style=&#34;color:#57606a&#34;&gt;# 視差のなめらかさを制御するパラメータ2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fullDP &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;True&lt;/span&gt;               &lt;span style=&#34;color:#57606a&#34;&gt;# 完全な2パス動的計画法を使うならTrue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disp &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; stereo&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;compute&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;img_left&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; img_right&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;disp &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;normalize&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;disp&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; alpha &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; beta &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;255&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; norm_type &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;NORM_MINMAX&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; dtype &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;CV_8U&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;imshow&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;disp&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; disp&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;waitKey&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cv2&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;destroyAllWindows&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;入力画像と深度計算の結果&#34;&gt;入力画像と深度計算の結果&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;cv2.StereoSGBM()&lt;/code&gt; のパラメータをいじくり回したり、単眼のスマホカメラで撮影した入力画像の位置合わせをしたりしていると、それなりに深度が出るようになりました。&lt;/p&gt;</description>
			</item>
			<item>
				<title>括弧を省略したLispコードのプロセッサーを書いてみました。</title>
				<link>https://dyama.org/2016/06/2839/</link>
				<pubDate>Wed, 15 Jun 2016 20:00:37 +0900</pubDate>
				<guid>https://dyama.org/2016/06/2839/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://dyama.org/wp-content/uploads/2016/04/ruby.jpg&#34; alt=&#34;&#34; class=&#34;img-center&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h1 id=&#34;supoo旧実装&#34;&gt;supoo(旧実装)&lt;/h1&gt;&#xA;&lt;p&gt;これまで業務でも趣味でも Lisp をガリガリ書くということはなく、せいぜい Emacs の設定ファイルを書くことにしか使ったことがありませんでした。 構文は非常にシンプルで、「これなら字句解析も構文解析も自分で書けそうだ。C と Lisp の勉強がてらやってみよう！」と思い立って書いたのが「&lt;a href=&#34;https://github.com/dyama/supoo/tree/master/src.old&#34;&gt;supoo&lt;/a&gt;」です。&lt;/p&gt;</description>
			</item>
			<item>
				<title>mrubyがやってきた！</title>
				<link>https://dyama.org/2013/10/923/</link>
				<pubDate>Sun, 06 Oct 2013 00:00:44 +0900</pubDate>
				<guid>https://dyama.org/2013/10/923/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://dyama.org/wp-content/uploads/799093997.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.opencascade.org/&#34;&gt;OpenCASCADE&lt;/a&gt; の勉強のために、仕事とは関係ないところで、自分なりの&lt;a href=&#34;http://dyama.github.io/siren/&#34;&gt;簡易三次元 CAD ビューア&lt;/a&gt;を作成しています。&lt;br&gt;&#xA;形状をパラメトリックに定義したり、対話的に制御したり、一連の処理をモジュール化する上で必要になってくるのがマクロ環境。マクロと言ってしまうと、使い勝手の悪いバッチ処理的なイメージがそこはかとなくありますが、強力なインタプリタ環境を組み込みたいと思いました。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bash, Perl, Ruby, Pythonで正規表現置換</title>
				<link>https://dyama.org/2012/10/464/</link>
				<pubDate>Tue, 23 Oct 2012 23:35:38 +0900</pubDate>
				<guid>https://dyama.org/2012/10/464/</guid>
				<description>&lt;p&gt;前回の&lt;a href=&#34;https://dyama.org/2012/10/386/&#34;&gt;C++/boost&lt;/a&gt;、&lt;a href=&#34;https://dyama.org/2012/10/456/&#34;&gt;.NET&lt;/a&gt;に加え、各種インタプリタ言語でも同じ動作をするスクリプトを書いてみました。&lt;/p&gt;&#xA;&lt;h1 id=&#34;シェルスクリプトbash&#34;&gt;シェルスクリプト(bash)&lt;/h1&gt;&#xA;&lt;p&gt;シェルスクリプトはそもそもグルー言語ですので、他のコマンドを呼び出して処理をすることが一般的です。下のサンプルではsedコマンドで置換処理をしています。bashだと正規表現マッチングは可能なので、ガリガリとスクリプトを書けばsedを使わずに実現できるかもしれません。&lt;/p&gt;</description>
			</item>
			<item>
				<title>PyGame で遊ぶ</title>
				<link>https://dyama.org/2012/04/117/</link>
				<pubDate>Wed, 04 Apr 2012 00:00:09 +0900</pubDate>
				<guid>https://dyama.org/2012/04/117/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;http://www.pygame.org/news.html&#34;&gt;PyGame&lt;/a&gt;とは、Python用のSDLラッパで「Pythonを使って比較的簡単にゲームが作れるよー」といったライブラリです。自前のIRCモジュールと組み合わせて、キャラクターの操作が可能なアバターチャット的な偽オンラインゲームなど、ガリガリ書いてみました。&lt;/p&gt;&#xA;&lt;p&gt;今日はとりあえず、メモ代わりにPyGameを用いたスクリプトの基本形を貼っつけておきます。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#57606a&#34;&gt;#!/usr/bin/env python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#57606a&#34;&gt;#---- coding: utf-8 ----&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;pygame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#24292e&#34;&gt;pygame.locals&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;if&lt;/span&gt; name &lt;span style=&#34;color:#0550ae&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;init&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;mouse&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;set_visible&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;True&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scr &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;display&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;set_mode&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;640&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;480&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;display&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;set_caption&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;c &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;time&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;Clock&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;True&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    c&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;tick&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;60&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    scr&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;fill&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;63&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;127&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;127&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;display&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;update&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cf222e&#34;&gt;for&lt;/span&gt; event &lt;span style=&#34;color:#0550ae&#34;&gt;in&lt;/span&gt; pygame&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;event&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;get&lt;span style=&#34;color:#1f2328&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cf222e&#34;&gt;if&lt;/span&gt; event&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#0550ae&#34;&gt;==&lt;/span&gt; QUIT&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sys&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;exit&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#cf222e&#34;&gt;if&lt;/span&gt; event&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#0550ae&#34;&gt;==&lt;/span&gt; KEYDOWN&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#cf222e&#34;&gt;if&lt;/span&gt; event&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;key &lt;span style=&#34;color:#0550ae&#34;&gt;==&lt;/span&gt; K_ESCAPE&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                sys&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;exit&lt;span style=&#34;color:#1f2328&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;特に解説するところもないですね。読んだままの意味です。&lt;/p&gt;</description>
			</item>
			<item>
				<title>Python で IRC クライアント的な</title>
				<link>https://dyama.org/2011/08/254/</link>
				<pubDate>Mon, 15 Aug 2011 00:00:00 +0900</pubDate>
				<guid>https://dyama.org/2011/08/254/</guid>
				<description>&lt;h2 id=&#34;基本&#34;&gt;基本&lt;/h2&gt;&#xA;&lt;p&gt;無駄がなくて綺麗なコード。やっぱり Python って素敵。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#!/usr/bin/env python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# -*- coding: utf-8 -*-&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;import socket, string&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;# ソケット作成、接続、ログイン&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irc = socket.socket( socket.AF_INET, socket.SOCK_STREAM )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irc.connect( ( &amp;#39;irc.example.com&amp;#39;, 6667 ) )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irc.send( &amp;#39;&amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER arianne * * arianne&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   NICK arianne&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   JOIN #hogefuga&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;#39;&amp;#39;&amp;#39; )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;while True:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   # recv() で、受信するまでブロッキング&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   buf = unicode( irc.recv( 1024 ).strip(), &amp;#39;utf-8&amp;#39; )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   # コマンドプロンプトの場合は、&amp;#39;cp932&amp;#39; を指定&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   print buf.encode( &amp;#39;utf-8&amp;#39; )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   # IRC サーバから PING が来たら PONG を自動応答する&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   if string.split( buf )[0] == &amp;#34;PING&amp;#34;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      irc.send( &amp;#34;PONG &amp;#34; + string.split( buf )[1] + &amp;#34;\n&amp;#34; )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   # 文字列に反応してみたり&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   if buf.find( u&amp;#34;こんにちは&amp;#34; ) &amp;gt; -1:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      irc.send( u&amp;#34;PRIVMSG #hogefuga :こんにちわぁ\n&amp;#34;.encode( &amp;#39;utf-8&amp;#39; ) )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;モジュール化&#34;&gt;モジュール化&lt;/h5&gt;&#xA;&lt;p&gt;車輪の再発明だと思いつつ、自分の使い易い形のクラスにしてみた。サーバー応答対応やエラーと例外処理が未実装だけれど「スレッド化した受信監視→外部から指定されたイベントハンドラ実行」は、これで・・・いけるはず・・・。もうちょっとスマートに書けるようになったらいいな。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
