mieki256's diary



2024/03/06(水) [n年前の日記]

#1 [python] Python + glfwで疑似3D道路の描画実験中。その4

Windows10 x64 22H2上で、Python 3.10.10 + glfw 2.7.0 + PyOpenGL 3.1.6 を使って勉強中。疑似3D道路を描画してみたい。

どうにかそれらしく描画できるようになってきた気がする。

線だけで描画 :

ひとまず、セグメント(道路データ)を、線だけで描画する感じで処理してみた。これなら基本的な処理が分かりやすくなるはず。




ソースは以下。

_06_ps3d.py
from OpenGL.GL import *
from OpenGL.GLU import *
import glfw

SCRW, SCRH = 1280, 720


class Gwk:
    """Global work class"""

    def __init__(self):
        global SCRW, SCRH

        self.running = True
        self.scrw = SCRW
        self.scrh = SCRH
        self.seg_length = 5.0
        self.view_distance = 160

        self.camera_z = 0.0
        self.spd = self.seg_length * 0.1

        self.segdata_src = [
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
            {"cnt": 10, "curve": -0.4, "pitch": 0.0},
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
            {"cnt": 5, "curve": 2.0, "pitch": 0.0},
            {"cnt": 20, "curve": 0.0, "pitch": 0.4},
            {"cnt": 5, "curve": 0.0, "pitch": 0.0},
            {"cnt": 10, "curve": -1.0, "pitch": 0.0},
            {"cnt": 15, "curve": 0.0, "pitch": -0.5},
            {"cnt": 10, "curve": 0.0, "pitch": 0.3},
            {"cnt": 20, "curve": -0.2, "pitch": 0.0},
            {"cnt": 10, "curve": 1.0, "pitch": 0.0},
            {"cnt": 5, "curve": -0.4, "pitch": 0.4},
            {"cnt": 10, "curve": 0.0, "pitch": -0.6},
            {"cnt": 5, "curve": 0.1, "pitch": 0.3},
            {"cnt": 10, "curve": 0.0, "pitch": -0.5},
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
        ]

        # count segment number
        self.seg_max = 0
        for d in self.segdata_src:
            self.seg_max += d["cnt"]

        self.seg_total_length = self.seg_length * self.seg_max

        # expand segment data
        z = 0.0
        self.segdata = []
        for i in range(len(self.segdata_src)):
            d0 = self.segdata_src[i]
            d1 = self.segdata_src[(i + 1) % len(self.segdata_src)]
            cnt = d0["cnt"]
            curve = d0["curve"]
            pitch = d0["pitch"]
            next_curve = d1["curve"]
            next_pitch = d1["pitch"]

            for j in range(cnt):
                ratio = j / cnt
                c = curve + ((next_curve - curve) * ratio)
                p = pitch + ((next_pitch - pitch) * ratio)
                self.segdata.append(
                    {
                        "z": z,
                        "curve": c,
                        "pitch": p,
                    }
                )
                z += self.seg_length


gw = Gwk()


def keyboard(window, key, scancode, action, mods):
    global gw
    if key == glfw.KEY_Q or key == glfw.KEY_ESCAPE:
        # ESC key or Q key to exit
        gw.running = False


def render():
    global gw

    # move camera
    gw.camera_z += gw.spd
    if gw.camera_z >= gw.seg_total_length:
        gw.camera_z -= gw.seg_total_length

    # get segment index
    idx = 0
    if gw.camera_z != 0.0:
        idx = int(gw.camera_z / gw.seg_length) % gw.seg_max
        if idx < 0:
            idx += gw.seg_max

    z = gw.segdata[idx]["z"]
    curve = gw.segdata[idx]["curve"]
    pitch = gw.segdata[idx]["pitch"]

    ccz = gw.camera_z % gw.seg_total_length
    camz = (ccz - z) / gw.seg_length
    xd = -camz * curve
    yd = -camz * pitch
    zd = gw.seg_length

    cx = -(xd * camz)
    cy = -(yd * camz)
    cz = z - ccz

    road_y = -10.0
    dt = []
    for k in range(gw.view_distance):
        dt.append({"x": cx, "y": (cy + road_y), "z": cz})
        cx += xd
        cy += yd
        cz += zd
        i = (idx + k) % gw.seg_max
        xd += gw.segdata[i]["curve"]
        yd += gw.segdata[i]["pitch"]

    # clear screen
    glClearColor(0, 0, 0, 1)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glLoadIdentity()
    glTranslatef(0, 0, 0)

    # draw lines
    w = 20
    dt.reverse()
    glColor4f(1.0, 1.0, 1.0, 1.0)
    glBegin(GL_LINES)
    for d in dt:
        x, y, z = d["x"], d["y"], d["z"]
        glVertex3f(x - w, y, -z)
        glVertex3f(x + w, y, -z)
    glEnd()


def main():
    global gw

    if not glfw.init():
        raise RuntimeError("Could not initialize GLFW3")

    window = glfw.create_window(gw.scrw, gw.scrh, "lines", None, None)
    if not window:
        glfw.terminate()
        raise RuntimeError("Could not create an window")

    glfw.set_key_callback(window, keyboard)

    glfw.make_context_current(window)
    glfw.swap_interval(1)

    glViewport(0, 0, gw.scrw, gw.scrh)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(75.0, gw.scrw / gw.scrh, 2.5, -1000.0)
    glMatrixMode(GL_MODELVIEW)

    gw.camera_z = 0.0
    gw.running = True

    # main loop
    while not glfw.window_should_close(window) and gw.running:
        render()
        glfw.swap_buffers(window)
        glfw.poll_events()

    glfw.terminate()


if __name__ == "__main__":
    main()

一応、色々説明しておく。

動作には以下が必要。
  • Python 3.10.10 64bit
  • PyOpenGL 3.1.6
  • glfw 2.7.0

Python 3.x がインストールされている環境なら、pip でインストールできるのではないかな…。
python -m pip install glfw
or
pip install glfw

PyOpenGL については、以下から .whl ファイルを入手してインストールした。以下で入手できる版には、Python のバージョンと一致している freeglut*.dll も同梱されているので、別途 freeglut.dll をインストールしなくても GLUT が使える状態になる。まあ、今回は GLUT を使ってないけど…。

_Archived: Python Extension Packages for Windows - Christoph Gohlke

  • PyOpenGL-3.1.6-cp310-cp310-win_amd64.whl
  • PyOpenGL_accelerate-3.1.6-cp310-cp310-win_amd64.whl
pip install PyOpenGL-3.1.6-cp310-cp310-win_amd64.whl
pip install PyOpenGL_accelerate-3.1.6-cp310-cp310-win_amd64.whl


疑似3D道路の仕組みについて簡単に説明。いやまあ、「今の時代に疑似3D道路なんてわざわざやらんでもええやろ」と言われそうだけど、一応…。

about_pseudo3d_curve.png

一般的に、自分達が、カーブを描いた道路データを用意したいと思った際は、上図で言えば左側のような状態を考えるわけだけど。疑似3D道路は、右側のようなデータを持つことで、カーブを描いてるように見せかけてる。

左側のような道路データを持つと、カメラなり道路なりを回転させるための計算が入ってくるけれど、右側なら、横方向、もしくは縦方向に位置をずらしているだけなので、回転処理が入ってこなくて計算が簡単になる。また、昔のTVゲーム機は、ラスター単位でBG(背景画面)の表示位置を変更できたけれど、そういった、(今と比べたら)非力なハードウェアにとっても、表示位置を上下左右にずらすだけでそれらしく見えてくるこのやり方は都合が良かった。まあ、頓智ですわな…。

余談。疑似3D道路の描画実験をしていて思ったのは、まず道路データ(巷の英文解説記事では segment と呼んでることが多い)を用意することかなと…。まずは直線の道路だけでもいいからセグメントデータを用意して、それを透視変換で表示してみると、なんだか作れそうな気がしてくるというか…。後はコレをイイ感じに横や縦にずらして表示してやればええのやな、簡単やん、みたいな。まあ、実際にやってみると細かいところで「アレ? こんなはずでは」と悩む場面がちょくちょく出てくるけど…。

テクスチャを貼ったり塗りつぶしたりしてみた :

線だけで道路を描画することができたので、道路にテクスチャを貼ったり、地面を塗りつぶしたりしてみた。ここまでできれば、後は背景とビルボードを出すだけでもうちょっとそれらしくなるかなと。




ソースは以下。ちょっと長くなってしまった…。

_08_ps3d_tex.py
from OpenGL.GL import *
from OpenGL.GLU import *
import glfw
from PIL import Image
import math

SCRW, SCRH = 1280, 720


class Gwk:
    """Global work"""

    def __init__(self):
        global SCRW, SCRH

        self.running = True
        self.scrw = SCRW
        self.scrh = SCRH
        self.seg_length = 7.5
        self.view_distance = 160
        self.fovy = 70.0
        self.fovx = self.fovy * self.scrw / self.scrh
        self.znear = self.seg_length * 0.7
        self.zfar = self.seg_length * (self.view_distance + 2)

        self.camera_z = 0.0
        self.spd = self.seg_length * 0.1

        self.segdata_src = [
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
            {"cnt": 10, "curve": -0.4, "pitch": 0.0},
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
            {"cnt": 5, "curve": 2.0, "pitch": 0.0},
            {"cnt": 20, "curve": 0.0, "pitch": 0.4},
            {"cnt": 5, "curve": 0.0, "pitch": 0.0},
            {"cnt": 10, "curve": -1.0, "pitch": 0.0},
            {"cnt": 15, "curve": 0.0, "pitch": -0.5},
            {"cnt": 10, "curve": 0.0, "pitch": 0.3},
            {"cnt": 20, "curve": -0.2, "pitch": 0.0},
            {"cnt": 10, "curve": 1.0, "pitch": 0.0},
            {"cnt": 5, "curve": -0.4, "pitch": 0.4},
            {"cnt": 10, "curve": 0.0, "pitch": -0.6},
            {"cnt": 5, "curve": 0.1, "pitch": 0.3},
            {"cnt": 10, "curve": 0.0, "pitch": -0.5},
            {"cnt": 20, "curve": 0.0, "pitch": 0.0},
        ]

        # count segment number
        self.seg_max = 0
        for d in self.segdata_src:
            self.seg_max += d["cnt"]

        self.seg_total_length = self.seg_length * self.seg_max

        # expand segment data
        z = 0.0
        self.segdata = []
        for i in range(len(self.segdata_src)):
            d0 = self.segdata_src[i]
            d1 = self.segdata_src[(i + 1) % len(self.segdata_src)]
            cnt = d0["cnt"]
            curve = d0["curve"]
            pitch = d0["pitch"]
            next_curve = d1["curve"]
            next_pitch = d1["pitch"]

            for j in range(cnt):
                ratio = j / cnt
                c = curve + ((next_curve - curve) * ratio)
                p = pitch + ((next_pitch - pitch) * ratio)
                self.segdata.append(
                    {
                        "z": z,
                        "curve": c,
                        "pitch": p,
                    }
                )
                z += self.seg_length

    def load_image(self):
        im = Image.open("road.png").convert("RGBA")
        w, h = im.size
        data = im.tobytes()

        self.road_tex = glGenTextures(1)
        glBindTexture(GL_TEXTURE_2D, self.road_tex)
        glPixelStorei(GL_UNPACK_ALIGNMENT, 4)
        glTexImage2D(
            GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data
        )


