mieki256's diary



2024/09/21() [n年前の日記]

#1 [dtm] Mary TTSについて調べてる

音声合成ツールについて調べているうちに、Mary TTS というツールがあることを知った。

_MaryTTS - Introduction
_marytts/marytts: MARY TTS -- an open-source, multilingual text-to-speech synthesis system written in pure java
_英語テキスト朗読ツールMaryTTS | AIお助けボックス

気になったので試用してみようと思ったのだけど、インストール方法からして分からない…。もうちょっと調べてみないと…。

ダメだった事例 :

以下の動画を参考にしながら作業。Windows10 x64 22H2 + Java 1.8.0_421上で実験。

_Install Open Mary TTS in Windows - YouTube

以下のページから marytts-5.2.zip を取得して解凍。任意のフォルダに置いた。

_MaryTTS - Download

音声データらしきものを取得。以下の .xml に zip ファイルのURLが書いてあるので、一つずつDLしていった。

_marytts/download/marytts-components.xml at master - marytts/marytts

ただ、github.com に置いてある zip は入手できるけど、mary.dfki.de のURLは404になっていて、そこに置いてあったらしい zip は入手できない…。

とりあえず、DLできたzipだけでも解凍。中には lib/*.jar があるので、marytts-5.2.zip を解凍してできたフォルダ内の lib/ の中にコピー。

これで、bin/marytts-server.bat を実行してサーバを起動しておいてから、bin/marytts-client.bat を実行すれば動くはずなのだけど。marytts-client.bat を実行した段階で、サーバ側もクライアント側も両方エラーを出して終了してしまう。

当時は Java 8 で動かしていたらしい。Java が新し過ぎると動かないのだろうか?

2023/09/21(木) [n年前の日記]

#1 [hsp] 疑似3D道路その16

_昨日 の続き。HSP 3.6 を使って、疑似3D道路が作れないか試しているところ。環境は Windows10 x64 22H2。

道路と車の描画順について悩んでる。考えてみたら、車のz値が同じでも、道路を描いてから車を描くか、車を描いてから道路を描くか、という別々の状態が発生しそうな気がする…。

2023/09/22追記 :

図を描いてみた。

about_car_road_draw_order_ss01.png

横から見た図で考えてる。茶色の線が道路。オレンジの線がセグメント(=道路データ)の区切り。

各セグメント内の描画順だけを考えても、道路を描いてから車を描く、車を描いてから道路を描く、この2つがあるよなと…。

ふと気が付いた。今現在、道路の描画時、セグメントの手前がセグメントの奥より上にある時、つまりは下り坂相当のセグメントについては、そもそも道路の描画をスキップしてることを忘れてた。図で言えば、車を描いてから道路を描くべき、とされているセグメント。

道路を描いてないのだから、描画順を気にする必要は無いのでは…? つまり、どんな時も、道路を描いてから車を描く、という描画順でいいのではないかな…。

2022/09/21(水) [n年前の日記]

#1 [python] PyOpenGLでビルボードが実現できそうか実験中その2

Python + PyOpenGL (OpenGL) を使って、ビルボードが実現できそうか実験しているところ。環境は、Windows10 x64 21H2 + Python 3.9.13 64bit + PyOpenGL 3.1.6。

この場合のビルボードというのは、立て看板みたいなもので、絶えずカメラのほうを向いているポリゴンというか…。それっぽいテクスチャをビルボードに貼っておくことで、一見するとそこに細かい何かが置いてあるように錯覚させることができるという…。まあ、ハードウェアスペックが低かった時代に多用されていた、頓智というか、インチキというか、そういうアレですけど…。以下の解説記事内のスクリーンショットが分かりやすい気がします。

_【Unity】ビルボードで常にカメラの方に向く木を作る - おもちゃラボ

昔のTVゲーム、「スペースハリアー」「アウトラン」「アフターバーナー」等もビルボードを活用した事例になるのだろうか。当時はポリゴンじゃなくてスプライトで実現してたと思うけど、発想は同じかなと。

最初に試したソース。 :

最初に書いたのは以下のソース。

_01_draw_billboard_alpha_bug.py
import sys
import math
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from PIL import Image

IMG_NAME = "img_rgba.png"

SCRW, SCRH = 512, 512
FPS = 60

scr_w, scr_h = SCRW, SCRH
window = 0

# Rotation angle for the Quads
rotx = 0.0
roty = 0.0

texture = 0


def load_texture():
    global texture

    # load image by using PIL
    im = Image.open(IMG_NAME)
    w, h = im.size
    print("Image: %d x %d, %s" % (w, h, im.mode))

    if im.mode == "RGB":
        # RGB convert to RGBA
        im.putalpha(alpha=255)
    elif im.mode == "L" or im.mode == "P":
        # Grayscale, Index Color convert to RGBA
        im = im.convert("RGBA")

    raw_image = im.tobytes()

    ttype = GL_RGBA
    if im.mode == "RGB":
        ttype = GL_RGB
        print("Set GL_RGB")
    elif im.mode == "RGBA":
        ttype = GL_RGBA
        print("Set GL_RGBA")

    glBindTexture(GL_TEXTURE_2D, glGenTextures(1))

    # glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
    glPixelStorei(GL_UNPACK_ALIGNMENT, 4)

    # set texture
    glTexImage2D(
        GL_TEXTURE_2D,      # target
        0,                  # MIPMAP level
        ttype,              # texture type (RGB, RGBA)
        w,                  # texture image width
        h,                  # texture image height
        0,                  # border width
        ttype,              # texture type (RGB, RGBA)
        GL_UNSIGNED_BYTE,   # data is unsigne char
        raw_image,          # texture data pointer
    )

    glClearColor(0, 0, 0, 0)
    glShadeModel(GL_SMOOTH)

    # set texture repeat
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)

    # set texture filter
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)
    # glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
    # glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)
    # glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND)


def set_billboard_matrix():
    m = glGetDoublev(GL_MODELVIEW_MATRIX)
    m[0][0] = m[1][1] = m[2][2] = 1.0
    m[0][1] = m[0][2] = 0.0
    m[1][0] = m[1][2] = 0.0
    m[2][0] = m[2][1] = 0.0
    glLoadMatrixd(m)


def draw_gl():
    global rotx, roty

    glClearColor(0.125, 0.25, 0.5, 0.0)  # background color
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glLoadIdentity()  # Reset The View

    # move camera
    r = 12.0
    ex = r * math.cos(math.radians(roty + 90.0))
    ey = 5.0
    ez = r * math.sin(math.radians(roty + 90.0))
    tx, ty, tz = 0.0, 0.0, 0.0
    gluLookAt(ex, ey, ez, tx, ty, tz, 0, 1, 0)

    glEnable(GL_BLEND)
    glEnable(GL_TEXTURE_2D)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

    glColor4f(1.0, 1.0, 1.0, 1.0)  # color

    # draw floor quads
    glPushMatrix()

    w = 5.0
    glBegin(GL_QUADS)

    glTexCoord2f(0.0, 0.0)  # set u, v
    glVertex3f(-w, 0.0, -w)  # Top Left

    glTexCoord2f(1.0, 0.0)
    glVertex3f(w, 0.0, -w)  # Top Right

    glTexCoord2f(1.0, 1.0)
    glVertex3f(w, 0.0, w)  # Bottom Right

    glTexCoord2f(0.0, 1.0)
    glVertex3f(-w, 0.0, w)  # Bottom Left

    glEnd()
    glPopMatrix()

    # draw object quads
    for i in range(0, 300, 20):
        x = 5.0 * math.cos(math.radians(i))
        y = 0.0
        z = 5.0 * math.sin(math.radians(i))

        glPushMatrix()
        glTranslatef(x, y, z)  # translate

        set_billboard_matrix()

        glBegin(GL_QUADS)

        glTexCoord2f(0.0, 0.0)  # set u, v
        glVertex3f(-1.0, 2.0, 0)  # Top Left

        glTexCoord2f(1.0, 0.0)
        glVertex3f(1.0, 2.0, 0.0)  # Top Right

        glTexCoord2f(1.0, 1.0)
        glVertex3f(1.0, 0.0, 0.0)  # Bottom Right

        glTexCoord2f(0.0, 1.0)
        glVertex3f(-1.0, 0.0, 0.0)  # Bottom Left

        glEnd()
        glPopMatrix()

    glDisable(GL_TEXTURE_2D)

    glutSwapBuffers()


def init_viewport_and_pers(width, height):
    # Prevent A Divide By Zero If The Window Is Too Small
    if height == 0:
        height = 1

    scr_w, scr_h = width, height

    # Reset The Current Viewport And Perspective Transformation
    glViewport(0, 0, width, height)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()  # Reset The Projection Matrix

    # Calculate The Aspect Ratio Of The Window
    # gluPerspective(fovy, aspect, zNear, zFar )
    gluPerspective(60.0, float(width) / float(height), 0.1, 100.0)
    glMatrixMode(GL_MODELVIEW)


def InitGL(width, height):
    glClearColor(0.125, 0.25, 0.5, 0.0)  # background color
    glClearDepth(1.0)  # Enables Clearing Of The Depth Buffer
    glEnable(GL_DEPTH_TEST)  # Enables Depth Testing
    glDepthFunc(GL_LESS)  # The Type Of Depth Test To Do
    glShadeModel(GL_SMOOTH)  # Enables Smooth Color Shading

    init_viewport_and_pers(width, height)


def resize_gl(width, height):
    init_viewport_and_pers(width, height)


def on_timer(value):
    global rotx, roty
    rotx = 0.0
    roty = roty + 0.5
    glutPostRedisplay()
    glutTimerFunc(int(1000 / FPS), on_timer, 0)


def key_pressed(key, x, y):
    # If escape is pressed, kill everything.
    ESCAPE = b"\x1b"
    if key == ESCAPE or key == b'q':
        if glutLeaveMainLoop:
            glutLeaveMainLoop()
        else:
            sys.exit()


def main():
    global window

    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)

    glutInitWindowSize(SCRW, SCRH)
    # glutInitWindowPosition(0, 0)

    window = glutCreateWindow(b"Draw texture")

    glutDisplayFunc(draw_gl)
    glutReshapeFunc(resize_gl)
    glutKeyboardFunc(key_pressed)
    # glutFullScreen()

    # glutIdleFunc(draw_gl)
    glutTimerFunc(int(1000 / FPS), on_timer, 0)

    InitGL(SCRW, SCRH)

    load_texture()

    glutMainLoop()


if __name__ == "__main__":
    print("Hit ESC key to quit.")
    main()


使用画像は以下。

_img_rgba.png


この版では、以下の解説記事を参考にして、変換行列の回転部分を単位行列にして試してみた。これは、ポリゴンをカメラに向かせる処理ではなくて、スクリーンと平行にする処理なのだとか。

_床井研究室 - ビルボード

そのあたりの処理をしているのは以下の部分。
def set_billboard_matrix():
    m = glGetDoublev(GL_MODELVIEW_MATRIX)
    m[0][0] = m[1][1] = m[2][2] = 1.0
    m[0][1] = m[0][2] = 0.0
    m[1][0] = m[1][2] = 0.0
    m[2][0] = m[2][1] = 0.0
    glLoadMatrixd(m)

PyOpenGL の場合、glGetDoublev(GL_MODELVIEW_MATRIX) を使うと、変換行列が二次元配列の形で取得できる。配列の並びは以下のような感じだった。
m[0][0]  m[1][0]  m[2][0]  m[3][0]
m[0][1]  m[1][1]  m[2][1]  m[3][1]
m[0][2]  m[1][2]  m[2][2]  m[3][2]
m[0][3]  m[1][3]  m[2][3]  m[3][3]

更に、glLoadMatrixd() を使えば、配列を変換行列に書き込む(変換する)ことができる。

ただ、この処理は、変換行列を書き換えてしまうので、そのままにしてしまうと後々の変換処理が軒並みおかしくなる可能性が高い。そこで、glPushMatrix() を呼んで変換行列を一時退避してから、こういった変換行列書き換え等の処理をして、処理が終わったら glPopMatrix() を呼んで変換行列の書き戻しをする、といった記述が必要になる。

さておき。実際に動かしてみたら、以下のような見た目になった。




一見すると上手く行ってるように思えたのだけど、よく見るとテクスチャの透明部分が色々おかしい。この症状は見覚えがある…。以前、three.js (WebGL) を勉強していた時にも遭遇した記憶が…。

_mieki256's diary - three.jsでビルボード

修正を試みたが変化無し。 :

ググっていたら、glDepthMask() や glDepthFunc() を使うべしという話を見かけたので試してみた。

_02_draw_billboard_depth_mask.py

追記したのは以下のような行。

    glDepthMask(GL_FALSE)
    glDepthFunc(GL_LEQUAL)

    # draw billboard ...

    glDepthMask(GL_TRUE)
    glDepthFunc(GL_LESS)

しかし、以下のような結果になった。ビルボードの前後関係がおかしくなってしまっている。いや、この場合、描画を指示した順番がちゃんと反映された状態で描画されるようになったと捉えるべきか…。

ALPHA_TESTを指定して解決。 :

自分の昔の日記を眺めていたら、alphaTest なるプロパティを変更したら改善された、とメモしてあった。

_mieki256's diary - three.jsでビルボード相当を実現その2

そんなわけで、そのあたりの記述を追加してみた版が以下。

_03_draw_billboard_alpha_test.py

実際には、以下のような行を追加している。
    glAlphaFunc(GL_GREATER, 0.5)
    glEnable(GL_ALPHA_TEST)

    # draw billboard ...

    glDisable(GL_ALPHA_TEST)

これはどういう指定かというと…。
  • glEnable(GL_ALPHA_TEST) や glDisable(GL_ALPHA_TEST) は、alpha test という処理を有効化/無効化している。
  • glAlphaFunc(GL_GREATER, 0.5) は、アルファチャンネルのしきい値を設定している。
この場合、アルファチャンネルの値が 0.5 より大きければそのドットは描画されるし、0.5より小さければそのドットは無視される。描画対象にするのか、しないのか、つまりは二値化している模様。

実行してみたところ、以下のような感じになった。




ちゃんとそれっぽく描画されている。この指定で、一応問題は解決すると分かった。

ただ、アルファチャンネルを2値化してるも同然なので…。アルファチャンネルがグラデーションを持っていても反映されないというか、縁の部分がジャギってるような見た目になりそうではあるなと…。

もっとも、画面を見た感じでは、それぞれ拡大縮小されるからジャギってるかどうかなんて正直よく分からん、という印象も受けた。これでも特に問題無さそうだよな…。

ビルボードを奥行きでソートして描画。 :

他の方法がないかググったところ、本来こういったものは、奥から手前に向けて重ね塗りしていくのが正しい(?)やり方、という話を見かけた。

そんなわけで、ビルボードの位置に基づいて、ソートしてから描画していく方法も試してみた。

_04_draw_billboard_sort.py

そのあたりの処理をしているのは、以下の部分。ちなみに、カメラとビルボードの距離を使ってソートする方法と、変換行列内の平行移動成分を使ってソートする方法、その2つを試してみた。この程度のサンプルなら、どちらを使っても結果はさほど変わらなかった。
    if USE_DEPTHMASK:
        glDepthMask(GL_TRUE)
        glDepthFunc(GL_LESS)
    else:
        glDepthMask(GL_FALSE)
        glDepthFunc(GL_LEQUAL)

    # record position
    pos = []
    for i in range(0, 300, 20):
        x = 5.0 * math.cos(math.radians(i))
        y = 0.0
        z = 5.0 * math.sin(math.radians(i))

        if GET_DISTANCE:
            # get distance from camera to billboard
            dx = x - cam_pos[0]
            dy = y - cam_pos[1]
            dz = z - cam_pos[2]
            dist = dx * dx + dy * dy + dz * dz
            pos.append([x, y, z, dist])
        else:
            # get z value
            glPushMatrix()
            glTranslatef(x, y, z)  # translate
            
            m = glGetDoublev(GL_MODELVIEW_MATRIX)
            tx, ty, tz = m[3][0], m[3][1], m[3][2]
            
            pos.append([x, y, z, tz])
            glPopMatrix()

    # sort billboard
    s_pos = sorted(pos, key=lambda x: x[3])
    
    if GET_DISTANCE:
        s_pos.reverse()

    for p in s_pos:
        x, y, z, _ = p
        
        # draw billboard

動作させてみたところ、以下のような見た目になった。




たしかに、描画しようとしているポリゴン群を、事前に奥行きでソートしておいて、奥のほうから手前に向かって描画していくことでも解決できそうだと分かった。

もっとも、これはまだビルボードの数が少ないから問題にならないけれど、枚数が多くなれば処理の負荷も増えてしまって、よろしくない状態になりそうではあるなと…。

透明部分がおかしくなる理由。 :

以下のページで、何故透明部分がおかしくなるのか、図で説明されていたのでメモ。

_Alpha/Transparency Sorting, Your Z-buffer, and You - Documentation - jMonkeyEngine Hub

また、以下のページで、描画がおかしい時に確認すべきことがまとめてあった。ありがたや。GL_ALPHA_TEST についても触れられている。

_DirectXとOpenGLで描画がおかしい時に考えること - TECOの技術研究室

2021/09/21(火) [n年前の日記]

#1 [love2d] love2dでテクスチャ付きポリゴンを歪めずに描画したい。その4

love2d 11.3 上で、テクスチャ付きポリゴンを描画したい。できれば四角形を歪ませない状態で描画したい。

公式フォーラムに投稿されていた、Shaderを使って実現する Perspective.lua を、love2d 11.3 で動作するように修正してみたわけだけど。

_Textured Polygons for All! - LoVE
_Textured Polygons for All! - Page 13 - LOVE
_love2dでテクスチャ付きポリゴンを歪めずに描画したい。その3

例えば、長方形を描画する rectangle() を使う直前に、シェーダを Perspective.lua で用意したソレに切り替えれば、長方形の中身をテクスチャ付きポリゴンっぽい感じで描画できたりするのではないかと思いついたわけで…。本当にそんな結果になるのか気になったので試してみた。

以下のような感じになった。




ウインドウの下半分を rectangle() で描画する直前に、Perspective.lua 内のシェーダに切り替えてる。緑色の部分がシェーダに渡している四角形の頂点情報。パースがつくような形で頂点情報を渡しているので、rectangle() で描画する際の各ピクセルもパースがついたような見た目で描画されてる。みたいな。

ソースと使用画像は以下。

_main.lua
_conf.lua
_perspective.lua
_shader.fs
_scifitex02_tex.png
_uvcheckermap01-512.png

一応 .zip も置いときます。

_01_perspective.zip

.zip を .love にリネームして、以下を打てば実行できるはず。
love 01_perspective.love

とりあえず、こういった見た目については色々な方法で実現できそうだなと…。

_love2dで疑似ラスタスクロールを使って立体的な見た目にできるか試した
_love2dのShaderを使って某STGのアレ

love.jsでは動かなかった。 :

love.js を使ってWebブラウザ上で動かせないか試したけど、どうやら Shader/GLSL を使ったものは変換できないっぽい。出力された .html + .js を開いてみたけどエラーが出て動いてくれなかった。

以前は動いていたという話もあるらしいのだけど…。

_love.js supports shader? - LoVE

いや、よく読んでみると、やっぱり動かないみたいだな…。Shader を使うとWebブラウザ上では動かなくなると思っておいたほうがいいのだろう…。

2020/09/21(月) [n年前の日記]

#1 [raspberrypi] Raspberry Pi Zero W上で wolfram-engine が更新できない

Raspberry Pi Zero W を久々に起動して sudo apt update と sudo apt upgrade をしたら、wolfram-engine とやらの更新で処理が全く先に進まない状態になってしまった。OS は Raspbian buster。

wolfram-engine ってなんやねん。Mathematica なる数学関係の何かを動かすためのものらしい。パッケージサイズが600MB以上あるけれど、Raspberry Pi Zero W はメモリが512MBしかないわけで…。しかも、CPUも非力極まりない Raspberry Pi Zero W でそんなものを動かす機会が今後あるかと考えると、たぶんないだろうなと思えてきたので、この際アンインストールすることにした。

_Raspberry Pi 不要パッケージの削除 - Qiita
_(101) Raspberry Piで upgradeに時間のかかる不要なパッケージを削除する。 - Linuxやってみる!

sudo apt purge wolfram-engine

もし使いたくなったら、Raspberry Pi 3 も持ってることだし、そっちで動かせばいいよな…。

さておき。さすが非力な Raspberry Pi Zero W。更新に時間がかかる。何時間かかるんだ…。いや、滅多に起動しない自分が悪いんだけど…。

Sonic Pi や Scratch もアンインストールした。 :

ふとなんとなく、Raspberry Pi Zero W 上で Sonic Pi を起動してみたら、スプラッシュ画面が表示されたまま固まってしまった。これも重過ぎるということかな…。アンインストールしておこう…。

たしか Scratch も Raspberry Pi Zero W 上では RAM が足りなくてほとんど動かないと聞いた記憶もあるような。そっちもアンインストールしておくか…。
sudo apt purge sonic-pi scratch scratch2 scratch3
sudo apt autoremove

以下のページによると、Scratch を動かすには RAM 2GB が推奨らしい…。Raspberry Pi 3系ですら RAM 1GB なので厳しいのではないか…。まして Raspberry Pi Zero W なんて RAM 512MB しかないわけで。

_Raspberry Pi 3B+ に Scratch3のパッケージ版を今更ながらインストールして立ち上げてみたお話
_Scratch デスクトップ - Japanese Scratch-Wiki

2019/09/21() [n年前の日記]

#1 [nitijyou] お腹が痛い

腹が痛くて一日中寝てた…。

2018/09/21(金) [n年前の日記]

#1 [blender] blenderを使ってエフェクト作成の勉強

blender 2.79b を使ってエフェクト作成の勉強。以下の記事を参考して作業。

_Blenderで作るエフェクト - Blender解説ページ
_制作例 19: Blenderで舞う花びらの表現 - tomo@web

以下のような感じの動画が得られた。

フォースフィールドの「渦」を設定した作例。



フォースフィールドの「調和」を設定した作例。



光球っぽいエフェクト。



花びらを降らせる。フォースフィールドの「風」を設定。



なんとなくだけど、動作が軽い2D的なツールでも作れそうなエフェクト群に思えたりもして…。もちろん、カメラが移動する場合は3D的に位置合わせができる3DCGソフトで作業したほうが良さそうだけど、カメラが固定で、光源の反映等はしない場合は、2D系のツールでも、みたいな。

フォースフィールドについて。 :

_フォースフィールド について動作を確認しようとしたのだけど、設定の仕方が分からなくて。

オブジェクトの追加で、設定できたのだな…。追加 → フォースフィールド → 種類を選択、みたいな。ていうか前述の記事にもちゃんと書いてあったのに見過ごしてた。トホ。

mp4出力。 :

blender で mp4 を直接出力する方法が分からなかったけど、「FFmpeg動画」を選択すると「エンコーディング」という設定項目が増えて、その中で mp4 を選べる、と分かったのでメモ。プリセットの中から「h264 in mp4」を選べばざっくりと設定してくれる。

output_mp4_ss.png

2017/09/21(木) [n年前の日記]

#1 [pi3d][python][raspberrypi] pi3dでキーボード入力をチェックするあたりがなんとかなったかも

pi3dでキーボード入力をチェックすると、「タッ……タタタタ」となったり、同時押しが検出できなかったりした件について。pi3d.InputEvents を使って、少しはマシになるような処理を書いてみたり。

一応、Windows、Ubuntu Linux 、Raspberry Pi Zero W上で、同じように動くことを確認できた。と言っても、Windowsはpygameを、Linux と Raspberry Pi は pi3d.InputEvents を使うように処理を分けてあるけど。

以下は、Raspberry Pi Zero W 上で撮ったスクリーンショット。ホントは動画で見せないと動きが伝わらないけど、デスクトップを動画としてキャプチャする方法が分からない…。でもまあ、とりあえず、画面が出てることぐらいの証拠にはなる…かな…。ちなみにキャプチャには、 _raspi2png を使った。

get_keyboard3_ss_raspi0.png

以下は、Ubuntu Linux 16.04 実機上で動かした際の様子を動画でキャプチャ。キャプチャには、 _SimpleScreenRecorder を使った。



「タッ……タタタタ」な動きになってないこと、及び、斜め移動ができてる=キーの同時押しを検出できてることぐらいは伝わるかなと。

ソース。 :

以下、WASDキーかカーソルキーで、スプライトを動かすだけのスクリプト。ESCで終了。

_get_keyboard3.py
_airplane_01_64x64.png
u"""
pi3d input keyboard with pygame or InputEvents sample.

Sample script to get keyboard input.
Move the sprite up, down, left and right with WASD key or cursor key.

use pygame.key.get_pressed / pi3d.InputEvents.

Press ESC key to exit.

Windows10 x64 + Python 2.7.12 32bit + pi3d 2.21 + pygame 1.9.3

Author : mieki256
License : CC0
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import pi3d
import pygame


class KeyboardStatus(object):
    u"""Keyboard status."""

    # referenc :
    # pi3d/event/Keys.py
    # https://www.pygame.org/docs/ref/key.html
    keys_list = {
        "KEY_ESC": pygame.K_ESCAPE,
        "KEY_A": pygame.K_a, "KEY_B": pygame.K_b, "KEY_C": pygame.K_c,
        "KEY_D": pygame.K_d, "KEY_E": pygame.K_e, "KEY_F": pygame.K_f,
        "KEY_G": pygame.K_g, "KEY_H": pygame.K_h, "KEY_I": pygame.K_i,
        "KEY_J": pygame.K_j, "KEY_K": pygame.K_k, "KEY_L": pygame.K_l,
        "KEY_M": pygame.K_m, "KEY_N": pygame.K_n, "KEY_O": pygame.K_o,
        "KEY_P": pygame.K_p, "KEY_Q": pygame.K_q, "KEY_R": pygame.K_r,
        "KEY_S": pygame.K_s, "KEY_T": pygame.K_t, "KEY_U": pygame.K_u,
        "KEY_V": pygame.K_v, "KEY_W": pygame.K_w, "KEY_X": pygame.K_x,
        "KEY_Y": pygame.K_y, "KEY_Z": pygame.K_z,
        "KEY_0": pygame.K_0, "KEY_1": pygame.K_1, "KEY_2": pygame.K_2,
        "KEY_3": pygame.K_3, "KEY_4": pygame.K_4, "KEY_5": pygame.K_5,
        "KEY_6": pygame.K_6, "KEY_7": pygame.K_7, "KEY_8": pygame.K_8,
        "KEY_9": pygame.K_9,
        "KEY_UP": pygame.K_UP, "KEY_DOWN": pygame.K_DOWN,
        "KEY_LEFT": pygame.K_LEFT, "KEY_RIGHT": pygame.K_RIGHT,
        "KEY_SPACE": pygame.K_SPACE
    }

    class PygameKeyStatus(object):
        u"""Keyboard status with pygame."""

        def __init__(self):
            """Init."""
            pygame.init()

        def update(self):
            """Update."""
            pygame.event.pump()
            self.keys = pygame.key.get_pressed()
            pygame.event.clear()

        def key_pressed(self, key_str):
            """Get key press state.

            @param key_str key kind string
            @return True or False

            """
            return self.keys[KeyboardStatus.keys_list[key_str]]

        def close(self):
            """Close."""
            pygame.quit()

    class Pi3dInputKeyState(object):
        """Keyboard status width pi3d.InputEvents."""

        def __init__(self):
            """Init."""
            self.inputs = pi3d.InputEvents()

        def update(self):
            """Update."""
            self.inputs.do_input_events()

        def key_pressed(self, key_str):
            """Get key press state.

            @param key_str key kind string
            @return True or False

            """
            return (self.inputs.key_state(key_str) != 0)

        def close(self):
            """Close."""
            pass

    def __init__(self):
        """Init."""
        self.keyboard = pi3d.Keyboard()
        if pi3d.USE_PYGAME:
            self.state = KeyboardStatus.PygameKeyStatus()
        else:
            self.state = KeyboardStatus.Pi3dInputKeyState()

    def update(self):
        """Update."""
        self.pikey = self.keyboard.read()
        self.state.update()

    def key_pressed(self, key_str):
        """Key press check.

        @param key_str key kind
        @return True or False

        """
        return self.state.key_pressed(key_str)

    def esckey_pressed(self):
        """ESC key press check.

        @return True or False

        """
        return (self.pikey == 27 or self.key_pressed("KEY_ESC"))

    def close(self):
        u"""Close."""
        self.keyboard.close()
        self.state.close()


display = pi3d.Display.create(w=640, h=480, frames_per_second=60)
shader = pi3d.Shader("uv_flat")
camera = pi3d.Camera(is_3d=False)

x, y, z = 0.0, 0.0, 20.0
tex = pi3d.Texture("airplane_01_64x64.png", mipmap=False)
spr = pi3d.ImageSprite(tex, shader, w=64, h=64, x=x, y=y, z=z)
display.add_sprites(spr)

inputs = KeyboardStatus()

while display.loop_running():
    inputs.update()

    spd = 6.0

    if inputs.key_pressed("KEY_W") or inputs.key_pressed("KEY_UP"):
        spr.translateY(spd)
    if inputs.key_pressed("KEY_S") or inputs.key_pressed("KEY_DOWN"):
        spr.translateY(-spd)

    if inputs.key_pressed("KEY_A") or inputs.key_pressed("KEY_LEFT"):
        spr.translateX(-spd)
    if inputs.key_pressed("KEY_D") or inputs.key_pressed("KEY_RIGHT"):
        spr.translateX(spd)

    if inputs.esckey_pressed():
        inputs.close()
        display.destroy()
        break

少し説明しておくと…。

pi3d を import して pi3d.Display.create() で初期化をすると、pi3d.USE_PYGAME という変数に値が設定される。pygame を使ってたら True、使ってなかったら False。

なので、その変数を見て、pygame を使ってたら pygame でキーボード情報を取得。pygame を使ってなかったら pi3d.InputEvents でキーボード情報を取得するようなクラスを作成した。

上記のソースでは、KeyboardStatusクラスの中で、pygameを利用するクラスと、pi3d.InputEvents を利用するクラスの2つを用意して、pi3d.USE_PYGAME を見てどちらかを選んでる。

問題点。 :

pygameを利用した場合はコレと言って問題はないのだけど。pi3d.InputEvents を利用した場合は少々問題があって。OSの、キーボード入力やマウス入力を、全部奪ってしまうっぽいのだよな…。なので、以下のような怖い状態に。
  • Ctrl + C を押してもスクリプトが止まってくれない。
  • マウスを動かしてもマウスカーソルが動かないから、ウインドウの閉じるボタンを押せない。
更に、pi3.InputEvents を使うと、pi3d.Keyboard、pi3d.Keyboard.read() が働かなくなるような気がする。

であるから、何かしらのキーを押せばスクリプトが終了するような処理を、必ず、絶対、メインループに入れておかないといけない。それをうっかり忘れてスクリプトを動かしたが最後、デスクトップの操作が一切できなくなるので、電源コンセントを引っこ抜いて強制終了、てなことになる。

てな怖さを考えると…。pi3d が pygame を使えない状態にしてしまう Raspberry Pi上では仕方ないとしても、せめて Linux上で動かすときは、pygame を使って動くスクリプトを書いたほうがいいのでは、と思えたりもして。

ちなみに、pygame を使いたい場合は、pi3d.Display.create() に use_pygame=True を渡せばいい。

_pi3d Package - pi3d 2.21 documentation

pi3d は、現状、以下のような処理をしてる模様。
  • Windows上で動かす場合は、何も指定しなくても pygame が有効になる。
  • Raspberry Pi上で動かす場合は、指定しても pygame が無効になる。
  • Linux上で動かす場合は、指定によって pygame の有効/無効が変わる。

#2 [raspberrypi] Raspberry Pi Zero Wにデスクトップキャプチャツールをインストールしてみたり

Raspberry Pi Zero W 上で、デスクトップをキャプチャしたいなと。ただ、X Windowアプリをキャプチャできるツールの類では、OpenGL ESを使ってるアプリの画面をキャプチャできなくて。Raspberry Pi は、X Window と EGL が繋がってないので…。

ググってみたら、raspi2png なるツールを使えば、OpenGL ESの画面もキャプチャできるようで。

_Raspberry Pi でスクリーンショット | Raspberry Pi
_AndrewFromMelbourne/raspi2png

インストールしてみたり。
sudo apt install libpng12-dev
mkdir ~/Package
cd ~/Package
git clone https://github.com/AndrewFromMelbourne/raspi2png.git
cd raspi2png
make
sudo cp raspi2png /usr/local/bin

使い方は…。

scrotもインストール。 :

X Windowアプリをキャプチャしたいだけなら、scrotなるツールが使えるらしい。

_ラズベリーパイ3の簡単な動作確認 - やってみる

sudo apt-get install scrot

む。既に入ってた。どこかの段階で、自分で入れたのか、それともデフォルトで入っていたのか、どっちなんだろう…。忘れた…。

2016/09/21(水) [n年前の日記]

#1 [pc] お袋さん用ノートPCのメンテナンスがやっと終了

メンテナンスと言ってもドライバーを最新版にしたり、Windows Updateをしたりとその程度だけど。ようやく終わった…。一昨日から始めて今頃終わるってどうなの。

#2 [anime] 「甘々と稲妻」最終回を視聴

漫画が原作のアニメ作品。妻を亡くした学校の先生が幼い娘を男手一つで育てていく過程で、教え子の女子高生(?)と料理を通じて親交を深める、という話でいいのかな。

いつもと同じ感じで淡々と進んでいったので最終回と気づかないまま見終わってしまった。イイ感じ。最終回だからと妙な盛り上げ方・普段と違うイベントを無理して盛り込まないほうがしっくりくるアニメってあるよなと。もっとも、それぞれがどういう作品なのかを見極めるあたりが難しそうではあるけど。

全体的な感想だけど、幼女の表情の豊かさがお気に入りだったり。もちろん原作のコマに描かれていた表情を拾っているのだろうけど、これは手描きならでは、だなと。3DCGでこういう表情を見せるのは難しい。 *1 故に、手描きの強みを活かした作品だったと言えるのではないかと。

不思議な踊りや謎の歌を披露する幼女の図もよかった。「クレヨンしんちゃん」を思い出したりもして。もしかすると原作者は実物(?)を観察できる機会に恵まれているのだろうか。あるいは、あくまで既存作品内での各種描写にインスパイアされてこういう描写を入れていたのだろうか。何にせよ、よくまあそれらのアクションに気づいたなと。

一般的なフツーのアニメにおいては、幼児の描写はえてして類型的なソレに留まることが多くて。1stガンダムの、カツ・レツ・キッカだって、リアルな幼児らしさがあるかと言えばちょっとビミョーだし、ましてラノベ原作のアニメ作品などは見るも無残な描写になるし。大人から知識を削って我儘度合を増してサイズを小さくしただけ、てな幼児ではちょっと…。ソレを考えると、「うさぎドロップ」もそうだったし、この作品もそうだけど、よく観察して描写したなと感心せずにはいられない。「となりのトトロ」を作った宮崎駿監督が言うところの「観察が大事」てのはこういうことなんだろうなと。

それはともかく、どこかで誰かがこの作品を「Papa told meモノ」と称していて、なんだか納得してしまったり。そういうジャンルが既に確立しつつあるのか…。例えば「うさぎドロップ」も、この作品も、「Papa told me」というジャンルに含まれる作品群の一つ、なのだなと。

何にせよ、かなりイイ感じの作品だったような気がしました。なんというか、見ていて癒される系のアニメだったなと。
*1: 3DCGでやるとしても表情をテクスチャとして描いちゃう、という形になるのではないかと予想。

2015/09/21(月) [n年前の日記]

#1 [javascript] ActionScriptやJavaScriptで四角形の自由変形ができるか調べてたり

矩形を自由変形させて多関節処理っぽいことができないかなと。そのためには各頂点をどう動かすか指定するツールが欲しいよなと。そういうツールを作るとしたら何を使うのがいいだろう。FlashやJavaScript等を使えばOSが違っても使えるかも、と。

しかしそもそも、ActionScriptやJavaScriptでテクスチャを貼った四角形ってどうやって描画できるのか、そこからして知らないのでググってたり。

以下のページが参考になりそうだなと…。

_drawTrianglesであそぼ1 -とりあえず使ってみる | _level0 - KAYAC Front Engineer Blog
_第45回 領域をビットマップで塗る − テクスチャマッピング:ActionScript 3.0で始めるオブジェクト指向スクリプティング|gihyo.jp … 技術評論社
_第46回 分割した三角形にビットマップを変形して塗る:ActionScript 3.0で始めるオブジェクト指向スクリプティング|gihyo.jp … 技術評論社
_四角形の自由変形
_[AS3.0] drawTriangles()メソッド! (1) | にゃあプロジェクト
_Canvasによる3Dテクスチャマッピングとパフォーマンスチューニング(仮題) - 2009-02-11 - 最速チュパカブラ研究会
_canvasを使って知識ゼロから独学してみた「エセ」テクスチャマッピング入門以前編 | 秋葉秀樹個人ブログ
_テクスチャマッピングを理解してみる その2 - デジタル・デザイン・ラボラトリーな日々
_テクスチャマッピング入門 - jsdo.it - Share JavaScript, HTML5 and CSS
_テクスチャマッピング入門 メッシュ編 - jsdo.it - Share JavaScript, HTML5 and CSS

ActionScript の場合は、drawTriangles という、三角形を描画できるメソッドがあるらしい。ソレを使って、三角形2つを描画すれば四角形を描画できるやろと。

JavaScriptの場合は、四角形の各頂点を自由に移動して自由変形するメソッドはナサゲ。ただ、一旦は四角形を回転・傾斜して、三角形に見えるようにclipしてやることで三角形が描画できるらしく。ソレを使って三角形2つを描画すれば四角形を描画できるやろ、ということらしい。

JavaScriptでも三角ポリゴンが一応描画できるなら、Flash・ActionScriptのノリで使える CreateJS にも drawTriangles が用意されてるのかな、と思いきや、CreateJS にはそういうメソッドが見当たらず。どうやら自分で実装しないといかんらしい。

何にせよ、JavaScript で四角形の自由変形、というよりテクスチャを貼った三角形の描画は、メソッドを呼んでハイ終わりというわけではないっぽいなと。

となると、その手の多関節スプライトエディタが、各パーツの回転拡大縮小ぐらいしかサポートしてないのは仕方ないのかもしれないと思えてきたり。ポリゴンの頂点を動かして云々のやり方では、実機(?)上でリアルタイムに描画するまでがちと面倒だからサポートしなくてもええやろ、と判断されたりしそうだなと。

ただ、今時のブラウザなら WebGL が使えるやろと。WebGL ならテクスチャを貼った三角形ポリゴン、あるいは四角形ポリゴンを描画できるだろうから、四角形の自由変形もやりやすいのではないのか、という疑問も。

と思って WebGL についてググってみたけど、検索キーワードが悪いのか、それらしい情報に辿り着けず。

#2 [nitijyou] RD-BZ710が「処理中」と表示されたままフリーズ

リモコン操作で電源を入れたら、画面の右上に「処理中」 *1 と表示されたまま、TV映像がピタッと止まっていて。フリーズ、キタコレ。さすが東芝のデジタル製品やで…。

マニュアル(操作編)の最後のあたり(148ページ)を見たら、

「15分ほどそのまま待ってくれ。運が良ければ復帰するかもしれん」
「15分経っても変化が無かったら…最後の手段や。本体電源ボタンを10秒以上押してくれ。電源が切れるはずや。録画データ吹っ飛んでるかもしれんけどな」
「電源が切れたか? なら、数分放置して、それから電源入れ直してくれ」
「10秒押しで電源が切れない? ああ、もう何もかもパーや。コンセント引っこ抜いて修理に出してくれ。もちろん録画データも全部パーやけどな」

と書いてあった。

20分待ってみたけど変化無し。仕方ない。本体電源ボタンを10秒押しっぱなし。一応、電源は切れてくれた。

10分ぐらい置いてから、電源再投入。…電源が入ってくれた。助かった。パッと見た感じ、録画データも残ってそう。

とりあえず…。今までは、面白そうな番組は後でじっくり、と思って消化を後回しにしてたけど。そういう番組からどんどん再生・消化していこうかと。いつまた、こんなことになるか分からんし。

せっかく録画用PCがあるんだから、そっちを使って録画したほうが安心なのかも…。いや、いつでも必ず残ってると思い込むと、ますます溜まる一方な予感も…。うーん。
*1: 「処理中」じゃなくて「準備中」だっただろうか…。記憶が怪しい。

#3 [neta] AppleはFlashを殺したのだから同じ理由でWeb広告も殺さないと

只の思考メモ、というより妄想メモです。

なんでも、Apple がiOS9版Safari に広告ブロック機能をつけた、という話を見かけて。実際は標準で有効になるわけではなく、何かアプリを買わないとブロックできないらしいので、別に気にする話じゃなさそうだな、そこまでやる人はそんなに居ないんじゃないの、と自分は思ったのですけど。

ただ、その話を見かけて、Flashのことを思い出してしまったわけで。

Apple が Flash を殺しにかかってきた理由の一つとして…

「Webページ上にFlashがベタベタ貼ってあると、スマホのバッテリー消費が激しくなるから」

てのがあったよなと。もちろん、Flashを提供してるAdobeは、「いやいやちょっと待って。そんなの微々たるもんだよ。言いがかりだよ」と必死に反論してたけど、Appleはそんな反論なんてスルーして。

飛ぶ鳥を落とす勢いで売れていったiPhoneがFlash排除に動いたから、Web上のアレコレを作ってた人達も「iPhoneで動かないのは困る」と皆がFlash排除に流れて。結果「Webページ上のFlash」はAppleの扇動により大虐殺されてしまったわけですけど。 *1

しかし元々、Webページ上のFlashがバッテリーを馬鹿食いしていたのは、CPUパワーを馬鹿食いするアホな作りの糞重いFlash広告が粗製濫造された上に、ページ上にベタベタと貼られてしまったからだよなと。

そして、Flashを使って糞重い広告、糞重いサイトを作ってた人達は、今度は HTML5 + JavaScript でCPUパワーを馬鹿食いする糞重い広告を粗製濫造し始めて。それがまたWebページ上にベタベタと貼られまくられる…。今はそんな状況になってきているわけで。

であれば。Apple が Flashを殺した理由が、本当の本当に、「スマホのバッテリーに厳しいから」なのだとしたら。これは同じ刀で、Web広告もAppleからバッサリ叩き斬られないと、ちょっと話の筋が通らないよなー、と自分は思ってしまったのでした。Flashを殺したんだから、Web広告も殺さないとおかしい。そうはならなかったら、いわゆるダブルスタンダードになっちゃうよと。 *2

それとはまた別に。

Appleが新製品を出す時に重視してる要素として、「今までにない新しいユーザ体験」てのがあるわけで。オシャレなスマホのデザインもそうだろうし、ヒュンヒュン動く画面もそうだろうし、「ナニコレ! 新しい!」と道行く人に思わせることで、Appleは自社製品を大衆にガンガン売り込んできたわけで。

ところが、糞重いWeb広告の類って、そのAppleの方針に一切何の寄与もしていない。それどころか、旧来の広告ベタベタ貼りまくりの見苦しいWebページをドーンとユーザに届けてしまう。

せっかくAppleがオサレアイテムの開発に血道を上げてピッカピカの製品を出してきているのに、その結果にウンコを塗りつけてきやがるのがWeb広告ですよ。そりゃAppleも、できることならこんなウンコ共は綺麗に洗い流してしまいたいとフツーは考えるんじゃないかなー、と。自分達の努力の結晶を糞まみれにされるんだから存在すら許しがたい、と思いそうなものですが。さて、どうなんだろ。

さておき、じゃあ広告を作ってる側・貼ってる側は、どうすればいいのかなと。

簡単な話かもしれんなと。軽くて、目障りにならず、しかしちゃんと集客効果が見込める ―― 要は、よく出来たグッドな広告を作りましょう、Appleのユーザ体験とやらに負けないぐらいオサレなサイトを作ってやろうと心掛ければいいだけじゃないのかと。広告とは何なのか、どうあるべきなのか、原点に立ち戻って考えてみればいいだけの話、かもしれんよなと。

が、しかし、「広告ブロックしてたらコンテンツを非表示にするJavaScriptを書いてやったぜ!」とか言い出しちゃうのが今のWebの人達で。なんだかなーと思ったりしました。Appleが重要視して、そのことで実績を上げてる「ユーザ体験」とやらの視点で見たらソレってどうなんだろ。そりゃAppleも、広告ブロック機能つけないとあかんかもしれん、って思うわなと。 *3

まあ、只の思考メモです。どうせそのへん、なるようにしかならんし…。TVだって、昔は色々なやり方で局を成立させようとしてたけど、生き残ったのは今のやり方なわけで。例えばTV東京だって、昔は教育専門局だったのに、今は…。結局、どの業界も自然淘汰と言うか、なるようにしかならんのだろう、などと思っていたり。

余談。 :

またちょっと別の話だけど。

一時期、はてブのコメント欄で、何かというと「Flashは死ね」とコメントしてる人達を見かけていたのですけど。もしもその人達が「閲覧者側」だとすれば、今回も同じノリで「Web広告は死ね」とコメントしてないとおかしいよな、と思ったのですけど、何故かそういうコメントって見かけないんですよね…。どういう種類の人が「Flashは死ね」と言いまくってたんだろう。彼等は、どんなポジションの人なんだろう。そのあたり、なんだか謎だなと。彼等は一体何者だったのか…。

2015/09/24追記。 :

ネットを眺めてたら「Apple様が御提供してる広告配信サービス iAdを使えってことだよ」「Google潰しだよ」という話を見かけて膝を打ちました。Appleの動きに納得。商売上手(?)だなあ。

*1: 「アニメ制作ツールとしてのFlash」は存続してるので…。あくまで「Webページ上のFlash」は死んだという話で。Flashと言っても色々あるからややこしいですね。
*2: ただ、自分は、Apple/ジョブズが言ってた「スマホのバッテリーが」は言いがかりだろうなと思っていて。Appleにとって、AdobeのFlashを殺さねばならない真の理由が他にあったのではと邪推してますので、Flashは殺したけどWeb広告は殺さない展開になったとしても、「ああ、やっぱり。バッテリーどうこうは嘘だったんだね…。Apple、汚ねえなあ」と思うだけなのですけど。
*3: ただ、その、「広告ブロックしてたらコンテンツを非表示に」を公開してるブログ自身は、そのJavaScriptを導入してないのですよね…。要するに、そのスクリプトを安易に使うブロガーが増えれば、それはユーザにページそのものを見せない=広告云々どころではない自爆行為なわけで、つまりは頭の悪いライバルがどんどんWeb上から勝手に消えてくれるから、その人にとってはウハウハヒャッホー、なのだよなと。上手いこと考えるもんだなと感心しました。

#4 [zatta] 犬の視点、人間の視点

ここのところ、朝夕の犬の散歩をしてるのだけど。時々、犬が、妙な方向に行きたがる場面があって。「おいおい、君はどこに行こうとしてるのだ。そっちじゃないぞ」みたいな。

考えてみれば…。犬は背が低いから、目の前に草むらや壁があったら、その向こう側は見えなくなるのだよなと。しかし人間は、犬より背が高いから、草むらや壁の向こうに道があることが分かる。

人間自身も同じだろうなと。知識や経験を豊富に持っている人、思慮深い人は、視点が高いというか、遠くまで見通せるので、進むべき道が分かる。知識や経験が無い人、浅い考えしかできない人は、目先の事しか見えない。道が分からなくて変な方向に進んじゃう。…まあ、自分は絶対後者だろうなと思いますが。

オチは無いです。犬の散歩中に、ただそんなことを思ってしまったのでメモ。

犬は犬で、別にソレでも全然楽しそうですけど。一体何がそこにあるのか分からんけど、クンクンクンクンといつまでも。そしてこっちを向いてニカッと。一体何が楽しいのか…。どんな匂いがそこにあるのか…。分からん…。

2014/09/21() [n年前の日記]

#1 [pc] LyX、TeXstudio、Texmakerを少しだけ試用

TeX/LaTeX文書の入力に特化したアプリをいくつか試用。

LyXを試用。 :

LaTeX文書をGUIで書ける LyX なるアプリがあるらしいので、Windows7上で試しにインストール。

_LyX | ダウンロード から、インストーラー版の LyX-2.1.1-Installer-1.exe をDLして実行。C:\Users\ユーザ名\AppData\Local\LyX 2.1\ にインストールされた。なんだか妙なところにインストールするなあ…。

日本語文書を記述するためには、色々設定しておかないといかんらしい。以下のページを参考にして初期設定。

_LyX/設定 - TeX Wiki
_LyX/設定/Windows - TeX Wiki

めちゃくちゃ設定項目が多い…。結構大変。せめて、~/.lyx を修正して、みたいなノリで作業できないのかな…。GUIで一つ一つ設定していくのはシンドイ…。設定できたかな、と思って文章を打ってプレビューしてみてもエラー続出。まだまだ設定の抜けがあったらしい…。

とりあえずあらかた設定できた気がするので、しばらく動作確認をしてみたけれど。そこそこワープロ感覚で使えるあたりはイイ感じ。

と思ったけど、そうでもなかった。例えば水平線を挿入したいと思っても、期待通りの場所に入ってくれない。また、時々、何故か空行が勝手に削除されたりして。まあ、この手のツールの常として、Wordあたりもそうだけど、「え? なんでそういう動作をするの?」「こういうことをしたいのだけど、どうすれば」と悩む瞬間がチラホラ。

とは言え、TeX/LaTeXの文法・コマンドについて全然知らない人でも、ある程度はLaTeX文書を書いていけそうな印象ではあったり。「LaTeX文書を書け」と無理矢理周囲から強制された時は、とりあえずコレを使えば、という気もする。

でもやっぱり、Word や OpenOffice/LibreOffice を使ったほうがいいんじゃないかな…。LyXは初期設定がとにかく面倒だし…。インストールしたらすぐ使えるという状態では全然無いし…。

とりあえず、なんとなく雰囲気は分かったのでアンインストール。

TeXstudioを試用。 :

TeXのタグエディタみたいな感じのアプリらしい。試しにインストール。

_TeXstudio から、texstudio2.8.4_win_qt5.3.1.exe をDLして実行。インストーラが起動する。

以下を参考に設定。

_TeXstudio - TeX Wiki
_TeXstudio/設定 - TeX Wiki
_TeXstudio/設定/Windows - TeX Wiki

とりあえず設定できたと思うので入力作業をしてみたのだけど、どうも日本語入力時に妙な動作が…。変換確定した文字列が二重に挿入される時がちらほら。

動作がどうも怪しいのでアンインストール。入力補完候補をポップアップで表示してくれるあたりはイイ感じだったのだけど。

Texmakerを試用。 :

TeXstudioの前身となったタグエディタ、らしい。試しにインストール。

_Texmaker (free cross-platform latex editor) から、texmakerwin32_install.exe をDL・実行・インストール。現バージョンは4.3らしい。

_TexmakerでTeX文書を書こう! から日本語化キット texmaker_jp.qm4texmaker4.0.1_20130306.zip をDLして解凍。.qm ファイルを Texmaker のインストールフォルダにコピー。

以下を参考にして設定。

_Texmaker/設定 - TeX Wiki
_Texmaker/設定/Windows - TeX Wiki

件の解説ページで言及されてるけど、手元の環境でもIME使用中に変換文字列が見えなくなってしまったので、ダークテーマを選択。

少し触ってみた感じでは、TeXstudio に見られた怪しい動作は、Texmaker では見られなかった。また、TeX Live インストール時に同梱されていた _TeXworks より、こっちのほうがとっつきやすい、ような気もする。

TeXWorksにテンプレートを追加。 :

日本語文書用のテンプレートを追加しておけば、新規文書作成時に楽になるのかなと思えてきたので試したり。 _TeXworks のテンプレートに日本語の雛形を入れてみました - I’m just another TeXnician. から辿って、 _munepi/texworks-templates-japanese - GitHub に飛んで、zip をDLして解凍。Japanese documents フォルダ毎、Windows の場合は、C:\Users\ユーザ名\.texlive2014\texmf-config\texworks\templates\ 以下にコピーすればいいのかな? 一応 TeXWorks のテンプレートリストには出てきているけど。

件のフォルダ内に、自分で .tex を作ってもいいらしい。

#2 [anime] アルドノア・ゼロ1期最終回を視聴

面白かった…。

以下、ネタバレで感想をメモ。

敵側ロボット。 :

全部盛りのロボットが出てきて、ラスボス感あるなあ、こりゃ勝てる気しねえな、どうするんだろうとハラハラ。それにしても、 今まで出てきたボスキャラが全部出てくるなんてファミコンゲームみたいだな。と思ったら、これまたファミコンゲームみたいに サクサク攻略していって。ゲームのアレをアニメでやるとこうなるのか、これはこれでスカッとしますな、などと感心を。

そのあたりで、なんだか思い出したのだけど…。昔、ゲームのアイデア出しで、「今まで出てきたボス敵に、次々に変身して攻撃してくる敵はどうか。(よくある仕様だけど)」「キツネの尻尾みたいなスプライトをたった一枚追加表示するだけで、別キャラが変身してることが分かるはず」と出してみたら、ディレクターが「そんなファミコンゲームみたいなセコイことやりたくない! 8MもROMあるんだから貧乏臭いことはやめよう!」と熱弁を。なるほど、ファミコンゲームを実際に作ってた世代は、アレを嫌々やってた ―― 別に好きでやってたわけじゃないのだなと、その時初めて把握したのですけど。

今になって考えてみれば、ファミコンから、PCE・MD・SFCに移行する、たかだか数年の短い期間ですら、スペックその他の問題で仕方なくソレをやってた世代と、こういうジャンルはこういう作りにするもんだとすっかり思い込んでしまった世代に分かれてた気配があるよなと…。まして、何十年も続いてきた、漫画やアニメにおいては、そういうギャップも多々あるのだろうなと。

しかし今回、このアニメのソレを見て、最初にソレを生み出した世代が眉をしかめるアレコレだって、アレンジ次第・見せ方次第で、まだまだ効果的に使えたりするのかもしれないなと思えてきて。いわゆる、温故知新というか。歳が離れた若い(?)世代、あるいは、別業界だからできる一捻りってありそうだよなと。

そういえば、このアニメ、監督さんはゼオライマーを参考にしながら作ってるとインタビューで答えてた記憶もあって。そういうところでも、温故知新をしっかりやれる優秀なスタッフが揃ってる、そんな印象があるのでした。

今後の展開。 :

来年に二期が始まるらしいけど。こんな状態からどうやって続けるんだ、どうにかできるのかコレ、と興味津々。

個人的な想像では…。
  • レイズナー方式。
  • ライダーカブト方式。
  • 主人公交代。
ぐらいしか思い浮かばず。…レイズナーも、ライダーカブトも、見ていた人なら「ああ、ハイハイ。ああいう繋げ方ね」とピンと来るだろうけど。

さて、どういう繋ぎ方をしてくるのか、とても楽しみ。でも、あまり妄想しちゃうと、二期放送直後に「俺の思い描いてた二期じゃない!」と理不尽な文句を言い出しかねないので、ほどほどにしておかないと…。ていうか、そこまで妄想できた人は二次創作や別作品として発表してほしいよな…。もしかするとオリジナルより面白くなってるかもしれんし…。

2013/09/21() [n年前の日記]

#1 [windows] Windows7起動時にエラーが出るようになってしまった

起動時に、loopBeMon(おそらくLoopBe1のプログラム)が、「システム コールに渡されるデータ領域が小さすぎます」てなエラーメッセージを表示するようになってしまって。

どうも、MorphVOX Junior か Voxal Voice Changer をインストールした際に変なファイルも入れられたか設定を変えられた可能性が…。アンインストールしてみたけど変化なし。仕方ないので、システムの復元を試してみたらエラーが出なくなった。何を弄られたんだろう…。

#2 [ruby] DXRuby 1.5.6dev版が公開されてた

早速導入して試してみたり。とりあえず、以前作成した Anime PV Easy Maker ZERO は動いてるように見えたので一安心(?)。

フォルダ選択ダイアログを表示する機能が追加されてた。 :

同梱の readme.txt を眺めていたら、フォルダ選択機能追加という一文が。1.5.3devで追加されていたらしい…。

早速試してみたり。
#!ruby -Ks
# DXRubyを使ってフォルダを選択するサンプル

require 'dxruby'

folder = ""
font = Font.new(26)

Window.loop do
  break if Input.keyPush?(K_ESCAPE)

  y = 16
  yh = font.size + 4
  Window.drawFont(10, y, "Push Z key -> Select Folder", font)
  Window.drawFont(10, y + 1 * yh, "Folder:[#{folder}]", font)
  
  if Input.keyPush?(K_Z)
    folder = Window.folder_dialog("folder select")
    if folder == nil
      folder = "Cancel."
    end
  end
end
これで、Ruby を使って Windows 上でGUIアプリを作ろうとした場合に、ファイル選択/フォルダ選択をとりあえず DXRuby を使って行う、ということができそうだなと。ありがたや。

Ruby 1.8 の頃は、Windows上でRubyを使ってGUIアプリを作ろうとするなら VisualuRuby (vr/vruby) を使う、という選択肢があったのだけど。Ruby 1.9 になってからは、VisualuRuby は対応してない状態に。一応、ActiveScriptRuby を入れれば同梱されてるらしいけど…。RubyInstaller を入れた場合はどうすればいいのやら。

さりとて、他のGUI関連ライブラリは、開発が止まっていたり、導入が面倒だったり、exe化がすんなりいかなかったり、なんだか色々とボロボロな印象で。…まあ、そのあたりは、Python も似たようなものだけど。Python 3.x に対応できなくて放置されたライブラリがゴロゴロしてるし。

そんな状況なので、ファイル選択・フォルダ選択をしたい場合に、DXRuby だけでもソレができるというのは、ありがたいなと。もっとも、DXRuby は GUIアプリを作るためのライブラリではないのだけど…。ただ、ファイルやフォルダを読み込んで、ちょっと簡易に視覚化してみる、てなことに使えそうと思うわけで。

DXRuby のバージョン取得ってどうやるんだろう。 :

検索してみても答えが見つからず。バージョン番号の取得ができたら、バージョンに応じて処理を変更することができそうだけど…。例えば drawFontEx() に :aa というアンチエイリアス指定用オプションが増えたみたいなので、1.5.6以降とそれより前で記述を変えたほうがいいのかなと。…まあ、:aa については、1.5.6devより前のバージョン上で :aa => true と指定してもエラーは出ないみたいだけど。

DXRuby に限らず、Ruby のライブラリについてバージョン確認する方法は、コレと言ったものが無いようで。 _require されているモジュールのバージョンを知りたい!調べたい! - はちゅにっき に、Gem.loaded_specs['hoge'].version というソレが紹介されてたので試してみたけど、自分の環境ではエラーが出てしまって。

_あーありがち - gem メソッドで gem ライブラリのバージョンを指定 によると、HOGE::VERSION で取得できる場合もあるらしいけど。統一された何かしらは用意されてない状態、なのかな。

ライブラリのバージョン毎の細かい違いをソース側で無理矢理(?)解決するのもどうなんだろうという不安もあるけれど。もっと適切な解決策があるのだろうか…?

#3 [anime][neta] ○○人留学生という設定

自分、最近、「きんいろモザイク」というアニメを見ていると、なんだかもやもやした気分になってくるのです。

件のアニメの基本設定は、「イギリス人の女の子が日本に留学してきて、日本の女子高生達とキャッキャウフフする」という設定。

異文化交流というネタに気付いて作品にしてみせた原作は上手いと思うし、ひたすらほわほわした感じに作り上げてるアニメスタッフもイイ感じの仕事をしてるのではと感心していたりするので、作品自体に対してどうこうという話ではないのですけど。

ただ、なんとなく、考えちゃうわけですよ。

これがもし、イギリス人留学生が「日本、面白いデース」と喜ぶ設定ではなくて、韓国人留学生が「日本、面白いニーダ」と喜ぶ、あるいは中国人留学生が「日本、面白いアール」と喜ぶ設定だったら…。もし、そんな設定のアニメだったら、どんな印象を受けるアニメになってたんだろうなと。

はたまた、日本人の女の子が(韓国|中国)に留学して、(韓国|中国)の女子高生とキャッキャウフフする、そんな設定のアニメが作られていて、それが(韓国|中国)で放送されて、(韓国|中国)のアニメオタクがニヤニヤしながらソレを眺めてる、なんて風景があったとしたら…。

というか、この「きんいろモザイク」というアニメの存在・基本設定をイギリス人が知った時、どんな印象・感想を持つのかなあ、とか…。

そんなことを妄想してると、なんだかもやもやした気分になってくるのでした。イギリス人留学生という設定を、そのままボーッと受け止めて眺めていてもいいのだろうか…。そんな不安が自分の中でもやもやと湧いてくるというか。

「外国人が使われるのはどうしてなのか、考えてみよう」 :

このあたり、小学生の頃に何かの本で読んだ一文が、未だに頭の隅にこびりついているのです。

「日本製の車や家電製品の、CMやポスターに、外国人が使われることが多いけれど。それはどうしてなのか、考えてみよう」てな感じの問いかけで。昭和の頃の話なんで、そこで出てくる外国人ってのは、間違いなく白人のことだと思いますけど。当時はまだマイケル・ジャクソン等も見た記憶が無いし。

おじさんになった今でも、その問いに対する答えがスパッと出てこないのですよ。おぼろげに、たぶんこういう理由じゃねえのか、程度は思い浮かびますが…。小学生の頃に読んだ問いかけが、ずっと頭の隅に残ってる。アレやコレやで白人を起用するのは、なんでだろう。どうしてだろう。

ディズニーアニメでも、「この作品はディズニーアニメ初の黒人ヒロインだ」「初のアジア人ヒロインだ」なんて話があったじゃないですか。もちろん、それまでは、ヒロインは必ず白人の娘と決まっていたからこそ、そういう話が出てくるのだろうと思いますけど。

てなことを考えてしまって、もやもやしてくるというか。

漫画やアニメの中の国籍ってそれほど問題ではないのかも。 :

単に考え過ぎかも。例えばコレが、中国娘が日本にやってきて〜てな設定だったら、今までもフツーにあったよなと。らんま1/2にも中国娘は出てくるし、サクラ大戦にも中国娘は出てくるし。今川版ジャイアントロボも、アレはたぶん中国娘だろうし。

それら作品を見て、何か複雑な気分になるかと言えば、別にそんなことはないわけで。となると、漫画やアニメの中の○○人設定・国籍・人種の類は、現実とは乖離した状態で捉えることができるもの、なのかもしれないと。

そういえば、中国嫁日記、という作品もあることを思い出したり。アレも、漫画で描かれることで、現実に存在する中国人女性が、漫画キャラとしての別の何かを獲得した状態で認知される、てな現象が起きていた事例のような気もしてきたり。

てなことを考えてるうちに、ここはひとつバランスを取るという意味で、中国嫁日記をアニメ化すればええんやないかと思えてきたりもして。何のバランスだか分からないけど。…異文化交流モノとしては商品訴求力ありそうだけどなあ。

それにしても、漫画やアニメの中に中国娘設定は結構出てくるけど、韓国娘設定って、まず見かけないなと気付いたり。なんでだろ。キャラとして弱いのかな? このあたり、関西弁キャラとの共通点がありそうな気もしてきた。

何の話だっけ。とりあえず、中国嫁日記のアニメ化希望ってことで。

2012/09/21(金) [n年前の日記]

#1 [python] cMarkdownがインストールできない

WIndows7 x64 + Python 2.7.3 の環境で、 _cMarkdown という、Markdownをhtmlに変換するモジュール?ライブラリ?をインストールしようとしてハマる。pip install cMarkdown でインストールできるらしいのだけど。vcvarsall.bat がどうのこうのとエラーを出して、インストールできてないようで。

以下の記事で、pathが通ってないとダメらしいと知る。

_easy_install pysnmpしようと思ったらvcvarsall.bat無いよエラー。 - 試行錯誤と創意工夫(S!アプリ開発日記+α)

以前何かの折にインストールしておいた Visual C++ 2010 Express のインストールフォルダ以下、Common7/ と VC/ までpathを通してみたものの、変化無し。

以下の記事によると、Visual C++ 2010 ではなく、2008 じゃないとダメらしい。

_機種依存文字対策でpykfをインストールしてみた
_Python: Unable to find vcvarsall.bat | Slacy’s Blog

Visual C++ 2008 Express をインストールしてから再度試してみた。コンパイル時にエラーだらけになっているように見える。…もしかして、cMarkdown ってのは、Linux 環境のことしか考えてないのだろうか。いや、でも、vcvarsall.bat がどうとか言ってきたあたり、一応考慮してそうな気もするんだけど、どうなってんだろう…?

_cMarkdown を選ぶなら misaka でいいと思う という話も見かけたので、そちらでも試してみたり。pip install misaka と打ってみた。stdint.h が見当たらねえよ、とエラーが出た。

色々検索してみたら、どうも Visual C++ 20?? あたりでは、stdint.h なんてものは存在しないらしく。C99 が云々とかで。つまり、stdint.h を要求してくる時点で、C向けのライブラリを使った Python の Markdown 向けモジュールは、最初から Windows で使われることを想定していないモジュールばかり、ということが分かった。ぎゃふん。

速度は遅いけど、Pure Python のモジュールを使うしかないのか…。

python-markdown2をインストールしてみたり。 :

_Graceful Exit - Markdown 処理系の比較 によると、python-markdown より速い python-markdown2 というのがあるらしく。

_trentm/python-markdown2

pip install markdown2 と打ってインストールしてみたり。

動作確認。
>>> import markdown2
>>> markdown2.markdown("*em tag* **strong tag**")
u'<p><em>em tag</em> <strong>strong tag</strong></p>\n'
markdown 形式の文字列が、html形式に変換された。ちゃんと動いてるっぽい。

2011/09/21(水) [n年前の日記]

#1 [anime] 魔法少女まどか☆マギカ5〜10話を鑑賞

妹が以下略。

いかん。10話を見て、いい歳して泣いてしまった。自分、エロゲのDESIREをプレイしてグッと来てからというもの、この手の設定とシチュエーションが大好きなもので。

10話の最後に OP曲が流れて、そこでようやく 歌詞の内容が主人公ではなく黒髪の娘のほうのソレを指していたことに気づき、また感動。ガンダムOOの2期の最終話で OP曲の歌詞と本編映像がシンクロしていて「おおっ」と思ったことがあるけど。それより強力なソレ。かなりグッときた。

1話につき1つぐらいのペースでヘビーな設定を開示しているあたりが上手いなと感心。そういう構成のせいか、全然飽きない。続きが気になってしまう。

何はともあれ、これはアニメ史に残る名作なのではないかと思う次第。

#2 [nitijyou] 台風が凄い

夜になるにつれて風雨が凄いことに。直撃コース。東京のほうも凄いことになってるらしいが…。

てっきり福島も、どんどん凄いことになるかと重いきや。どうもPM10:00頃には雨もやんで、虫が鳴いている状態に。

しかし、須賀川市内の仮設住宅は床上浸水したらしい。…携帯にも、自分の住んでいる地域ではなかったけど、避難勧告メールが届いた。あんな着信音は初めて聞いた。DcCoMoの携帯には届いたけど、家族が使ってるau携帯には避難勧告メールが届かなかったらしい。さすがDoCoMo、なのだろうか…?

2010/09/21(火) [n年前の日記]

#1 [nitijyou] HDD整理中

ファイルがたくさんあるとチェックディスクにしろデフラグにしろなんか危険な気がする。ので外付けHDDに逃がせるように整理中。

2009/09/21(月) [n年前の日記]

#1 [perl][windows] PadreなるPerl用のIDEとやらをインストールしてみたのだけどアンインストールできないのでござる

インストール時に、インストールフォルダすら尋ねてこないから、なんだか怪しいなとは思ったのだが…。C:\strawberry なんてフォルダを問答無用で作成してファイルを展開したあげく、プログラムの追加と削除からアンインストールしようとしても、途中でうんともすんとも言わなくなってしまう。うーん。鋭意開発中状態で仕方ないのか、それともマルチプラットフォームのソレだからWindowsは各種対応が遅れているのか。どうしたものか。

いや待て。アンインストールを指示して放置してたら、バックグラウンドでファイルの削除が始まった。どうやらファイルの検索にめちゃくちゃ時間がかかってただけだった。止まったと思ってから、5分〜15分ぐらい待たされる。

2008/09/21() [n年前の日記]

#1 [iappli] 仕様変更の方向について考えてるけど

どうもヨサゲな案が思いつかず。

方向性としては2つあって、プレイヤー操作に応じて最大個数の状態からどんどん取得物を減らしていく方向と、プレイヤー操作に応じて最小個数の状態からどんどん取得物を増やしていく方向がある。が、今回、後者はどうも問題が出そうな。取得物は本編中でレベルが上がり、それと同時に見た目も変化していくのだけど。極端に差があるレベルのものを2つ同時に表示することは難しい画像・座標配置になっているので、新たに出現したソレがレベル0から始まる、といった扱いにはしづらい気がする。さりとて、内部的に、他のソレと同様に勝手にレベルを上げていくと、ユーザにとっては目に見えない何かがそこにあってレベルが上がっていく、という状態になって、混乱を招くのではないか、という懸念も。

途中までは最大個数の状態でレベルを上げていって、その間にプレイヤーの操作の傾向を溜めていって、最後のちょっと前でレベルが上がらない=取得物が得られない状態を作る…とか? とまでは思いつくけど、その操作の傾向って具体的には何ですか、みたいな。

まったく異なる別の取得物を新たに用意して、プレイヤーの操作傾向はそちらに反映させて、最後に、これまでの取得物と統合して結果を清算、という手もありそうか。でも、その、まったく異なる別の取得物ってのは具体的には何ですか、みたいな。

2007/09/21(金) [n年前の日記]

#1 [nitijyou] ktのサイトに1ページアップロード

残り2ページ。

#2 [nitijyou] 買い物に行ってきた

自転車で。LANケーブルを買おうと思ってケーズデンキとデンコードーに寄ったが、何mのケーブルを買えばいいのかで悩んでしまって結局買わず。

スーパー(カワチ)に寄って夜食等買い出し。

2006/09/21(木) [n年前の日記]

#1 [iappli] ペントミノとやらのページを眺める

n x m の領域の中に、特定のパターンを複数配置する、という変更要求がきているので、そのへんどうしたもんかと悩んでいたり。で、ヒントになる情報はないかと探していたら、どうもペントミノなるパズルがあるらしく。

_ペントミノを解く
_パズル問題解法のアルゴリズム

なるほど、一旦ギューッと詰めちゃって、その中の何番目を利用するか、だけを乱数で求めて、とかやればそれっぽい配置になるだろうか。

と思って眺めてたのだけど、考えてみれば、自分がやろうとしてるものは、必ずしもピッチリ隙間無く領域内に収まるものではないから、これらのアルゴリズムは利用できないのだな。てなことに後で気づいて、ショボン。

とりあえず2つほど処理を考えた。 :

ひとまず次々に置いてみて、置けないと判ったらまた最初から置き直す方法と、パターンの縦横個数で領域を割って置いていく方法。

前者は、時間はかかるけど隙間無く置ける可能性がある。ただ、最悪、配置が決まるまで、領域の個数分 x 配置するパターンの数分、延々とリトライし続ける可能性が。既に置いた場所を記録しておいて無駄を省くとかしないといけないのだろうな。まあ、再帰が使えそうなあたりはいい感じなのだけど。

後者は、あっさり場所が求まる。けど、その配置具合には明らかに規則性があるというか、見た目だけでも即座に手抜き配置をしているとユーザさんに判ってしまう可能性が。

とりあえず考えた処理をメモ。 :

忘れるといかんので。ていうかメモ用紙に書いたのを清書。
  1. 「出現位置記録配列」のインデックスをチェック。置けるはずの全ての位置に置いたか? 置いたなら、エラーを返す。
  2. 乱数でx,yを取得。
  3. 取得した x,y は既に出現したか。出現済みなら、2. に戻る。
  4. x,y を、「出現位置記録配列」に記録。インデックスを進める。
  5. 「パターン配置マップ」を参照。パターンを置こうとしてる場所に別のパターンが書き込まれてないかチェック。書き込まれてたら、1. に戻る。
  6. 「パターン配置マップ」にパターンを書き込み。
  7. 次に置くパターンの、「出現位置記録配列」を初期化&先頭に自分の位置を記録。
  8. 次に置くパターンを決定。(自身が処理したのと同じ関数を再帰呼び出し)
  9. 次に置くパターンが決定できたなら、正常終了を返して、関数を抜ける。エラーが返ってきたら、自分が書き込んだパターンを消去して、1. に戻る.

#2 [nitijyou] 耳かけ型のヘッドフォンは耳が痛くなる

自分、眼鏡をかけてるせいもあるのか、どうもその手のヘッドフォンは耳が痛くなってしまう。なんていうか、耳の付け根が痛い。

同じ「耳かけ」でも、頭の後ろにバンド(?)があるタイプは楽なのだけど。そういうのって、今では店頭で見かけないんだよな。…と思ったが、 _あるな。 ネックバンド型とかリアアーム型というのか。まあ、自分の近所の電器店の店頭にはない、というだけか。

この記事へのツッコミ

Re: 耳かけ型のヘッドフォンは耳が痛くなる by Kuro    2006/09/23 07:59
インナーイヤー型ヘッドホンではなく、テクノっ子がする密閉型ヘッドホンでもない耳かけ型の類は音漏れが酷いと感じますね。
例えば電車内だと、耳の中に刺さっているインナーイヤー型はそうでもないですが耳かけ型はインナーイヤーよりは音漏れしていますよね。
だから今までインナーイヤー型しか使ったことないし、これからもインナーイヤー型だと思います。

関係ないですけどイヤホンといえば、シークレットサービスや警護の人間が使うこんなイヤホン欲しいと思ってます(←馬鹿)
http://page11.auctions.yahoo.co.jp/jp/auction/n26283330
シークレットサービスや警護の人間が使うイヤホン by mieki256    2006/09/26 02:40
> 音漏れ

そのあたり数値化してパッケージ等に書いてあればいいのでしょうけど…。
そういう製品は見かけたことがない・ユーザの使用レポートを
頼りにするしかないのがアレですよね…。

> シークレットサービスや警護の人間が使うイヤホン

うお。カッコイイ…。
パーツが透明なのがグッドですね。
装着してることがわかりにくくなる効果が期待できそう。
外出時に使うことを想定したヘッドホンなら、
透明素材を使うことも一つの売り、かもしれんですな。

#3 [nitijyou] プログラミングをしてると日記のアップロード間隔がどんどん広がってくな

1週間ぶりの更新だし…。作業メモみたいなものだから、一応毎日、メモは取っているんだけど。うーん。

2005/09/21(水) [n年前の日記]

#1 [web] _BigEntertainment プライズパーク - オンラインクレーンゲームセンター

某氏から教えてもらった。感心。こういうサービスが今時はあるのか。考えたなぁ…。

この記事へのツッコミ

Re: BigEntertainment プライズパーク - オンラインクレーンゲームセンター by けいと    2005/09/23 21:56
クレーンゲームとかやったことありますけど、
リアルゲーセンと違って「手心」を加えられるので
下手な人には楽しいかも。

逆にうまい人は面白くないと思うけど、
リアルゲーセンが無い地域や種類が貧弱な地域だと
欲しい景品が手に入らないので結構うれしかったり。

欠点は景品もらうのに送料がかかることですかね。
バーチャルなクレーンゲーム by mieki256    2005/09/24 01:28
> リアルゲーセンと違って「手心」を加えられる
> リアルゲーセンが無い地域や種類が貧弱な地域ならうれしい

あ! なるほど…。それはリアルゲーセンよりメリットありますな。
つくづく、上手い商売を考え出したものだなぁ。

> 欠点は景品もらうのに送料がかかること

あー。言われてみれば。そこだけはどうしようもないですな…。
かといって、郵送コストのかからないデジタルデータをゲットでは、
嬉しさも半減なのだろうし。

#2 [nitijyou] まだポンポン痛い

また腹痛で目が覚めた。うーむ。

夕方には回復。

#3 [nitijyou] 近所のスーパーまで買い物に

夜食を買いに。…今時のスーパーはPM11:00まで営業してるのか。セブンイレブン並み。なんだか消耗戦の様相を呈してきた感もあるけど。

#4 [nitijyou] チラシページをhtmlで書き直し中

段組をする際の各divは、height を指定しないと background-color が反映されないのだろうか。

#5 [windows][web] Opera 8.50 をインストール

表示確認のために opera を起動したら新しいバージョンが出てるとかなんとかダイアログが。ついでだから 8.50 をインストール。

Opera の配布サイトで、「なぜ無料?」なる項目があるのだけど :

_このページ なんだけど…。
Operaは、ブラウザ内の広告バナーを取り外しライセンス料金を不要にいたしました。 この画期的なニュースは、Opera の普及と、世界中の ユーザーの皆様からのご支援により、本日発表することが出来ました。 さらに、プレミアムサポートもご用意しております。
「なぜ無料?」の問いに対する説明になってませんがな…。

2004/09/21(火) [n年前の日記]

#1 [prog] 画像処理に向いてる言語ってなんだろう

RubyやPerl、Pythonよりは、CやJavaなのかしらん。

_PixelGrabber :

_この手の処理を PixelGrabber でやるのが間違いの元だったりします
容量が大きい画像に対して処理しようとするとアレらしい。うーん。

GIMPのScript-Fuでどうにかならんかな :

と思って検索してみたけど、 _Script-Fu はインタプリタなので、ピクセルレベルの処理を書くのは適切ではないらしい。 プラグインを書いたほうがいいとのこと。ハードルが高くなるなぁ。…インタプリタでピクセルレベルの処理は望ましくない、ということならば、Perl、Ruby、Python等のLL(軽量言語)で行うのも適切ではない、ということなんだろうな。

この記事へのツッコミ

Re: 画像処理に向いてる言語ってなんだろう by otsune    2004/09/22 20:00
LLで画像処理をするというと、なんでもかんでもpnmでテキストにしてしまって。
あとは文字列処理と同じ理屈で処理をして。
出力はpnmtohogeで画像に戻すというのはどうだろうか?
Re: 画像処理に向いてる言語ってなんだろう by mieki256    2004/09/23 02:34
> pnm
そんな形式があったとは。恥ずかしながら知らなかったであります。
http://www.not-enough.org/abe/manual/command/netpbm/pnm.html
なるほど、pbm, pgm, ppmの総称でありますか…

テキストにしてしまって処理をする、といったあたりにハッとしました。
そうか…そういう選択肢もあるのですな…
LL、というよりUNIX系の思想に触れた気がします。<大げさか…でもないか。

#2 [prog] 気になるところをメモ

φ(..)メモメモ

_Ruby/SDL :

つまりはRubyでゲームなどを作るためのライブラリと言えます。

_SDLとは? (その1) :

SDLは様々なplatformで動くというのが大きな特徴です。 Linux, Win32, BeOS, MacOS, Solaris, IRIX, FreeBSD は正式にサポートされているとannounceされているもので、さらにNetBSD、OpenBSD、AmigaOS、MacOS Xなどでも動くようです。 1つのソースでこれだけのプラットホームで動く、しかもグラフィックやオーディオを使ったマルチメディアなプログラムを書くことができるというわけです。

_D言語研究室 :

#3 [digital] _CCDの交換になるとのことで15000円かかるとか

_CCD交換。1万8千円
いくらぐらいかかるのか情報を探してたのですが。なるほど、CCD交換で18,000円ですか。…A310を新規購入できてしまふ(爆) こういう事例を考えると、保険は入っておくべきなのですな。…製品の価格帯にもよるだろうけど。

#4 [digital] _Canon PowerShot A400

A3x0にズームがついたらしい。けど、広角気味(?)ではなくなってしまった。 *1 風景ばかり撮る自分なので、次に買うときの候補としては今一つ。
*1: ひょっとしてその分、A3x0にあった、周辺がアレな問題を避けられたりするんだろうか。でも、ズームのほうが色収差を抑えるのが難しいという話もあるみたいだし。

#5 [zatta] _杜(森)の話

_割り箸の話 - void GraphicWizardsLair( void ); //
一筋縄ではいかない問題なのだな。難しい…。

#6 [game] _コンパクトになったPS2の新機種、11月発売

_薄く、軽く、小さくなった「新PS2」
小さいなー。でも、HDDは内蔵できないのか。ということは、Linuxも動きませんな。…動かしてどうする。…HDD対応ゲームって、今、どのくらいあるのん?

#7 [pc] メールが届かないのはWinXPのSP2の影響

だったりしたら面白い…けどそれはないだろうなぁ。

#8 [zatta] _小学生の4割「太陽が地球を回ってる」 国立天文台調査

_(via クロノス・クラウン)
小学生の4割が「太陽は地球の周りを回っている」と思い、3割は太陽の沈む方角を答えられないことが、国立天文台の縣(あがた)秀彦・助教授らのアンケートで分かった。回答者はそれほど多くないが、身の回りの天文現象への関心や知識が薄れている傾向が見て取れる。
01〜04年に、北海道や広島など8都道府県の14小・中学校約1700人にアンケート。このうち、太陽と地球の関係については、授業で天文を学習した公立小4校の4年〜6年生までの348人が回答し、「地球は太陽の周りを回っている」と正解したのは56%。42%は「太陽は地球の周りを回っている」を選んだ。また、太陽が沈む方角を公立小9校720人に尋ねたところ、「西」と答えた子どもは73%で、あとの3割近くが正確に答えられなかった。
都市部ほど正解率が低い傾向があり、縣・助教授は「夕日が沈むのを見るような自然体験が子も親も失われている。情報があふれる一方、テレビやゲームなどに時間を奪われ、身近な現象を学ぶ機会が減っている」と指摘している。
ひええ。と一瞬思ったけど、さほど問題でもないような気もしてきた。

可能性1:今も昔も変わらないのかも :

自分が天動説だの地動説だのを知った時期を思い出そうとしたのですが…思い出せないのですよ。こういうのって、自分達の世代は、どこで教わったのだろう。ひょっとして、小学生ぐらいの頃はそのへんの知識を持ってなかった世代が大半だったりして。 *1

可能性2:質問文が不適切だった可能性はないか :

知識として地動説を知ってても、自分の「見た目」ではどう見えるかを語らせる方向にもっていくような質問文だったら、地動説を答えた子供達のほうがむしろおかしいという話に。

可能性3:からかわれていたのではないか :

アンケートで正確な情報が取れるかどうかは、回答者が真摯に答えるかどうかも絡んでくるわけで。子供達が大人をからかってる可能性はないのかしら。アンケートを受けた子供達が、「こんな低レベルな質問を…バカにしてるの?」と憤慨して、わざと反対の答えを書いたとか。…都市部ほど誤答が多いということは、やはりからかわれてるんじゃないのかと。田舎の子供のほうが純朴だから真面目に答えてくれそうだし。<偏見。

さておき :

仮に、天動説を信じてる子供達の図が真実だとして。そのまま、天動説を信じる大人になってくれたら、日本の社会も面白いことになりそう。…いや、今だって、 _肩こりに磁石をはりつける大人だらけ だもの。たいして違いはないか。

_太陽が沈む方角、3割が知らず 危うい小学生の天文知識 :

別の新聞社の記事。
月が満ち欠けする理由について「地球から見て太陽と月の位置関係が変わるから」と正しく答えた児童は47%にとどまった。不正解の「月が地球の影に入る」は37%で「いろいろな形の月がある」は2%、「分からない」と無回答が計14%だった。
告白します。自分、「月が地球の影に入る」だと思ってました。ヤバイ…。
小学生の知識や理解は危機的状況にあることが
大人のほうがよほど危機的状況だよなぁ。 _子どもより大人の「理科離れ」が心配になる調査結果 もあるそうだし。 _NHKニュース10のCGで惑星が逆行 という話もあるし。…「これは問題だ」と思った人達に、「そういう貴方の世代はどうなの?」と問いかけたい気持ちにかられたり。

今気づいたけど :

元のニュース記事には、「子も親も失われている」と書いてあるな。アンケートをとって考察してる方は、子供のことだけを問題にしてるわけではないのだろう。大人のほうがヤバイことも認識済みらしい。

テレビとゲーム :

情報があふれる一方、テレビやゲームなどに時間を奪われ、身近な現象を学ぶ機会が減っている
何かにつけて、テレビとゲームは悪者扱いだけど。天文現象の知識を教えるゲームやTV番組を作る、てことではダメかね。

*1: 一応、自分の場合、そのへん最初に知ったのは、ガリレオ・ガリレイあたりの偉人伝の本を読んでとか、そんな記憶はあるのだけれど。太陽が西に沈むのをハッキリ意識したのも、天才バカボンの「西から昇ったお日様が〜」の唄で、だったり。<オイ。親に、「太陽は東に沈むんでしょ。バカボンの唄で歌ってるし」と言って怒られたのが正しい知識を得るキッカケに。<オイオイ。…とりあえず自分の場合、それら知識を、日常の自然体験の中から得たわけでもなければ、学校の授業で最初に知ったわけでもない。単に、本で読んだだけだし、ギャグアニメで触れてただけだし。そういった、自分の事例を踏まえて想像すると…実は、今も昔も、知識に触れられる機会の多さに関しては、あまり変わってなかったりはしないのかしら、という疑念が。

#9 [zatta] _史実の肩の上で

偉人伝にまつわる話。昨今は偉人伝がもてはやされていないとか。

#10 [zatta] _真に理科離れしてるのは。。。

「子供より大人が理科離れ」のニュースに対する感想記事。
大きく振りかぶって言えば、「科学する力」って「問題解決能力」だと思うのです。〜(中略)〜 そういう能力って、必要ないですか?>世の大人の方々。
「問題解決能力」と聞いて、 _「理系の男はなぜモテないのか」 の話を思い出した。問題解決能力を持つ人間は、モテナイ…。問題の根源はそのへんだったりして。<妙な電波を受信中。

もう一つ電波を受信 :

理科離れ・科学離れが進んできた時期と、ガンダムに代表されるリアル路線ロボットアニメが低調になってきた時期とは、重なってたりしないのだろうか。ロボット工学を志す人達の中には、アトムなりガンダムなりに対する憧れがあると思うのだけど。ロボットが活躍するアニメが放映されてない時期を過ごしてきた子供達の中には、理工系への憧れも芽生えてこないのではないか。…前にも書いたかな、コレ。

この記事へのツッコミ

Re: 真に理科離れしてるのは。。。 by ぼーん    2010/08/14 22:51
逆です!ロボットアニメがチープだった時代のほうがよほど理科は盛んでした。当時の子供たちはどうやって機械への興味を持ち続けていたのか?簡単なことです。バイクやラジオなどの実際のモノを分解したりしていたのです。銀河鉄道だのガンダムプラモだのといっても所詮は紙の上の線やプラスチックのようなまがいものです。こんなものにたいしての興味など本当の機械好きとはいえません。ガンダムの腕が曲がっている絵を書きゃいいわけで、実際に関節システムを構築するわけじゃないのですから。ロボットアニメ好きはあんがい文系がおおく、実際の機械は苦手なタイプで、本当に理科や機械が好きな人は青春時代に車やバイクなどの実物機械に興味がいってしまい、案外ガンダムには無関心だったりします。ラブプラスのキャラクターに詳しく、画面のキャラヲ美少女にすることに血道をあげているひとが案外本物の女性に縁がないことと似ています。

2003/09/21() [n年前の日記]

#1 [pc][linux][debian] sidにしてみた

/etc/apt/source.list 内を sid にして apt-get update の apt-get -f dist-upgrade 。今度は上手くいった。ように見える。Mozilla が 1.4 になったり、GNOME が 2 になったり。ちょっと嬉しい。

sawfish から metacity にする方法がわからない :

debian の gnome2 には wm 切り替えのGUIツールが無いみたいで。ホームディレクトリの .gnome*/ あたりを削除してみたり、killall sawfish && metacity & とやらをやってみたり、update-alternative 云々をやってみたり。色々ゴチャゴチャやってるうちに一応切り替わってくれたみたいだけど、どこがポイントだったのか不明。