gw = Gwk()


def keyboard(window, key, scancode, action, mods):
    global gw
    if key == glfw.KEY_Q or key == glfw.KEY_ESCAPE:
        # ESC key or Q key to exit
        gw.running = False


def resize(window, w, h):
    if h == 0:
        return
    global gw
    gw.scrw = w
    gw.scrh = h
    glViewport(0, 0, w, h)
    gw.fovx = gw.fovy * gw.scrw / gw.scrh


def render():
    global gw

    # move camera
    gw.camera_z += gw.spd
    if gw.camera_z >= gw.seg_total_length:
        gw.camera_z -= gw.seg_total_length

    # get segment index
    idx = 0
    if gw.camera_z != 0.0:
        idx = int(gw.camera_z / gw.seg_length) % gw.seg_max
        if idx < 0:
            idx += gw.seg_max

    z = gw.segdata[idx]["z"]
    curve = gw.segdata[idx]["curve"]
    pitch = gw.segdata[idx]["pitch"]

    ccz = gw.camera_z % gw.seg_total_length
    camz = (ccz - z) / gw.seg_length
    xd = -camz * curve
    yd = -camz * pitch
    zd = gw.seg_length

    cx = -(xd * camz)
    cy = -(yd * camz)
    cz = z - ccz

    road_y = -10.0
    dt = []
    for k in range(gw.view_distance):
        i = (idx + k) % gw.seg_max
        a = i % 4
        dt.append({"x": cx, "y": (cy + road_y), "z": cz, "attr": a})
        cx += xd
        cy += yd
        cz += zd
        xd += gw.segdata[i]["curve"]
        yd += gw.segdata[i]["pitch"]
    
    # init OpenGL
    glViewport(0, 0, gw.scrw, gw.scrh)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(gw.fovy, gw.scrw / gw.scrh, gw.znear, gw.zfar)
    glMatrixMode(GL_MODELVIEW)

    # clear screen
    glClearColor(0, 0, 0, 1)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glEnable(GL_CULL_FACE)
    glCullFace(GL_BACK)

    glLoadIdentity()
    glTranslatef(0, 0, 0)

    glEnable(GL_TEXTURE_2D)
    glBindTexture(GL_TEXTURE_2D, gw.road_tex)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)

    # draw roads
    w = 20
    tanv = math.tan(math.radians(gw.fovx) / 2.0)
    dt.reverse()

    for i in range(len(dt) - 1):

        d0 = dt[i]
        d1 = dt[i + 1]
        x0, y0, z0, a0 = d0["x"], d0["y"], d0["z"], d0["attr"]
        x1, y1, z1 = d1["x"], d1["y"], d1["z"]
        gndw0 = tanv * z0
        gndw1 = tanv * z1

        # draw ground
        glDisable(GL_TEXTURE_2D)
        if a0 % 2 == 0:
            glColor4f(0.45, 0.70, 0.25, 1)
        else:
            glColor4f(0.10, 0.68, 0.25, 1)

        glBegin(GL_QUADS)
        glVertex3f(+gndw0, y0, -z0)
        glVertex3f(-gndw0, y0, -z0)
        glVertex3f(-gndw1, y1, -z1)
        glVertex3f(+gndw1, y1, -z1)
        glEnd()

        # draw road
        glEnable(GL_TEXTURE_2D)
        glBegin(GL_QUADS)
        v0 = a0 * 0.25
        v1 = v0 + 0.25
        glColor4f(1, 1, 1, 1)
        glTexCoord2f(0.0, v0)
        glVertex3f(x0 + w, y0, -z0)
        glTexCoord2f(1.0, v0)
        glVertex3f(x0 - w, y0, -z0)
        glTexCoord2f(1.0, v1)
        glVertex3f(x1 - w, y1, -z1)
        glTexCoord2f(0.0, v1)
        glVertex3f(x1 + w, y1, -z1)
        glEnd()

    glDisable(GL_TEXTURE_2D)


def main():
    global gw

    if not glfw.init():
        raise RuntimeError("Could not initialize GLFW3")

    window = glfw.create_window(gw.scrw, gw.scrh, "lines", None, None)
    if not window:
        glfw.terminate()
        raise RuntimeError("Could not create an window")

    glfw.set_key_callback(window, keyboard)
    glfw.set_window_size_callback(window, resize)

    glfw.make_context_current(window)
    glfw.swap_interval(1)

    gw.load_image()

    gw.camera_z = 0.0
    gw.running = True

    # main loop
    while not glfw.window_should_close(window) and gw.running:
        render()
        glFlush()
        glfw.swap_buffers(window)
        glfw.poll_events()

    glfw.terminate()


if __name__ == "__main__":
    main()

使用画像は以下。256x256, 32bit(RGBA)のpng画像。コレを道路のテクスチャ画像として使ってる。

_road.png


少し説明。テクスチャ画像の読み込みには Pillow (PIL) 10.2.0 を使ってる。pip でインストールできる。
python -m pip install pillow


今回、地面を塗り潰すところでちょっと悩んでしまった。2D描画を前提とした画面なら、「画面の左端から右端まで塗り潰せ」だけで済むけれど。OpenGL のような3D空間でそういう見た目を実現するにはどうしたらいいんだろうと…。

画面の左端から右端まで覆いつくすような四角ポリゴンを置けば目的が果たせるのではないかと考えたけれど、画面端のx座標を求めるところで悩んでしまった。

x座標を求める手順としては以下。縦方向の視野角と、ウインドウの横幅、縦幅から、横方向の視野角を求めて…。描画したい位置のz値は分かってるから、tan(横方向の視野角 / 2) * z値、で、求める x座標値が得られる。

about_getx.png

縦方向の視野角は gluPerspective() を呼ぶ際に指定しているから既に分かっているし、ウインドウの横幅と縦幅はウインドウを作るための glfw.create_window() を呼ぶ際に指定してるからこれも分かっているはず。

というかこのあたり、昔やってた…。完全に忘れてた。もうダメだ自分。

_mieki256's diary - Processingを使って cube map とやらのテスト


余談。最初はフラットな見た目の画像を使って実験していたのだけど、ポリゴンの繋ぎ目のところにチラチラとテクスチャのゴミが表示されたり、境界がうっすらと見えてしまったりして、コレが気になって気になって…。ノイズだらけの画像と差し替えてみたらそれほど気にならなくなったけれど、本来はどうやって解決すべきなのだろう…?

余談 :

「せっかく OpenGL (PyOpenGL) を使ってるなら疑似3D道路なんてやらずにフツーに3D空間に道路を置いて描画すればええやん」と言われそうだけど、それは昔に Processing (Proce55ing) や three.js を使って既にやっておりまして。

_mieki256's diary - three.jsで一本道を延々と走るソレ
_mieki256's diary - Processingで一本道の道路の生成をテスト
_mieki256's diary - Processingで一本道の道路を延々走るソレを弄ってたり

なんというか、もっとレトロな雰囲気の画面を出してみたいわけですよ…。

2023/03/06(月) [n年前の日記]

#1 [pc] どのHDDケースが良さそうか調べてる

USB3.0接続の外付けHDDケース、3.5インチ対応品が欲しいなと思って候補を絞ろうとしているのだけど、これがなかなか難しい…。

AINEX HDE-08 はどうだろう、お値段も一番安いし、と思ったけれど。レビューを眺めてみたら、東芝製HDDとの組み合わせでは何故か高音になるという事例を見かけてしまった。入れたいと思ってるHDDは、東芝 DT01ACA300 なのだよな…。しかも5400rpmじゃなくて7200rpm。発熱もあるはず。

であれば、値段が高くなるけどファン付きのほうがいいのかな、四代目冷やし系HDD検温番 USB3.0 CLS35U3BKF6G あたりはどうだろうと調べてみたけれど。買ってから数回使ったら壊れたという事例を見かけてしまった。わざわざ高い製品を買ってそういう目に合ったらキツイな…。どうしたもんか…。

2022/03/06() [n年前の日記]

#1 [anime] 「鋼の錬金術師 シャンバラを往くもの」を視聴

BS12で放送されていたので視聴。大ヒットした漫画「鋼の錬金術師」の、後半がアニメオリジナルだったTVアニメのその後を描いた劇場版アニメ。

たしか昔、NHK-BS2で放送された際に一応視聴した記憶があるのだけど。初見時も思ったけれど、改めて見ても、やっぱりフツーに面白いなと。

もっとも、TVアニメ版を見てないとキャラ設定その他が分からないアニメだろうとは思うのだけど。それでも一応、何かしらが登場するたびに、登場人物が一言二言、簡単に台詞で設定を説明していたので、TVアニメ版を見てない人でもそこそこ分かる作りを心掛けていた気配を感じた。ちなみに、後から当時のインタビュー記事をググって眺めてみたら、やはり監督さんはこの映画単独でも視聴可能な作りにしていたつもりらしい。

パラレルワールド設定を持ち込んだのはTVアニメ版と劇場版の脚本を担当した會川昇さんらしい。 *1 後に會川さんは、パラレルワールドがずらりと並んだ設定の「仮面ライダーディケイド」にも参加するわけで。まあ、ディケイドでは、途中でメインライターを降ろされてしまったらしいけど…。何にせよ、パラレルワールドモノと言えば會川さんでしょう、鋼の錬金術師でそのへんバッチリ見せてくれたし、みたいなところがあったのかなと思えてきたりもして。

さておき。ほとんどの部分でイイ感じの出来だけど、やはりラストが…。個人的には、これはないよなあ…。でもまあ、このラストに不満があれば、原作、もしくは、原作準拠版のTVアニメを見れば大満足できるはずなので。

一説によると、原作者からどういうラストにするか、当時のアニメスタッフは教えられていたそうで。となると、原作より先にそのラストを見せちゃうわけにはいかないだろうし、どうしても原作とは異なるラストにしなければいけないよなと。そんな条件下でこのラストを捻り出したのだと想像すると、これはこれで全然アリというか、かなりマシなラストかもしれないと思えてきた。いやまあ、初見時は、ちょっと女性ファンに媚び過ぎだろうと思った記憶もあるのだけど。

なんとなく気になって、Twitterあたりで感想を検索したら、予想通り、このラストに大満足した女性ファンも一定数いらっしゃる模様。喜んでる人が居るなら、これはこれでアリなのだろう…。まあ、不満があれば原作読もうぜ、ってことで。
*1: 企画の初期段階で會川さんが設定を提示して、しかし水島精二監督はそのへん見逃しちゃってて、TVアニメ版でその設定が見えてきた際に「ああ、こういう設定にするんだ」と監督さんは思ってたけど、制作が終わった頃に資料を整理してたら最初から設定メモにちゃんと書かれてたことに気づいた、と、監督さんがインタビューで語ってた。

2021/03/06() [n年前の日記]

#1 [prog] Borland C/C++ Compilerを試用

C/C++における配列の書き方を忘れてしまったので、復習しようとしたのだけど。せっかくだから、この際 Borland C/C++ Compiler (embarcadero C++ Compiler, bcc32c) を試用してみるか、と。

_無料版 - エンバカデロ・テクノロジーズ
_C++Compiler - エンバカデロ・テクノロジーズ

以下のページを参考にして導入。環境は Windows10 x64 20H2。

_C/C++ 開発環境のインストール

昔は、無料版と言えば 5.5 が有名だったけど、今は 7.3 が配布されているらしい。メールアドレスその他を入力して、BCC102.zip を入手。解凍して任意のフォルダに置いて bin/ にPATHを通した。

Helloworld を試してみる。

_testbcc.c

以下を打てばコンパイルできる模様。
bcc32c testbcc.c
testbcc.exe が生成された。

ウインドウアプリケーションのビルドでハマった。 :

コンソールアプリケーションなら前述の指定で済むけれど、HDD内に残ってた、ウインドウアプリケーションのサンプルがビルドできなくて…。

以下のページを参考にして、.obj を生成してからリンクする Makefile を書いてみたらビルドができた。

_サンプルプログラム2-1(Windows)

ちなみに、make.exe は Borland C/C++ Compiler の bin/ 以下に同梱されていた。

ビルドした .c は以下。

_testbcc_w.c
_makefile

Makefile内の -L で指定してるパスは、各環境に合わせて修正する必要がある。

MSYS2に戻った。 :

一応、HDD内に残ってた helloworldサンプルを、コンパイル・ビルドできたけど。考えてみたら、今時は Microsoft製のコンパイラも無料で使わせてもらえるし、MSYS2を導入して gcc/g++ を使ってもいいのだよな…。あえて Borland C/C++ を使わねばならない場面って、ほとんど無いよな…。

そんなわけで、C/C++ の復習は、MSYS2 + gcc/g++ を使って行うことにした。MSYS2 は導入済みだったので、MSYS2 MinGW 64bit を起動して作業。

#2 [hsp][raspberrypi][linux] キーボードとマウスの取得についてまだまだ実験中

Raspberry Pi用HSPで、使っているキーボードやマウスによっては無反応になってしまう件について、hsp3dish.cpp を修正して動作を改善できないか、 _昨日の作業 を踏まえつつ実験中。

環境は、Raspberry Pi Zero W + Raspberry Pi OS buster。

修正対象ファイルは、 _OpenHSP/src/hsp3dish/raspbian/hsp3dish.cpp

HSPは、/dev/input/by-id 以下に、event-kbd(キーボード), event-mouse(マウス)が1つずつ出現するはず、という前提で処理が書かれているけれど。利用するキーボードやマウス製品によっては、そういう情報を返してくるとは限らなくて。

例えば以下の3製品は、想定していない情報を返してくる…。
なので、試しに、/dev/input/by-id以下に出現した event-kbd, event-mouse を全て対象にして ―― キーボードが1つ、マウスが1つ接続されてるはずと決めつけないで、相手が event-kbd か event-mouse と言ってきたらとにかくそれら全てを何個でも監視対象にして、かつ、各機器がキー入力とマウス入力を混ぜてきても取得できるように変更して動作確認してみた。

ちなみに、昨日試した、/proc/bus/input/devices の内容を見てキーボードを見つける処理は削除した。その処理では、EV=1200.. を返す機器が複数出てきた際に、どのみち対処できないので…。

修正部分は、initKeyboard(), updateKeyboard(), doneKeyboard() の3つ。かつ、グローバル変数をいくつか追加。

_hsp3dish.cpp
_hsp3dish.cpp.diff

動作確認には、sample/block3.hsp を利用。マウスを移動するとバーが左右に動いて、ESCキーを押すか、マウスの右ボタンクリックでスクリプトが終了する。

動作結果。 :

この修正をしたことで、Logicool K400r も、ESCキーを押すとスクリプトが終了するし、マウス(タッチパッド)を動かすとバーが左右に動くようになった。

また、ワーストケース(?)、BUFFALO BSKBW03WH + A4Tech XL-755BK の組み合わせでも、ESCキーを押すとスクリプトが終了するし、マウスを動かすとバーが左右に動いてくれた。

ということで、もしかすると書き方次第では、変わった識別情報を返してくるキーボードやマウスにも対応できそうだなと…。

ただ、キー入力やマウス入力を解析する部分が、こういう書き方でも問題無いのかどうかは分からず…。一応動いてるように見えるけど…。キー入力で evp->code == 0 or 1 が来た時におかしなことにならないか…。

ログ内容。 :

hsp3dish.cpp に printf() を入れてキーボードやマウスの認識状態を確認した結果もメモ。

BUFFALO BSKBW03WH + A4Tech XL-755BK の場合は以下。
Runtime[hsp3dish].
hsed: Runtime [hsp3dish].
Init:hgio_setmainarg(/home/mieki256/OpenHSP/.,__hsptmp.ax)
Init:HGIOScreen(1280,720)
readdir (.)
readdir (..)
readdir (usb-A4TECH_USB_Device-event-if00)
readdir (usb-A4TECH_USB_Device-if01-event-mouse)
match mouse : /dev/input/by-id/usb-A4TECH_USB_Device-if01-event-mouse , devFd : 6
Getting exclusive access: SUCCESS
readdir (usb-A4TECH_USB_Device-event-kbd)
match kbd : /dev/input/by-id/usb-A4TECH_USB_Device-event-kbd , devFd : 7
readdir (usb-A4TECH_USB_Device-if01-mouse)
readdir (usb-JME_RF_Receiver-event-if02)
readdir (usb-JME_RF_Receiver-event-kbd)
match kbd : /dev/input/by-id/usb-JME_RF_Receiver-event-kbd , devFd : 8
readdir (usb-JME_RF_Receiver-if01-event-mouse)
match mouse : /dev/input/by-id/usb-JME_RF_Receiver-if01-event-mouse , devFd : 9
Getting exclusive access: SUCCESS
readdir (usb-JME_RF_Receiver-if01-mouse)
readdir (usb-Logitech_USB_Receiver-event-if01)
Execute from __hsptmp.ax runtime[hsp3dish](1).
hsed: Process end 0.

実態としては、キーボード1つ、マウス1つを接続している状態だけど、BUFFALO BSKBW03WH は、キーボードなのに event-kbd と event-mouse を返すし、A4Tech XL-755BK は、マウスなのに event-mouse と event-kbd を返すので、計4つの機器が認識されていることになっている。が、4つの event を全部チェックするようにしたので、 ESCキー押しも、マウスの移動も反応するようになった。

Logiccol K400r を接続した場合は以下。
Runtime[hsp3dish].
hsed: Runtime [hsp3dish].
Init:hgio_setmainarg(/home/mieki256/OpenHSP/.,__hsptmp.ax)
Init:HGIOScreen(1280,720)
readdir (.)
readdir (..)
readdir (usb-Logitech_USB_Receiver-if02-event-mouse)
match mouse : /dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse , devFd : 6
Getting exclusive access: SUCCESS
readdir (usb-Logitech_USB_Receiver-if02-mouse)
readdir (usb-Logitech_USB_Receiver-event-if01)
Execute from __hsptmp.ax runtime[hsp3dish](1).
hsed: Process end 0.

Logicool K400r はタッチパッド付キーボードで、event-mouse しか返さない。また、キーボード入力もマウス入力も1つのeventに割り当てられてしまう。なので、HSPからはマウス1つ分だけが検出される。が、キーボードかマウスかで入力の解析処理を分けずに、キー入力もマウス入力もどちらも1つのeventに入ってくる可能性があることを前提にして入力をチェックするようにしたので、ESCキー押しも、マウス操作(タッチパッド操作)も反応するようになった。

#3 [movie] 「ハン・ソロ/スター・ウォーズ・ストーリー」を視聴

昨日TV放映されてたので視聴。STAR WARSシリーズに登場するハン・ソロの若い頃を映画化、という企画らしい。