#2 [pc][linux][debian] eth0 で Abnormal Interrupt

NIC に sis900 を使ってるのだけど、題名のようなエラーが出てる。関連情報を検索したら、「AGPと当たってる。NICを差してるスロットを変えたら出なくなった」的内容の英文カキコを見つけた。御無体な。ウチの環境でそんなことしたらWin98でBT848ボードが動かなくなる。アレコレ入れ替えてようやく見つけた順番なのに。

#3 [pc][linux][debian] glx

glx を利用してるらしき xscreensaver 関連を入れてみたらエラー続出。あげくの果てにキーボードもマウスも固まった。Gentoo の時はこの手のプログラムも動いてたのに。 *1 何がマズイんだろう。
*1: 中にはエラー吐いたヤツも混じってたけど。

2002/09/21() [n年前の日記]

#1 片付けモード

片付けモード実行中。

2001/09/21(金) [n年前の日記]

#1 筋肉痛

昨日の畑仕事のせいでしょうね。筋肉痛で腕が痛いです。
トイレ入ってトイレットペーパーで拭くことすらままならず <例えが下品だなぁ


「コンタクトにするとモテる」説…
すると、メガネっ娘にキュンとくるオイラは…いわゆるマイノリティってやつ? <それ、なにかが違う

同じPCのモニタ見てても、視力がめっきり落ちる人(自分とか)と、全く落ちない人がいるのはなぜだろう。
何か見方のコツがあるのかな。それとも生まれ持った強度(?)か。
まあ…後者だろうなぁ。ウチなんか母親以外全員メガネかけてるし(爆)
全員メガネってのは、瑞から見るとかなり気持ち悪いのだろうなぁ… (;´Д`)

四姉妹、全員メガネっ娘ってのはどうか? <なにが?


妹から花ゆめ借りて読んでました。絵柄の研究の為に(嘘
久々に見る花ゆめは、作家陣がガラリと変わっててツライ。
若手作家の感覚についていけない自分が… <なら見るなよ…

2000/09/21(木) [n年前の日記]

#1 知識が出てこないッス

今日の技能教習は、昨日の復習と、路上での駐停車。
…駐停車できない…
自分、バス停の前や、坂道の頂上付近で平気で停めようとしちゃうし。
もし「坂道の頂上で駐停車は禁止されている」という問いが出たら、すぐに「○」という答えが出てくるんだけど。
いざ路上に出るとそういった知識が全く出てこない。
ヤバイ。これではまるで…
路上を走ってる自分=常にパニック状態、思考回路ハングアップ、の証明。

どっかの駐車場(停まってる車、少々)に入って駐車もしたのですが。
これまた全然ダメ。
まず「どうやって入れたらいいんだ?」と悩み、それだけで数分経過…
その後、方法を教えてもらっても、キチッと入らない。
教習所内で練習した成果、見事にゼロであります。
免許取っても、オイラ、そのへんのお店に車で買い物になんかいけないですね。
その場で困惑、停止、さらに絶対どっかにぶつける自信ありあり (´ー`)y-~~~
…ってマジヤベエよ、オイ… (´Д`;)

こういうのって回数こなして、感覚掴むしかないんでしょうけどねぇ…

サイト、あちこち修正しました。どうでもいいとこばかりですけど。
前よりごちゃっとしてますが、もうブラウザの違いに対応するのがめんどくさくて、そのまま。トホホ

1999/09/21(火) [n年前の日記]

#1 (NoTitle) AM10:30起床。もう少...

AM10:30起床。もう少し早く起きないと、なんだけど。

雨だす。かなり降ってるぅ。自転車取りにいけないよぅ。

妹がヴァンダル2を終わらせた模様。面白かった言うとりまっせ( ̄ー ̄)ニヤリッ
さてこれでPSが回収可能になりました。久々なので「ガンゲージ」をプレイ。一応4人全部使ってクリアしました。鬼のようにコンティニューしまくってですけどね。
いやはや激ムズ。プレイ中ずっと泣きそう。パニックになる頻度が多くてツライです。オイラは3Dモノをプレイする能力が無いと悟りました。トホホ。なんとなくだけどこの容赦無さはX68Kのドラキュラに似てるかも。 <異論ある方たくさんいそうだな。
なんか中に出てくる花を集めるといいことあるらしいのですが…いや、もう、ダメっす。先に進むので精一杯なんで残念ながらこれ以上は…。これ以上やったら泣きます(笑)
しかし曲とかエンディングの見せ方とかいいですね。イメージ的にカッコイイっす。グー。CGモードやサウンドモードもついててそのへんも嬉しかったり。あれ?そういやサウンドモードつけていいことになったのでしょうか。CD売れなくなるから絶対つけるなって御達しは消滅したですか。もしそうなら単なるユーザーとしては嬉しい限りです。万歳。
それにしても。ステア、なんかかわいい。足を内股にしつつガンガンバルカンを撃つ姿がツボにハマリました。ステア萌え〜 <でも他キャラより処理が重いみたい。なんでだろ。薬莢で処理食ってるとか?
しかしこうして楽しめてるのも某氏のおかげですね。マジサンクスっす。

以上、26 日分です。

過去ログ表示

Prev - 2024/10 -
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project