フツーに面白かった。相棒との出会いや、愛機を入手した流れ等々、EP4〜6で提示されたアレコレを補完する内容で、なるほどそういう話にしてみたのか、みたいな。VFXもやっぱりゴイスで、空戦シーンはスピード感や迫力に溢れていた印象。

最後のあたりのアレは、 _「ハンが先に撃った」 問題を取り込んだソレなのだろうな…。当時のマニアの人達なら、「この(監督|脚本家)、(分かってる|分かってない)な…」と思えるシーン、だったのではあるまいか。

ググってみたら、評価は高かったけど興行収入は予想を大幅に下回ったらしい。それでも黒字になってるあたりはさすが、なのだろうか。

2020/03/06(金) [n年前の日記]

#1 [gimp] GIMP 2.10.18 Portableを試用

Windows版 GIMP 2.10.18 Portable samj版が公開されてると知って導入させてもらったり。ありがたや。マジでありがたや。

_samj Creations

Windows10 x64 1909 上では、64bit版、32bit版、共に動いてるように見える。ありがたや。

2.10.14 と同様に再設定。新バージョンを導入するたびに再設定をするのが面倒臭いけど、何か手はないものか…。本来は上書きインストールしちゃうべきなのだろうか…。でも、それでは Portable版を使ってる意味が…。

新機能について。 :

3D変換と言う新機能があるらしいので少し触ってみたけれど。マウスでドラッグすると、軸を中心にして、レイヤーが透視変換されながらグルグルと回転する感じの機能だった。スゴイ、けど、これってどういう場面で使えるのかな…。ちなみに、周囲の4点の位置を変更して透視変換した状態にする機能は以前からあったので、その4点の指定の仕方をもう一つ増やしてみた、という感じなのかもしれない。

ツールがグループ化されて、ツールボックスの表示領域が小さく収まるようになった。その代わり、使いたいツールを選ぶ際に、2クリックが必要になり…。気に入らない場合は、編集 → 設定 → ツールボックス → Use tool groups で有効無効が切り替えられる。

GIMP 2.10.16について。 :

そういえば、2.10.16 もあるのかなと思って調べてみたら、そのバージョンは巨大なXCFファイルを開くとデータを破壊するという致命的なバグがあって公開中止になったそうで。なかなかに怖いバグだな…。

#2 [movie] 「グーグーだって猫である」を視聴

NHK-BSで放送されてた映画を録画して視聴。大島弓子先生のエッセイ漫画を原作とした実写映画、らしい。

大島弓子作品をどう実写化するのだろうと気になって視聴してみたけれど。ググってみたら、タイトルは原作と同じだけれど、キャラも話もオリジナルらしい。騙された…。でも、監督さんは大島弓子作品のファンで3本も映画を作ってる、という話も見かけたので…ならいいか…。みたいな。

映画版と同じ監督さんで、TVドラマも作られていたそうで…。全然知らなかった…。つまり、映画版もTVドラマ版もイイ感じの映像化ができた、ということなのだろうな…。

ところどころでマーティ・フリードマン氏が出てきて色々紹介するのがちょっと面白かった、ような気がする。そしてリアル楳図かずお先生も…。と呑気に思っていたら…。なるほど、そういう使い方か…。

#3 [nitijyou] 風が強い

夜中から朝方まで、家が揺れるほどの強風。

2019/03/06(水) [n年前の日記]

#1 [movie] 「GAMBA ガンバと仲間たち」を視聴

NHK教育で放送されたソレを録画してあったので視聴。3DCGアニメ。制作は白組、でいいのかな。そういえば白組は、「ドラえもん」の3DCGアニメも作ってたっけ。

原作は、日本国内では有名な児童文学作品、「冒険者たち」。ロングセラーで、大昔に手描きアニメで映像化もされたほどの人気作。自分も小学生の頃に、学校の図書館で原作を読んだ記憶があったりして。

感想としては…。映像面に関しては、このぐらいのレベルで作れるならもう十分だなと。さすがに、予算も何もかも違うPIXARやディズニー作品と比べちゃいけないだろうけど、それでもフツーに見れる映像になってた印象。残る課題は、脚本、コンテ、演出だろうなと。いやまあ、そのあたりは3DCGアニメに限った話でもないけれど。

バトルのクライマックスシーンは見ていて結構盛り上がった印象。 ロケットのようにツッコんでいくアレが良い。前半でそういうシーンを見せてたあたりは伏線だったのだなと後から気づいて感心したりもして。

キャラデザに関しては、せっかくヒロインを髪の毛付きにして人間らしい見た目にしていたことだし、主人公や仲間達もそれらしい髪の毛をつければよかったのにと思ったり。主人公とヒロインが並んだ際に、両方ネズミのはずなのに、どうも違和感があって。なんでだろうと考え込んだけど、人間に寄せた頭部と動物に寄せた頭部が並んでしまってるからではないか、主人公側もヒロインのソレに寄せてしまえば良かったのに、と。でもまあ、おそらく、手描きアニメ版の見た目や、超リアルな見た目等、色んな方向性を散々検討した末にあのキャラデザになったのだろうし、スタッフ的にはアレで正解なんだろうなあ。

ラストのあたり、自分が読んだ原作のソレとは違っていたのだけれど、もしかして原作にも色んな版がある・時期によって改変されているのだろうか。それとも、ファミリー向け・アメリカ市場を狙ったので、ラストを改変したのだろうか。

ノロイの演技が実に気味悪くて非常にイイ感じだったのだけど、中の人が野村萬斎氏だったのだな…。子供さんが見たら軽いトラウマになりそうなノロイ像はグッド。また、主人公の仲間達も、池田秀一氏、大塚明夫氏、野沢雅子氏と、声優陣が豪華な顔ぶれだったので、安心して視聴できたあたりもイイ感じ。

さておき。ググってみたら、制作に20億円かけたのに、最終興収は3億円だそうで。厳しい。せめて次作に活かせる技術を何かしら得られていたらいいのだけど…。

2018/03/06(火) [n年前の日記]

#1 [ruby][emacs] Rubyソースの整形ツール rufoをインストールしてみた

Rubyソースを整形してくれる、rufoというツールがあるらしい。

_Rubyの高速フォーマッタ−"Rufo"を使ってみる - Qiita
_ruby-formatter/rufo: The Ruby Formatter - created by @asterite

インストールしてみた。環境は Windows10 x64。
gem install rufo

rufo hoge.rb で整形できる…のかな。たぶん。

Emacsからrufoを呼び出す。 :

自分は普段、Rubyソースを Emacs (NTEmacs) で書いてるけれど、Emacs から rufo を呼び出すために、rufo.el をインストールしてみた。

_aleandros/emacs-rufo: Emacs integration with the Rufo ruby code formatter

gitを使ってローカルにクローン。
gti clone https://github.com/aleandros/emacs-rufo.git

rufo.el を、~/.emacs.d/elisp/ 以下にコピー。

~/.emacs ( ~/.emacs.d/ntemacs.el ) に以下を記述。
;; rofu - Ruby source formatter
;; C-z f  rufo-format-buffer
(require 'rufo)
;; (setq rufo-enable-format-on-save t)
(setq rufo-enable-format-on-save t) を有効にすれば、.rb ファイルを保存するたびに rufo が呼び出されるのではないだろうか。試してないけど。

rufo.el の中で、C-c f を rufo-format-buffer に割り当ててあったが、自分の環境では既に利用していたショートカットキーだったので、rufo.el を直接弄って C-z f に変更しておいた。とメモ。

#2 [xyzzy] xyzzyのlispを少し勉強

この日記ページを書く際には、xyzzy というEmacs系のエディタを使っているのだけど。時々、同じような編集作業をする時があるので、多少自動化できないかと xyzzy の lisp についてググって勉強してみたり。

リンクの記述を変更する関数。 :

以下のような行があったとして。
正規表現をテストして遊ぶ (xyzzy[しょぼしょぼすくりぷと])
http://edutainment-fun.com/script/xyzzy/tips/regular.html

上記の記述を、以下のように変更したい。
 LINK http://edutainment-fun.com/script/xyzzy/tips/regular.html 正規表現をテストして遊ぶ (xyzzy[しょぼしょぼすくりぷと])

そういう処理をする関数を書いてみたり。
(defun transpose-hnf-link ()
  (interactive)
  (progn
    (goto-bol)
    (forward-line)
    (transpose-lines)
    (backward-line 2)
    (goto-eol)
    (insert " ")
    (delete-char)
    (goto-bol)
    (insert "LINK ")
    (goto-bol)
    (forward-line)))

(define-key *hnf-mode-map* '(#\C-c #\k) 'transpose-hnf-link)

lisp の達人が見たらゲロを吐きそうなソレだろうけど…目的が果たせそうだから、これでいいや…。

少し説明すると…。
  • 関数を作る時は、(defun hoge () 〜 ) と書く。
  • (interactive) と書いておくと、「この関数はコマンドだよ」「M-x 関数名で呼び出せるよ」という意味になる。
  • (progn 〜 ) と書いておくと、上から順々に処理をしてくれる。
  • (goto-bol) で行頭に、(goto-eol) で行末に、カーソルが移動する。
  • (forward-line) で、1行下に、(backward-line)で、1行上に、カーソルが移動する。
  • (forward-line n) (backward-line n) で、n行下、n行上に、カーソルが移動する。
  • (transpose-lines) で、現在行と一行上を入れ替える。カーソルは、現在行の1つ下に移動する。
  • (insert "hoge") で、現在のカーソル位置に hoge という文字列を挿入できる。
  • (delete-char) で、現在のカーソル位置で、1文字削除できる。Deleteキーを押した時と同じ動作、だろうか。
  • (define-key *hoge-mode-map* '(#\C-c #\k) 'fuga-func) で、ショートカットキーが設定できる。この場合は、「hoge-mode 時に、C-c k のキー入力で fuga-func を呼び出せ」という設定になる。

リンクURLを変更したいけどやり方が分からず。 :

以下のような記述があったとして。
 LINK http://hogefuga/~piyo/diary/201312203.html#201312203 piyo's diary - 記事名

以下のように変更したい。
 LINK #{2013,12,20,3} piyo's diary - 記事名

しかし、やり方が分からない。

正規表現を使えば、該当文字列にマッチさせることはできそう。
 M-x query-replace-regexp
 Query repla regexp: ^LINK http:///hogefuga/.+#
 With: LINK #

ただ、xyzzy の lisp から、それを呼び出す方法が分からない…。

余分な部分を削除するだけなら、以下のような感じだろうか…。
(defun change-hnf-link-uri ()
  (interactive)
  (if (looking-at "^LINK http://hogefuga/.+#")
      (progn
        (delete-region (match-beginning 0) (match-end 0))
        (goto-bol)
        (insert "LINK #"))))
  • (if a b) で、a が t なら、b を実行。
  • (looking-at "正規表現") で、正規表現とマッチするか場所があるかを調べられる。マッチしたら t、しなかったら nil が返る。
  • (delete-region A B) で、A から B までの範囲を削除。
  • (match-beginning 0) で、正規表現に一致した場所の先頭を、(match-end 0) で、正規表現に一致した場所の末尾を取得。

待てよ? 余分な部分を削除できたら、後は「{」「,」「}」を挿入していくだけなのでは…。(forward-char n) で、カーソルをn文字右に移動して、(insert ",") で挿入していけばなんとかなるかも。

#3 [pc] 無線LANルータが正しいIPアドレスを渡してくれない

手持ちのタブレットPC、DELL Latitude 10 がインターネットに接続できなくて悩んだり。調べてみたら、無線LAN(Wi-Fi)が、正常なIPアドレスを取得できてなくて。ウチの場合は、192.168.n.xxx になるはずが、192.168.27.3 になっていて…。なんでや。

使ってるルータは、NEC Aterm WR8300N。

ルータを再起動したり、タブレットPCの Windows8.1 x86 を再起動したり、管理者権限でコマンドプロンプトを開いて ipconfig /release や ipconfig /renew を打ってみたりしたけど変化無し。

よく分からないことに、Aterm WR8300N が提供する、2種類の無線LANのうち、暗号化が甘いほう(WEP)に繋ぐと、正しく 192.168.n.xxx が得られる。しかし、WPA/WPA2-PSK(AES)のほうに繋ごうとすると、妙なIPアドレスが返ってくる。

結局、ルータ側のDHCP固定割当設定を使って、IPアドレスを固定する方向で対処。タブレットPC側も、DHCPを使わず、IPアドレスを決め打ちで設定してみたり。

しかし、どうしてこんな状況になるのだろう…。

2017/03/06(月) [n年前の日記]

#1 [autohotkey] キー操作を画面に表示するAutoHotkeyスクリプトを修正

_mieki256/tinyosdkey
_Releases - mieki256/tinyosdkey

screenshot.gif

キー入力の履歴を表示する機能を追加できた。かつ、連続でキーを叩いた時も「G x 4」「WheelUp x 3」みたいな表示ができるようになった。

課題。 :

Windowsは、キーを押しっぱなしにするとキーリピートが働いて、連続でキー入力されるわけだけど。その種類の入力をAutoHotkeyで検出する方法が分からなくて。AutoHotkey関連ページを色々眺めてみたものの、ヒントすら見つからず。

AutoHotkeyのメインウインドウを表示して key history を確認すると、キー押しっぱなしの連続入力時も履歴が残っているのだけど…。GetKeyState だけを使ってどうにかするのは難しい、ということかもしれず。

2016/03/06() [n年前の日記]

#1 [zatta][neta] 「Overwatch」というFPSゲームが気になる

以下の記事で、「Overwatch」なるFPSゲームが存在することを知った。

_オーバーウォッチ シアトリカルティザー “我々は、オーバーウォッチ” - かっこ良すぎ!Blizzard Entertainment新作の日本語版ティザー!

_オーバーウォッチ: 日本語吹き替え版シネマティックトレーラー - YouTube とやらを目にして驚愕。まるで、ディズニーかピクサーが作ったのかと思えるレベルの動画だけど…。一体どこのスタジオで作られた動画なのだろう。気になってググってみたけど、制作スタジオ等の情報は見つからず。

プレイ動画にも、なんだか気になるものが。トレーサーなるキャラが瞬間移動を使えるようだけど…気になる…。

先日、一人称視点で瞬間的に長距離を移動する映像を見続けたら人間の脳はどうなるのか、てなことを妄想してたのだけど。こうして実際に映像を目にすると、この程度なら結構すぐに慣れそうだなと。しかし、この映像にすっかりどっぷり慣れてしまうと、今度は日常生活を送るのがちょっと厳しくなったりしないか、などと思えてきたりもして。いわゆる _真のゲーム脳 状態になりそうな。

とか考えてるうちに、映画「スター・ファイター」を何故か思い出した。昔、当時としては珍しい3DCGで宇宙戦闘機を飛ばした映画、なのだけど。今、リメイクしたら、 FPSゲームの特殊な映像に慣れたプレイヤーが云々、みたいな設定になるのかなと、ありきたりな妄想をしてしまったり。

気になって「スター・ファイター」のゲーム映像を探してみたけど、アレもFPSみたいな映像だな…。FPSではないゲームでは、そういう展開は難しいのだろうか。と思ったけど、「エンダーのゲーム」あたりはどうだったろう。原作小説内でどういう描写をしていたか、ちょっと思い出せないけど。

2015/03/06(金) [n年前の日記]

#1 [anime] SHIROBAKOの喧嘩シーン

HDDレコーダから消す前にBGVとして流しながらチラ見してたのだけど、喧嘩シーンの見せ方に感心。

パーティションを殴る手。蹴飛ばされて吹っ飛ぶ椅子。断片的な情報を一瞬連続で提示した後、カメラは演出家ルームの外に出て、もう喧嘩してる当人達を直接見せることはしない。部屋の中から聞こえてくる怒鳴り声。入口でおろおろしてる監督。何事かと集まってくる制作進行。

カメラが部屋の外に出たあたりから、見る側は、たまたま同じフロアに居合わせてしまった一人、みたいな状況に置かれるのだなと。一番激しくやり合ってるところは音声のみを提示することで、「中で一体何が起きてるんだろう…」と想像せずには居られない状態に。

事態を収拾させるために投入されるKYな制作進行、フライングタップ、達人技を見せる社長秘書。このあたりはファンタジーだけど、リアルにした後にファンタジーを見せて後味を調整するのがこの作品の秀逸さ。業界モノはリアルばかりを追求するとギスギスして見る側がゲンナリしちゃうので、どうやってマイルドにするか、そこに結構気を使ってる印象。バランス感覚が必須と言うか。

Web上の感想を眺めたら、ほとんどの人が「喧嘩のシーンがリアルだ…」と書いていて。喧嘩してる当人達を直接描いていないのにリアルと感じさせるあたりが娯楽映像作品の面白さ、かもしれず。おそらく視聴者が思った「リアル」は、喧嘩をしてる当人達にとっての「リアル」じゃなくて、周囲で喧嘩が発生した時、その場に遭遇してしまった者にとっての「リアル」、かもしれんなと。もちろん、声優さん達の演技がリアルだし、台詞の内容がリアルだからそう感じた、てな部分もあるわけで、脚本や演技が重なってシーンが生まれてくるあたり、総合芸術ってこういうことなのかなあ、とも思ったり。

個人的に、想像力を掻き立てる見せ方が好きなので、「上手いわー」「やっぱりこういうのが効果的だわー」とニンマリ。いや、もちろんよくある見せ方ではあるけれど、最近は直接見せちゃう系の作品が多い印象があったもので。

カリ城で、ルパンがクラリスに「見るな!」と言った直後に聞こえてくる悲鳴とか。ナウシカが、ペジテの娘の服の胸元を開け始めた直後、何かに気付いて苦悶の表情を見せてまたそっと閉じてしまうシーンとか。直接見せずに想像させるやり方、個人的に好きなのです。カリ城やナウシカのソレが謎の白い光で隠されてたらなんかもう色々と台無しやん。

#2 [nitijyou] 須賀川市の防災放送だか防災無線だかがよろしくない

夕方4:00ちょっと前に、須賀川警察署がどうのこうのと放送してたっぽいのだけど。周囲の山々で音が反射しちゃって何を言ってるのか全く分からなくて。区切りを入れながら喋ってるあたり、設備の悪さを意識しながらやってることは伝わるのだけど、肝心の内容が聞き取れないのでは…。

このあたり、おそらくは防災○○が設置されてるどこの地域でもあり得る問題ではないのかなと。音響関係をやってる大学の研究室の協力を仰いだりして、ちゃんとした防災設備を日本全国で整えたほうが良いのでは…。もっとも、技術的に改善できる見込みがあるのかも分からんけど。現代の科学技術では無理だったりするのだろうか。それとも、解決策はあるけど、コストを削ったり、古い設備を使い続けたり、その土地の地形を考慮せずに設置してるから発生してるだけなのだろうか。

それはともかく、須賀川警察署のサイトでも見れば放送内容が分かるのかなと思って開いてみたけど、それらしい情報が見当たらず。一体何を言ってたんだろう…。

須賀川市のサイトを開いたら…。コレかな?

_なりすまし詐欺の不審電話にご注意ください(平成27年3月6日)/須賀川市公式ウェブサイト

須賀川警察署の管轄内で、なりすまし詐欺電話が発生してるという話らしい。

少しググってみた。 :

_物理的に届かない防災無線、耳に入らない防災無線の諸問題(dragoner) - 個人 - Yahoo!ニュース

広範囲をカバーできるスピーカが存在するとは分かったけど、音が反射しちゃって内容が分からなくなる問題については触れてない…。

_建物壁面の反射を考慮した都市部における防災無線の最適配置(pdf)

やはり研究してる大学・研究室はあるようで。ただし、この論文は都市部のソレ。田舎だけで起きる問題じゃなくて、ビルが多い都市部でも問題発生するらしい。

_4.音響シミュレーションの利用と利点 : 防災無線放送

音響シミュレーションについて紹介してるけど、どうもこれは「届かない」「聞こえない」問題を解決するための試みで、「何を言ってるか聞き取れない」という問題は考慮して無さそう。それ以前の状況が多いので、とにかくそちらから、ということなのだろうな。

2014/03/06(木) [n年前の日記]

#1 [web] 人間フィルタ・人力フィルタ

2chが転載禁止を主張し始めて、まとめサイトがてんやわんや、てな話を見かけたのだけど。なんだかちょっとどうでもいいことを考え始めてしまったり。

考えてみたら、まとめサイトって、人間フィルタ・人力フィルタみたいなもんだよなと。

2chのような匿名掲示板って、S/N比がめっちゃ悪くて。有用な情報よりノイズのほうが多い。スレッドのテーマと全然関係ない書き込みが多過ぎて…。罵倒や人格攻撃ばかりが目立つし…。しかもここ数年は、削除人とやらが自作自演をしてアクセス禁止にしてユーザを困らせたりとか…。

昔、そういう状態は大変もったいないと思った西和彦氏が、「ノイズを取り除く人を板に張り付かせればS/N比が向上するんじゃね?」「有用情報ばかりになれば金をとれるサイトになるんじゃね?」と予想して、 _1ch というサイトを作ったわけですけど。ノイズを取り除く人 ―― 要するに「編集者」に相当する人達の、バランス感覚・目利き属性がよろしくなくて。有用な情報もノイズと一緒にバンバン削除しちゃったものだから誰も利用しなくなって、結局廃れてしまいました、という経緯があるわけで。

しかし、やっぱり2chはノイズが多くて、読者が欲しい情報を見つけるのに、随分と手間がかかってしまう。ノイズを除去したスレッドを読みたいよ、という需要があって…。

そこで出てきたのが、まとめサイト、なのだろうなと自分は勝手に思ってるのでした。有用であろうスレッドを発見・収集して、S/N比を人力で改善する作業を専門に行うサイト。それが、まとめサイト。単なる読者の側からすれば、そういうサービス・サイトの存在はありがたい。だって、誰だってノイズなんか見たくないもの。

もちろん、「編集者」の作業って結構大変だから、長期に渡ってタダ・無償でなんかやってられないよなと…。収入を得る仕組みがそこにあるから、何年もソレを続けることができたのだろうなと。漫画や小説だって、編集部・編集者が、給料を貰いながら仕事としてやってるわけで。おそらくそういうポジションに、ちょっと近いのだろうと。 *1

しかし…。

おそらくその作業は、そのうち自動化できそうだよなと。

例えば、インターネット黎明期は、Yahooあたりが人力で、リンク集・検索サイトを作ってたわけで。Yahooにお勤めしてる人達が給料を貰いながら、各サイトを目視でチェックして、これは有用なサイトだなと思ったらリンク集に追加して。そのリンク集の中から、検索キーワードでページを検索するから、有用なページがすぐに見つかる、これは便利だ、と思われてた。(…でしたよね? 自分、勘違いしてるかな?)

ところがそのうち、Googleが出現するわけですよ。プログラムをサーバ上で動かして、ネット上のあらゆるページを一旦収集し、各ページにランクをつけて、そのランクで検索結果をソートして表示する。こんな膨大なページ数を相手にして、人力でチェックするとかバッカじゃねえのかと。こんなのコンピュータで自動化すべきだよと。人間にとって完璧に大満足な結果ではなくて、粗だらけでちと不満もあるけど、まあまあそこそこ満足できる程度の検索結果でいいよと。その代わり、サクサク結果出しちゃうよ、と。

ということで、まとめサイトは、昔のYahooみたいな状態かもしれんなと思ったり。それらの作業は、プログラムで自動化できてしまう、そんな時期がくるのではないかと。

ローカル環境で、gem install 2ch-matome でツールをインストールして。2ch-matome http://hoge/fuga/piyo/ view で、取得とフィルタリングとサーバ起動をして、http://localhost:7743/ をブラウザで開けば、まとめサイトとほぼ同等のページが見れる…。そんな時代が来るかもしれず。まあ、今はまだ、そんな技術が無いので、てんやわんやしてるのでしょうけど。

てなわけで、まとめサイトとやらは、もしかするとYahooの歴史やGoogleの方向性を参考にしたら、何か光が見えてきたり…。と思ったけど、Yahooが右肩下がりになったソレを思い返すと、なかなか難しいところもありそうな。

人間フィルタ・人力フィルタじゃないとそれができなくて、かつ、お金になる、そんな仕事があればいいのだろうけど。
*1: もっとも、漫画や小説の編集者は、作家に対して作品を改善すべく内容変更を要求したりするので…。アドバイザーとしても機能してる、それら編集者と、各書き込みの取捨選択だけを延々と行うまとめサイトのソレは、傍から見た際のポジションは近いとしても、作業内容は結構違うだろう、と想像するのですが。

#2 [nitijyou] 某社のサイトを修正中

パンフレットへのリンクを増やしてほしいという要望が来たので、元になるテンプレートページを、xyzzyで開いてちょこちょこ修正してたのだけど。「地域ごとに分類」「そこをクリックすると開く」という要望のうち、後者の要望の意味が分からなくて。リンクをクリックしたら、そのページがブラウザで開けるのは、当たり前だよなあ…。そういう意味で言ってるわけではない、ということだろうけど…。「クリックしたら開く」って、どういう意味だろう…。

もしかして、 _jQuery の slideDown みたいなソレだろうか。とりあえず、ソレをやってみて「コレですか?」と尋ねてみよう…。

しかし、JavaScript の書き方を忘れてる…。この手のソレは日常的に書いてないと、すぐに忘れちゃうなあ…。おそらくそのへん、日本人が英語を喋れないあたりにも関係してそうな。頻繁に使わない言語は、忘れるよなと。

パンフレットのタイトルを示す画像を作るのが地味に面倒臭い。Inkscape で作業してるけど、このあたり自動化できないかな。でも、画像毎に配置・配色は違うし…。

2013/03/06(水) [n年前の日記]

#1 [windows] BlueGriffonちょっとヤバイ

WYSIWYGでhtml編集ができるBlueGriffonというソフトがあるのだけど。インストーラに、 _Delta toolbar というヤバイ感じのプログラムまでついてきてるようで。インストール時にチェックを外したりキャンセルを押したりしないと一緒にインストールされてしまうので注意。

zip版には含まれてないように見えるので、そっちを解凍・インストールしたほうがいいかもしれず。とメモ。

2012/03/06(火) [n年前の日記]

#1 [windows] デスクトップの書き換えが行われなくなる時がある

最近、Windows7 のデスクトップ書き換えが行われなくなる時があって首を捻っていたり。デスクトップと言うか…タスクバーだろうか。時計表示がずっと変わらなかったり。スタートメニューは表示できても、サブメニューが表示されなかったり。OS起動直後から発生しているわけではなく、何かのタイミングでそういう症状が起きたままになる。条件が分からない。なんだろう、コレ。

時計表示が変わらないのは困る。「まだ○時か」と油断してたら数時間ずれてたり。実に困る…。

#2 [nitijyou] コンビニまで徒歩で買い物に

わざわざメモするぐらいに以下略。

#3 [anime] ガンダムAGEの脚本がちょっと面白い気がした

二代目の主人公が、父親のようになれないとイライラする回。シミュレーターで訓練をしている最中に、師匠筋のキャラが主人公に声をかける。「親父のようになろうとしなくていい。お前はお前なりに強くなればいい」みたいな。

見ているうちに、まるでAGEという作品そのものに向けて発している台詞のようにも思えてきて。そうだその通りだ、と画面に向かって心の中で声をかけてしまったりして。これまでのガンダム作品のように、なろうとしなくてもいいじゃないか。AGEは、AGEなりの面白さを目指せばいいのだ。AGEならではのガンダム作品になればいいじゃないか。…あるいは、作品の面白さとかどうでもいいから、とにかく玩具が売れる方向で成功すればそれでいいじゃんとすら。…売れてるかどうかの実状は知らないけれど。

個人的に、三世代に渡る戦争を描くとか、ガンプラを筐体にかざすとゲーム画面が変わるとか、ガンプラの腕だの足だのを挿げ替えて遊ぶことも考えられているとか、企画内容や玩具のギミックはとてもお気に入りで。これで本編が面白ければ…。まあ、AGEならではの何かに到達してくれれば、と期待しながら毎回視聴しております。

#4 [anime][comic][ore_xxxxx] トクサツ一家という設定はどうだろうと妄想

夢の中でそういう漫画を見たのでメモ。

家族全員が特撮関係の仕事をしている、そんな一家の日常を描く漫画 or ホームドラマ。なのだろうか。美味しんぼ、けいおん、あたりの特撮版? なのかな。わからんけど。 父親は矢島監督や佛田監督のイメージで。母親は、武部P。兄は、高岩氏。とか。…年齢がめちゃくちゃか。 特撮に詳しいマニアに向けて内輪ネタを披露するのではなく、知らない人が「へえ、そんな技術が…」「ああいう番組を作るのって大変なんだなあ」と感心するような作り、だといいなあ。マニア向けだと、まず売れないし。

こんな感じの話を妄想。
と書いてはみたものの、既にそういう漫画がどこかにありそうな気も。特撮好きの漫画家さんが、こういうのを描いてそう…。

特撮業界内で仕事をしている人が変身するヒーロー番組ってどうだろうと妄想。 :

正義側の宇宙生物が地球にやってきて、地球に潜り込んだ宇宙怪人を倒すため、ヒーローに適した人間を探すのだけど。たまたま特撮ヒーロー番組のロケ収録現場を見て勘違い。「この星にもヒーローが居たのか! 彼ならこの仕事をやってくれる!」と変身能力を与えてしまって…。怪人、番組内に紛れ込み放題。ヒーロー側も、誰が本当のヒーローで、誰が役者なのか混乱。これは番組なのか、それとも本当の戦いなのか。

と書いてはみたけど、コレってどこかで誰かが書いてたネタのような気がする…。

ウイングマンやゼブラーマンに近いのだろうか。特撮ヒーロー番組が存在していることが当たり前な世界設定。そういう設定は、ちと珍しい気もする。特撮ヒーロー番組内では、えてして特撮ヒーロー番組の存在をガン無視している印象が。対象視聴者を考えると仕方ないのだろうか。…でも、たしかシャンゼリオンには、そういう回があったような気がする。ゴーカイジャーも、6人目の人とか、ちょっとソレに近い。彼は何を見て情報収集したんだ…。

ヒーロー番組を作ってるスタッフだからこそ思いつく作戦、みたいな話は作れないかしら。井上氏みたいなアニキ(?)風の頼れる脚本家が、ヒーロー側のブレインになってくれて、「俺が敵なら…こういうシナリオにするな」→「○○さん! アタリでした! 凄い読みだ!」とか。宇宙生物が「〜だメポ!」と言ってるのを聞いて、「おい、その『メポ』はやめろ。そういう安直なキャラ付け、俺は嫌いなんだ」「そんなこと言われても困るメ……メ……メポ!」とか。

玩具メーカの人やデザイナーさんも参加してきて、武器やフォームのアイデアを出して敵を倒したり。「こういう組み合わせにすれば対抗できるんじゃないか?」「なるほど、やってみるメポ!」「あ、登場時期は○月頃にしてくれよ。クリスマス商戦に合わせたいから」「お前は何を言ってるんだメポ!」

と書いてはみたけど、やっぱりコレってどこかで誰かが書いてたネタのような気がする…。

そういう設定では、子供には見せられないかなあ。でも、ウイングマンだって、アニメではあるけれど、映像化できたんだし…。本物のヒーローが存在する世界設定を肯定しつつ、ヒーロー番組の制作現場を見せるのって、難しい…かな…。

もしかすると自分は、単に特撮の制作現場を娯楽コンテンツの形で覗いてみたいだけなのかもしれない。…だったらメイキングビデオの類を見ればそれでいいのではないか。かもしれん…。

2011/03/06() [n年前の日記]

#1 [cg_tools] Metasequoiaを購入

1週間ぐらい前に振込・メールを送信しておいたのだけど、昨晩メールが届いてた。のでユーザ登録。これでプラグイン等が使えるようになった。

各種プラグインをインストール。…配布サイトが閉鎖して、今では入手不可能になってしまったプラグインが多いようで、ちょっと残念。ではあるけれど、それでもかなり機能面が充実したような印象。

2010/03/06() [n年前の日記]

#1 [nitijyou] 外は雨

土日は雨らしい。

2009/03/06(金) [n年前の日記]

#1 [nitijyou] GSHを延々とプレイしてしまっていたり

ネット上でユーザさんが公開してくれている攻略記事を参考にして、どうにかなんとかかろうじて、EASYとNORMALはクリアできた。何も情報がなかったら完全に歯が立たなくて投げ出していたであろう予感。

しかし、HARDをクリアしないと、話・シナリオが明らかにならない感じで。HARDを少しプレイしてみたけど、めちゃくちゃ難しい。特にヘリコプターの面が絶望的。ネット上の各種評価を見ると、シューティング面は要らないという意見を多々見かけたけど。ソレについては自分も同意見。

2008/03/06(木) [n年前の日記]

#1 [nitijyou] 夜食に買い出しに

自転車で。

バグ報告リストが届き始めたら外出できなくなると思うので今のうちに。山ほど食料を買出しに。といっても自転車の前後の籠と手提げ袋に入るぐらいの量なのだけど。

2007/03/06(火) [n年前の日記]

#1 [zatta] _頼られるエンジニアのコミュニケーションスキル

逆に言うと、頼られない存在になりたいときは、該当記事で提示されているパターンを活用すればいいわけか。

「要するにどれなんだよ」と一つの答え、というか選択肢だけ求める人物は、問題が起きたときに「お前がコレだって言ったじゃないか」「他にも方法があるなんて俺は聞いてないぞ」と高い確率でゴネるだろうし。そういう面倒な人物から頼られないように振舞えるなら、そのほうがいいよな…。 *1
*1: とは言うものの、上に立つ人は下の人より膨大な情報を扱わざるを得ない立場に居る故に、下の人のレベルの情報まで聞いてたらオーバーフローしちゃうわけで、「要するにどれなんだ」と尋ねてくるのは当たり前のことであり。とはいえ、下の人が、上の人の要求を満たす選択肢がどれかなんて判断・決断できるものでもなく。判断・決断できないレベルだから下の人なわけで。…上下以外の場面もあるから色々と難しいなぁ。

#2 [prog] _アイマスでよくわからないこと

視点が面白い…。

#3 [windows] _アドウェアとウイルスとトロイの木馬のオンパレードです…。

凄過ぎる。

#4 [flash] _レイヤーを利用して画面を覆う (2)

2回目のクリックをしたらFirefoxが強制終了。…FLASHは恐ろしいな。 *1
*1: ていうか、Firefox用のFLASHプラグインの作りに、まだ何か問題が残ってるということなんだろうけど。

この記事へのツッコミ

Re: レイヤーを利用して画面を覆う (2) by ひろゆき    2007/03/09 12:09
Firefox のバージョンは、Windows Firefox 2.0 ですか?
Re: レイヤーを利用して画面を覆う (2) by mieki256    2007/03/12 00:27
> Firefox のバージョンは、Windows Firefox 2.0 ですか?

はい。Windows 版 Firefox 2.0.0.2 + FLASHプラグイン 9.0.28.0 です。

Firefox 2.0 は、そのあたりにバグが残ってるんですかね…。
あるいは、FLASHプラグインその他が、
「タブを閉じる」の機能ではなくて、
「ウインドウを閉じる」の機能を呼んでる、とかですかね…。
まったくの素人なので、そのへんよく判りませんが…。
再度動作確認してみました by mieki256    2007/03/12 00:47
件のFLASHで、Firefox が終了した後、Firefox を起動したところ
セッションの復元ダイアログが表示されましたので、
どうも正規の手順を踏んでFirefoxが終了してるわけではなさそうですね…。

まあ、そのうち、FLASHプラグインがアップデートされていけば
問題も修正されるのであろうと…。
Re: 再度動作確認してみました by ひろゆき    2007/03/12 16:42
ExternalInterface + JavaScript の組み合わせによって、
起きたり起きなかったりするみたいなので、
FlashPlayer だけの問題ではないかもしれません。

#5 [zatta] _「嫁を亡くしてしまったので家事をしてくれる女性を募集します。当方年金暮らしアパート住まい65歳。若い女性を希望します」

無理だ。

#6 [web] _はてな"裏"人物事典

「戦法」の欄を読んで笑ってしまった。 _(via kyoumoe dovrebbero funzionare.)

#7 [nitijyou] 目が痛い

右目がゴロゴロする。指で押すとズキズキ。ちょっと早めに寝る。

2006/03/06(月) [n年前の日記]

#1 [pc] 新PCにファイルを転送

自宅サーバに保存したファイルを新PCに転送。「ファイルと設定の転送ウイザード」を使って反映、というか解凍?させる。

あらかた転送できたように見えるのだけど。なんだか一部、コピーされてないファイルがありそうな。Outlook Express のメールデータがちと怪しい…。

アプリを色々入れる。 :

  • xyzzy - emacsライクなエディタ
  • あふ - キーボード主体の2画面ファイラー
  • Mozilla Firefox - ブラウザ
  • ArtTips - ランチャー + 各種ツール
  • tclocklight - タスクトレイの時計部分改造 + 簡易ランチャー + 時刻合わせ + タイマー
  • ChangeKey - キー配置変更
  • AVG7 - ウイルス対策ソフト
  • eve - 環境変数編集
  • putty - SSH接続クライアント(?)

Adobe Reader 7.0.7 をインストールしたのだけど不正終了してしまう。 :

起動して、環境設定を変更してから終了しようとすると、不正終了してしまう。3回ぐらいアンインストール・再インストールしたけど結果変わらず。何故。

#2 [anime] BJ、ピノコのそっくりさん登場の回

フィクションでありながらも、「さっさと情報公開して対策を打ったほうが、結果的に損失コストは少なくて済むのになぁ…」「粉塵が原因ならいくらでも対策は打てそうだが…」と、ついつい真面目(?)に解決策を考えてしまって楽しめなかったり。 *1
*1: ていうか公害病が出てきた当時と違って、今は防止するための各種技術的な対策が打ててしまいそうなので、お話として成立しにくい予感も。

2005/03/06() [n年前の日記]

#1 [nitijyou] 丸一日寝てました

メガドラのゲームは思いのほか脳に負担をかけるのかもしれない…。自分、ゲーム脳=効率的に処理できる脳ではなくなった、ということかもしれんなぁ…。

この記事へのツッコミ

Re: 丸一日寝てました by tnk#    2005/03/07 12:13
「ゲーム脳」は批判も多いんで単純に比喩で使うと訳わかんなく
なりますよ。(とか言って日記ネタを提供してみる)

痴呆老人の脳波に酷似しているとか言うとインパクトあるけど、
そりゃリラックスしてる時の脳波ってだけだろう、などなど。
Re: 丸一日寝てました by mieki256    2005/03/10 06:11
> とか言って日記ネタを提供してみる

おお。ネタ振り(?)、thxであります。
ということで、後日の日記でちょこっとまとめてみたりして。

なんか色んな定義があるみたいで、
たしかに比喩として使うと訳わかんなくなりそうですな… >「ゲーム脳」

2004/03/06() [n年前の日記]

#1 [tv] インデペンデンス・デイ

TVで流れてたので、見てた。デタラメな話を高い技術で仕上げたバカ作品は大好き。いいぞ。もっとやれ。しかし、編集の酷さには辟易。まあ、バカ作品だから、いいか。それはそれとして、大人気ないとは思いつつも、どうしても個人的に気になってしまった部分が2点。一つはコンピュータ・ウイルス云々のあたり。一般人からは、コンピュータ関連技術者の作業内容の難易度って、この程度に軽く見られてるのかなーという不安が。もう一つは核の扱い。どうしてアメリカ人は、映像作品の中で、放射能云々には特に触れず、単に破壊力のある兵器としてのみ核を扱うのだろう。知っててやってるのか。それとも知らないまま平気で描いてるのか。業界に、そこには触れちゃならねえ、みたいな暗黙の了解でもあるのかしら。…まあ、バカ作品だから、どうでもいいか。

#2 [anime] ラストの画にビックリ

プラネテス。一部のセリフが刺さりました。のめり込んで見てるのも良し悪しだな。適度に距離を取りつつ鑑賞しないと。それにしても、シリーズ構成(?)に感心。アレもコレも伏線だったのか。無駄がないなぁ。…ラストのカット、カッコ良過ぎ。キマリ過ぎですな。でも、もしかすると原作にあった構図なんだろうか。ちょっとアニメらしからぬセンスのような気もした。

#3 [anime] デジタル・コンポジット?

スピカ。一部で盛大なマッハバンド。しかし全てのシーンでマッハバンドが出てるわけでもなく。もしかして、複数人で撮影作業をしていて、ノウハウを持ってる人と持ってない人が混在してたりするのかしら。などと思いつつスタッフロールを見てたら、撮影なる職種(?)はなく、代わりかどうかは判らないけど、デジタル・コンポジットなる職種で4人ほど名前が出てた。なるほど、今時の作業って、おそらく撮影と呼称するには無理がありそうではありますな。

成功するとスルーされてしまう作業 :

スピカを担当してる方はマッハバンドについて知ってる・気付いてるのだろうか。スケジュールが大変で、判っちゃいるが手を入れる余裕なんて無いとか、演出意図があって意識的に出してるならいいんですけど。仮にそもそも気付いてなかったら、今後当人にとっては改善・技術向上の見込みもないし、他作品でも平気でそういう作業をしちゃうだろうしで、ちょっと不安ではあったり。いや。別に一視聴者が不安になる必要なんてどこにもないんだけど。大体、そのへん改善したからといって、カモメちゃんの萌え度が増すわけでなし、DVDがバカ売れするわけでなし。おそらく本来どうでもいい問題なのだろうし。と言いつつ、一度気になっちゃうとついついそこに目がいっちゃうのも人間の習性(爆) そんなわけなんで許してくだせえ。

それはともかくこの手の作業って、特撮と同様、成功すればするほど誰も気に止めてくれない状態に近づいていくのが、なんだか悲しい。人によってはやりがいを感じにくい作業かもしれないな、などと勝手に想像してみたりもして。なんとなく、かなりの職人気質を要求される職種であろう、そんな印象があったりするのであります。

この記事へのツッコミ

Re: デジタル・コンポジット? by otsune    2004/03/07 13:34
単純にリテイクで直しきれなかったのでないかと予想。
とりあえず破綻していない絵が出来ていればいいや。と、後回しにされそうなのがマッハバンドだったり。
そしてリテイクするには素材のスキャンにまでさかのぼったりしなくちゃいけなかったり。
ディザリングで誤魔化しきれなかったりするレベルだったのかも。
実物を見ていないのでわかんないですが。

#4 [digital] _紙にはどうしてAとBの2通りのサイズがあるの

スキャナ・プリンタがB4対応になると、時代の流れに逆行してしまうのだな。むぅ。

B4対応と謳う必要はないか :

A4対応と言いつつも、 _257 x 364mm の読取範囲を持っていれば、それでいい。いや、B4対応の需要が一番多いのは漫画を描いてる人達だろうけど、B4サイズの漫画原稿用紙のタチキリ範囲(仕上がり線)が _220 x 310mm ということなので、そこまでカバーしてるだけでも違ってくるような。現行のEPSON製、Canon製スキャナを見ると、「最大有効領域:216 x 297mm」とある。タチキリ範囲と比較すれば、わずか 4 x 13mm 足りないだけ。たったこれだけのサイズ不足に泣かされてるわけですな>漫画描き。…昔のHP製スキャナの一部には、タチキリ範囲までカバーできてるものがあったらしいけど。どこかのメーカが、またそういった製品を出さないものか。

家庭用FAXに機能追加するのはどうか :

家庭用FAXの中には、送信原稿サイズがB4の製品があるみたいだし。 *1 現行の家庭用FAX製品にPCと接続できるI/Fを追加して販売したら、一部でヒット商品にならないか。 *2 …もしかすると、FAXの出力をPCで簡単に読み取れる機器・ソフトを商品化したほうが早いかな。いや、それでは解像度が完全に足りないような気も。

そもそも家庭用FAXの読取解像度(dpi)はどのくらいなんだろう :

_ココ によると、「スーパーファイン=203x392dpi」と書いてあった。低いな。これじゃ漫画描きの人達は相手にしてくれないだろう。…ん? _ココ によると、「G4規格=400x400dpi」とある。 このくらいあればなんとかなるか。いや。たしか何かのノウハウ雑誌で、「漫画の線画は白黒2値で600dpiぐらい欲しい」という話を見かけた記憶も。するとやっぱり足りないかな。…そもそもG4規格対応の家庭用FAXなんてあるのかや。今時ISDNでもなかんべよ。

_新しくなったScanSnap! fi-5110EOX :

スキャナ繋がり。一部の種族では必需品らしいシリーズの、新製品が出たらしく。スキャナ本体と関係ないけど、記事中で気になったのは、OCRソフトの認識精度。相変わらずの状態なのだな。それはともかく、4万円台って高いなと思ったけど、調べてみたらEPSON製スキャナ+ADFオプション *3 と同価格帯。CanonはそもそもADF追加可能な製品を出してないみたいで。なるほど。道理で人気が高いはず>ScanSnap。

*1: でも、送信原稿サイズ=B4に対して、受信原稿サイズ=A4の製品もチラホラある。受信=印刷がA4に制限されてる理由は何だろう。印刷関連部品の入手性の問題かな。
*2: 「一部」で「ヒット」って…それは「ヒット商品」なのか?
*3: EPSN GT-9400UF + GT94ADF。

#5 [zatta] _オタクが人気者になれない理由

メモ。題名に騙されちゃいけない。これは学校生活を送ってきた万人にとって一生に一度くらいは目を通しておいたほうがいいテキスト。かもしれない。これを読むと教育勅語云々の話が如何に頓珍漢な話か、ますます判りそうな気も。 _(from カトゆー家断絶)

この記事へのツッコミ

Re: オタクが人気者になれない理由 by 名無しさん    2004/03/19 00:22
http://www.shiro.dreamhost.com/scheme/index-j.html
Re: オタクが人気者になれない理由 by mieki256    2004/03/20 07:39
> http://www.shiro.dreamhost.com/scheme/index-j.html

こ、これは!

ありがとうございます。これはいいものだ…

2003/03/06(木) [n年前の日記]

#1 少年

米くんだりまで出向いて自己の宗教論を呑気に表明した公明党・神崎氏のおめでたさに唖然。

かつてマッカーサーは、日本を「国としては少年」と比喩したが、今現在も内実は変わっていないのかもしれない。

2002/03/06(水) [n年前の日記]

#1 HP作成

Sambaの設定をしようとしたけど、SWATが使えず。
/etc/hosts.allowが不味かったみたい。


親父さんの知人から、ホームページを作りたいのだが、みたいな相談を受けたり。
既に色々関連の機器は導入してるらしいけど。管理者、居るのかな…
外に共用サーバ借りてやるのが良いのだろうか。

下手すると、一つ一つのページを自分が作らされそう。
できるだけ、社員さんが作成する流れにしてかないと…


社内のPCがウイルスに感染しちゃった、とか笑って言ってちゃイケナイ…
客にウイルスばら撒いて気にしない無知な会社を、客は信頼してくれるだろうか。
加害者になってる意識がないんだろうな…

2001/03/06(火) [n年前の日記]

#1 私の見た色はあなたの見た色だろうか

某所で、紫色の肌の女の子の絵を目にしたです。まるでガミラス星人。
見てて気持ち悪くなった。

どうも作者さんは、意図的にそういう配色をしてるわけではないらしい。
自然なピンクの肌色を塗ってるつもりらしく、不自然さを感じてない模様。
もしかすると…これが色盲というものだろうか <よく知らないけど
でも背景は普通の色合いで塗れてるし。謎。

それにしても…
しばらく見てるうち、自分の認識してる色に自信が無くなってきた。
もしやおかしいのは、自分の色彩感覚・認識能力ではないのか。
モニタ・ビデオカードの発色の違いもあるだろうし…
自分が「コレ」と思って塗る色は、果たして他者も同じ色に見えているのか。
不安。

メタセコ触ってますが、ポリゴンでモデルを構成する感覚が掴めなくて。
Shadeの自由曲面のイメージで作り方が浮かんでくる <そっちも使いこなせてないんだけど
くねくね曲がったパイプ上の物体をポリゴンで作る場合、どういう構成になるんだろうか。

2000/03/06(月) [n年前の日記]

#1 (NoTitle)せっかくのいい天気だ...

せっかくのいい天気だったのに家でゴロゴロ過ごしてしまいました。もったいない。

なんだか特定のサイトに飛べないです。串通したら飛べるけど。アクセス制限かな。ちくしょー誰だよallesユーザとして迷惑かけてんのは、ってもしかしてオイラだったりして。でもこそこそDOMやってるだけだし落とすのも負荷かからないように気をつけてるからそんなに迷惑かけてないと思うんだけど。真実は一体 (-_-;)

1999/03/06() [n年前の日記]

#1 (NoTitle)今日も…家でゴロゴロ...

今日も…家でゴロゴロ。画像データ整理。
あ、ガメラ2見ました。(TVでやってた。)
ガメラカッコ良かったなぁ。
特にあの地面を滑りながらプラズマ火球を撃つところなんかもう最高。
3も見たくなってしましました。どうせヒマだし映画館行ってこようかな…。
(こっちで上映してれば、の話だけど。(-_-;) )

以上、26 日分です。

過去ログ表示

Prev - 2024/11 - Next
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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project