mieki256's diary



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

#1 [python] pygameとGLUTを同時に使おうとしてハマった

Windows10 x64 + Python 2.7.15 上で、pyagame 1.9.4 + PyOpenGL 3.1.3b2 + PyOpenGL-accelerate 3.1.3b2 の動作確認をしているのだけど。 _昔書いたスクリプト が動かなくて…。gl や glu を使って描画する部分は動くのだけど、glut を使って teapot 等を描画してるところがエラーを出してしまう。おかしいな…。昔は動いていたんだけどなあ…。

ふと思いついた。バージョンがアレなのでは。

PyOpenGL、PyOpenGL-accelerate をアンインストールして。
pip uninstall PyOpenGL
pip uninstall PyOpenGL-accelerate

PyOpenGL 3.1.0、PyOpenGL-accelerate 3.1.0 をインストール。
pip install PyOpenGL
pip install PyOpenGL-accelerate

この状態なら、昔のスクリプトも動いた。そういうオチか…。

ソース。 :

こんな感じのソースで動作確認をした。とメモ。

_teapot_on_pygame.py
"""
draw glut teapot on pygame

* Windows10 x64 + Python 2.7.15
* pygame 1.9.4 + PyOpenGL 3.1.0 + PyOpenGL-accelerate 3.1.0
"""

import pygame
from pygame.locals import *

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

SCRW, SCRH = 640, 480


class PyGame:
    def __init__(self):
        self._running = True
        self._screen = None

    def initialize(self, w, h):
        self.scrw = w
        self.scrh = h

        glutInit()
        glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH)

        pygame.init()

        # OPENGL向けに初期化
        self._screen = pygame.display.set_mode(
            (w, h), pygame.OPENGL | pygame.DOUBLEBUF)

        if not self._screen:
            return

        glClearColor(0.0, 0.0, 0.0, 1.0)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        gluPerspective(45.0, float(w) / float(h), 0.1, 100.0)
        # gluOrtho2D(0, w, h, 0)
        glEnable(GL_DEPTH_TEST)  # enable shading

        self.clock = pygame.time.Clock()

        self.xrot, self.yrot = (0.0, 0.0)
        self.xpos, self.ypos, self.zpos = (0.0, 0.0, -5.0)

        return True

    def onKeyDown(self, event):
        print(event.key, event.mod, event.unicode)
        if event.key == pygame.K_ESCAPE or event.unicode == u'q':
            self._running = False

    def onKeyUp(self, event):
        print(event.key, event.mod)

    def update(self):
        spd = 0.05
        pressed_keys = pygame.key.get_pressed()
        if pressed_keys[pygame.K_UP]:
            self.zpos -= spd
        if pressed_keys[pygame.K_DOWN]:
            self.zpos += spd
        if pressed_keys[pygame.K_LEFT]:
            self.xpos -= spd
        if pressed_keys[pygame.K_RIGHT]:
            self.xpos += spd

        self.xrot += 0.25
        self.yrot += 1.0

    def draw(self):
        """ draw object """

        # Clear OpenGL Buffer
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()

        # set camera
        # gluLookAt(0.0, 1.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)

        glTranslatef(self.xpos, self.ypos, self.zpos)
        glRotatef(self.xrot, 1.0, 0.0, 0.0)
        glRotatef(self.yrot, 0.0, 1.0, 0.0)
        glScale(1.0, 1.0, 1.0)

        # draw teapot
        glColor3f(1.0, 0.0, 0.0)  # color red
        glutWireTeapot(1.0)   # wireframe
        # glutSolidTeapot(1.0)  # solid

        # OpenGL drawing
        glFlush()

        # flip pygame double buffer
        pygame.display.flip()

    def execute(self, w, h):
        if not self.initialize(w, h):
            return

        # main loop
        while self._running:
            # self.clock.tick(60)
            self.clock.tick_busy_loop(60)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self._running = False
                elif event.type == pygame.KEYDOWN:
                    self.onKeyDown(event)
                elif event.type == pygame.KEYUP:
                    self.onKeyUp(event)

            self.update()
            self.draw()

            cap = '%5.2f FPS' % (self.clock.get_fps())
            pygame.display.set_caption(cap)


if __name__ == "__main__":
    game = PyGame()
    game.execute(SCRW, SCRH)
    pygame.quit()

以下のような結果に。

teapot_on_pygame_ss01.gif

#2 [prog] Visual Studio Codeでファイル内のタイムスタンプを書き換えたい

今現在、emacs系のエディタ(xyzzy, NTEmacs)を使っている際は、ファイルの最初のほうにタイムスタンプを書いておいて、保存と同時にタイムスタンプを自動で更新するようにしているのだけど。

_[Home] Time Stamp
_xyzzyはすごいぜ
_auto-time-stamp.l

例えば、ファイルの最初のほうに、以下のような記述をしておくと…。
#!/usr/bin/perl -w
# -*- mode: perl; Encoding: sjis; coding: sjis -*-
# Last updated: <>
#

保存した際、以下のように書き換わる、みたいな。
#!/usr/bin/perl -w
# -*- mode: perl; Encoding: sjis; coding: sjis -*-
# Last updated: <2018/11/09 19:27:04 +0900>
#

これを、Visual Studio Code でやりたいわけですよ。

それらしい拡張に遭遇。 :

検索してみたら、似たような処理をしてくれる拡張は存在しているようで。

_Auto Time Stamp - Visual Studio Marketplace

ただ、タイムスタンプのフォーマットが、今までemacs系エディタ上で設定していたソレとは違っていて…。

一応、拡張の設定で、タイムスタンプの前後の文字列を正規表現で指定できるのだけど、色々記述を変えて試してみても動いてくれない。何故。

デフォルト設定のまま、デフォルトのタイムスタンプ文字列をファイルの最初のあたりに書き加えてみると動くので、拡張が動いてないというわけではなさそうだけど…。

フィルタを書いた。 :

考えてみたら、sort や uniq のようなフィルタの形で、タイムスタンプを書き換えてくれるフィルタがあれば、多少は違うかなと。幸い、Visual Studio Code の拡張には、外部フィルタを利用可能にしてくれるものがあるようで。

_Filter Text - Visual Studio Marketplace

選択範囲を作って、Ctrl + K, Ctrl + F を押すと、入力欄が開くので、フィルタ名を打ち込んでやれば、選択範囲に対して処理をしてくれる。

後はフィルタがあれば…。試しにフィルタを Perl で書いてみた。

_timestamp.pl
# replace time stamp filter

use strict;
use warnings;

my $patstart = "Last updated: <";
my $patend = ">";
my $chklines = 8;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;

my $cnt = 0;
while(<>) {
    chomp $_;
    if ($cnt <= $chklines && $_ =~ /(.+)$patstart.*$patend$/) {
        my $tmstr = sprintf("%04d/%02d/%02d %02d:%02d:%02d +0900", $year, $mon, $mday, $hour, $min, $sec);
        print "$1$patstart$tmstr$patend\n";
    } else {
        print "$_\n";
    }
    $cnt++;
}

動作確認用に、以下のテキストファイルを書いて…。

_test.txt
#!/usr/bin/perl -w
# -*- mode: perl; Encoding: sjis; coding: sjis -*-
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
#

変換できるか実験。
> cat test.txt | perl timestamp.pl
#!/usr/bin/perl -w
# -*- mode: perl; Encoding: sjis; coding: sjis -*-
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <2018/11/09 20:33:27 +0900>
# Last updated: <>
# Last updated: <>
# Last updated: <>
# Last updated: <>
#
書き換わった。

ちなみに自分の環境は Windows10 だけど cat.exe も入れてある。デフォルト状態なら、type test.txt で同じことができるのかな。たぶん。

更に、自分の環境では ActivePerl を使っているので、plファイルをbatファイルに変換してみる。
pl2bat timestamp.pl
_timestamp.bat が出来上がった。

これをパスの通ったところに置いておいて…。Visual Studio Code 上で、タイムスタンプのある行を選択して、Ctrl + K, Ctrl + F → timestamp を入力。該当行が書き換わってくれた。

自動で書き換えてくれるわけではないから不便だけど、それでも手打ちで修正するよりはまだマシだろう…。

余談。 :

Atomエディタも、ファイルを保存する際に自動でタイムスタンプを書き換えてくれる拡張が存在していて。コレなら、設定次第で、emacs系エディタと同じフォーマットが使える。とメモ。

_atom-timestamp

ただ、Atomエディタ自体が、鬼のように重いわけで…。起動に数分かかるし、時々強制終了するし…。なので、Visual Studio Code を使えるなら、そちらのほうが嬉しいよなと…。

#3 [nitijyou] 市の保健センターまで行ってきた

市の保健センターまで行って、大腸がん検診の検体を提出。雨だったので、親父さんの運転する車で連れて行ってもらった。助かった。

昔は、保健センターの駐車場を無料で利用できていた記憶があるのだけど。今は有料になってしまったそうで。保健センターに用事が合って、かつ、30分までの利用なら、受付の方に言えば無料駐車券を貰えるらしい。

親父さんは待ってる間、近所の馴染みの写真屋さんに寄って写真談義をしていたようで。そこで聞いた話によると、市役所等も含め、市の中心部にある駐車場のほとんどは、基本的には有料になってしまったのだとか。そういう時代になったのだな…。

帰宅途中にケーズデンキに寄ってもらって、Panasonic製のスイッチ付きタップを購入。型番は確認してないけど、おそらく、 _WHS2001WP じゃないかな…。茶の間の炬燵用として使う予定。

全然関係ないけど、ケーズデンキの店頭でスイッチ付きタップを探しても、パナソニック製の件の製品しか置いてなかった。昔は色んな製品が置いてあった記憶があるけど。ケーズデンキに一体何があったのか。それとも、この手の製品ジャンルで何か事故でも発生して、ジャンルそのものが…。

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

#1 [ubuntu] 薄型PCにインストールした Linux Mint 18.2 を色々設定中

昨日、薄型PCの Ubuntu 16.04 LTS を 17.04 や 17.10 にアップグレードしたら無線LANが反応しなくなったので、面倒くさいから Linux Mint 18.2 cinnamon版をクリーンインストールしてしまったり。そのあたりの作業をメモ。

USBメモリからインストール。 :

_Download - Linux Mint から、linuxmint-18.2-cinnamon-64bit.iso をDL。今回は Torrent とやらでDLしてみた。

microSDカードリーダ BUFFALO BSCRMSDCBK + microSDHC Team 8GB CLASS10 (KSY008G0MC28PI) に、UNetbootin を使ってインストール。

薄型PCのUSB端子に差して起動。薄型PCは、CPU : AMD A6-3500(3コア, 2.1GHz (最大2.4GHz))、M/B : ASUS F1A75-M。起動デバイスの優先順位を変えてもHDDから起動してしまって悩んだり。優先順位の設定を全部無効にしたら、USBメモリ(というか、microSDカードリーダ)から起動してくれた。

HDD内を全消去する形でインストール。途中で、UEFIブートが云々と尋ねてきたけど…。そこらへんよく分からないので、とりあえずインストールしてしまった。

各種設定。 :

以下の記事を参考にして色々作業。

_Linux Mint 18: インストール後やっておくべき 20 選 | 221B Baker Street

上記の記事で掲載されてる内容をそのままやってるだけだけど、リンク先が消えると困るので一応メモ。

SSHでアクセスできるようにする。 :

sudo aptitude install openssh-server
sudo aptitude instal ssh

/etc/ssh/sshd_config の ClientAliveInterval を設定。
ClientAliveInterval 15

_ssh 接続をタイムアウトしないようにする - maruko2 Note.

byobuをインストール。 :

どうも無線LANがブチブチ切れるので、対策の一つとしてbyobuをインストール。
sudo aptitude install byobu

byobu で実行。万が一回線が切れても、次回また byobu を実行すれば以前のプロセスが復活できる…らしい。

起動時のスプラッシュ画面を非表示に。 :

起動時はテキストがずらずらと表示されるほうが好み。
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULTの行で、"noquiet nosplash" を指定。

無線LAN子機 IO-DATA WN-G300UA のドライバを変更。 :

IO-DATA WN-G300UA は RTL8192CU チップ搭載品で、一応 Ubuntu等に差せば認識はしてくれるのだけど、ドライバがおかしいそうで、接続がブチブチ切れる。github で公開されてるソレを導入して改善させる。

_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.
_RTL8192cu fix, works on recent Linux kernels (3.x and 4.x)

sudo apt-get update
sudo apt-get install git linux-headers-generic build-essential dkms
git clone https://github.com/pvaret/rtl8192cu-fixes.git
sudo dkms add ./rtl8192cu-fixes
sudo dkms install 8192cu/1.10
sudo depmod -a
sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/
sudo reboot

iwconfig と打てば、無線LAN子機の状態が分かる。デフォルトでは 150Mb/s と表示されてたけど、上記作業を行った 300Mb/s と表示された。

ただ、コレでも時々切れる。この製品、ちとダメダメだと思います。

sambaをインストール。 :

sudo aptitude install samba

共有フォルダを作っておく。
sudo mkdir /home/pub
sudo chown nobody:nogroup /home/pub
sudo chmod 777 /home/pub

設定ファイルを修正。
sudo vi /etc/samba/smb.conf

[global]
   dos charset = CP932
   unix charset = UTF-8
   workgroup = (Windowsネットワークのワークグループ名を指定)
   server string = %h server (Samba, Ubuntu, Core2Duo-ATX)

   domain master = no
   local master = no
   preferred master = no
   os level = 0

   guest account = nobody
   unix password sync = no

   (中略)

[homes]
   comment = Home Directories
   browseable = no
   create mask = 0700
   directory mask = 0700

[pub]
   path = /home/pub
   comment = Public Space for Everyone
   read only = no
   public = yes
   force create mode = 0666
   force directory mode = 0777
   guest ok = yes
   guest only = yes
   hosts allow = 192.168.1.

testparm と打って設定ファイルにエラーがないことを確認してから samba再起動。
systemctl restart smbd
systemctl restart nmbd

sambaにユーザを追加してパスワードを設定。
sudo smbpasswd -a ユーザ名

Windows機から、ping 薄型PCのホスト名、と打って反応が返ってきたらインストールできてる。

フォントをインストール。 :

sudo aptitude install fonts-mplus fonts-migmix fonts-mmcedar fonts-umeplus fonts-motoya-l-maruberi fonts-motoya-l-cedar fonts-horai-umefont fonts-ipafont-gothic fonts-ipafont-mincho

壁紙をインストール。 :

sudo apt-get install mint-backgrounds-* ubuntu-wallpapers-* ubuntustudio-wallpapers xubuntu-community-wallpapers-xenial

日本語化。 :

wget -q http://packages.linuxmint-jp.net/linuxmint-ja-archive-keyring.gpg -O- | sudo apt-key add -
sudo wget http://packages.linuxmint-jp.net/sources.list.d/linuxmint-ja.list -O /etc/apt/sources.list.d/linuxmint-ja.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install mint-gnome-ja --install-recommends
sudo apt-get install fcitx-mozc

ただ、コレをやると、ソフトウェアリソースを起動してアレコレした際に、「〜による署名は弱い digestアルゴリズム(SHA1)を使用しています」という警告が出てしまう。なんでも、Ubuntu 16.04以降は、gpg鍵なるものをSHA2にしたそうで、しかし各リポジトリは相変わらずSHA1のままだから、警告が出てしまうらしい。

_Linux Mint Japan 日本語フォーラム ・ トピック - パケットマネジャーの更新について

linuxmint-jp だか _Linux Mint Japan だかが対応してくれないと解決しないらしいけど、今年の頭から放置状態っぽい。

Google Chromeのインストール。 :

echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list && wget https://dl.google.com/linux/linux_signing_key.pub && sudo apt-key add linux_signing_key.pub && sudo apt-get update && sudo apt install google-chrome-stable

コーデックのインストール。 :

sudo apt-get install ubuntu-restricted-extras libavcodec-extra
sudo apt-get install libdvd-pkg

ハードウェア情報を調べる。 :

sudo apt-get install hardinfo

blenderをインストール。 :

sudo add-apt-repository ppa:thomas-schiex/blender
sudo apt update && sudo apt install blender

grub-customizerをインストール。 :

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

mint cinnamon から mint mate や mint xfce に変更。 :

sudo aptitude install mint-meta-mate
sudo aptitude install mint-meta-xfce

シャットダウン時に待たされる症状を緩和。 :

以下を参考に作業。

_【Ubuntu】シャットダウンが遅い | Jの戯言
sudo vi /etc/systemd/system.conf

以下を追加。(コメントアウトされてるので有効化して秒数を変更)
DefaultTimeoutStopSec=10s

IPv6無効化。 :

sudo vi /etc/sysctl.conf
以下を追加。
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

以下で反映。
sudo sysctl -p

grub側でも指定。
sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 noquiet nosplash"

grubの修正内容を反映。
sudo update-grub

vncをインストール。 :

sudo aptitude install vnc4server
sudo aptitude install x11vnc
vncserver :1
vncserver -kill :1

~/.vnc/xstartup を弄って色々試してるけど、どうも xfce を正常に起動できない…。いや、起動はするのだけど、毎回「初めてのアクセスだからパネル設定はどうする? デフォルトにする? 空にする?」と尋ねてきて初期化されてしまう。デスクトップ画面のソレをそのまま使いたいのだけど…。

まあ、以下を実行して、ホスト名:5900 にアクセスすれば目的は果たせるのだけど。
x0vncserver -display :0 -passwordfile ~/.vnc/passwd

一番最後に
startxfce4 &
と書いてあれば xfce4 になるのとちゃうんか…。

コレが mate なら問題なさそうな感じで動くのだけど。
mate-session &
Linux Mint はmateが標準らしいから、ソレに合わせておくのが無難なのかな?

xfceを利用しようとすると画面がおかしくなるのは、どうもバグっぽい気配が。

_How do I get the Mint xfce desktop via VNC? - Linux Mint Forums

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

#1 [python] PySideでツールパネルっぽいソレを作成できないかテスト

Photoshop や GIMP等の、ツールパネル?っぽいソレをPySideで作れるかどうかテスト。…ツールパネルって呼び方でいいのかな? ツールパレット? なんて呼ぶんだろアレ。要は、どれか一つ、ツールを選ぶと ―― どれか一つボタンを押すと、他のボタンがOFFになるアレ。

_Photoshop のツールギャラリー

こんな感じだろうか。

_button_test.py
u"""押したままの状態になるボタンを並べてツールパネル相当を作るテスト."""


import sys
from PySide.QtCore import *  # NOQA
from PySide.QtGui import *  # NOQA


class ToolPanel(QWidget):

    u"""ツールパネル用Widget."""

    button_clicked = Signal(int)  # シグナルを用意

    def __init__(self, *argv, **keywords):
        u"""初期化."""
        super(ToolPanel, self).__init__(*argv, **keywords)
        self.grp = QButtonGroup()
        gb = QGridLayout()
        dt = [
            (0, 0, 0, "Brush"),
            (1, 0, 1, "Erase"),
            (0, 1, 2, "Box"),
            (1, 1, 3, "Box Fill"),
            (0, 2, 4, "Select"),
            (1, 2, 5, "Fill"),
        ]
        for x, y, id, s in dt:
            btn = QPushButton(s, self)
            btn.setCheckable(True)  # トグルボタンにする
            self.grp.addButton(btn, id)  # グループ登録してラジオボタン風に使う
            gb.addWidget(btn, y, x)
        self.setLayout(gb)
        self.grp.setExclusive(True)  # 排他的なボタン処理にする
        self.grp.button(0).setChecked(True)  # 最初のボタンを押しておく
        self.grp.buttonClicked.connect(self.changed_button)

    def changed_button(self):
        u"""ボタンが押された時に呼ばれる処理."""
        self.button_clicked.emit(self.grp.checkedId())  # シグナルを発生

    def get_id(self):
        u"""選択状態(ID)を返す."""
        return self.grp.checkedId()


class MyMainWidget(QWidget):

    u"""メインウインドウ."""

    def __init__(self, *argv, **keywords):
        u"""初期化."""
        super(MyMainWidget, self).__init__(*argv, **keywords)
        self.tb = ToolPanel(self)
        self.tb.button_clicked.connect(self.changed_toolbox)
        self.lbl = QLabel("----", self)
        self.lbl.setText("ID=%d" % self.tb.get_id())
        l = QVBoxLayout()
        l.addWidget(self.tb)
        l.addWidget(self.lbl)
        self.setLayout(l)

    def changed_toolbox(self, id):
        u"""ツールの選択状態が切り替わった時に呼ばれる処理."""
        self.lbl.setText("ID=%d" % id)


def main():
    u"""メイン処理."""
    app = QApplication(sys.argv)
    w = MyMainWidget()
    w.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

button_test_ss01.gif


どれか一つボタンを押すと、他のボタンがOFFになってる。更に、IDも変わってる。目的は果たせそう。

こういう動作にする際は、 _QButtonGroup を使う。 _QPushButton (フツーのボタン)でも、 _QRadioButton (ラジオボタン)でも、とにかく QButtonGroup に追加登録してやれば、こういう動作にすることができる模様。また、各ボタンを登録する際にIDを設定しておいてやると、後で変化があった際、押されたボタンのIDを取得することもできる。

QPushButtonは、そのままだとクリックした時しかONにならないけど。クリックするたびにON/OFFを切り替えるトグルボタン(?)にしたい時は、 _setCheckable(True) を呼んで設定してやる。

それと、最初に QPushButton のどれかしらが既に押されている状態にしたいわけだけど。その場合は、 _setChecked(True) を呼んでやれば、ON状態に設定できる。

QButtonGroup に登録されたボタンの状態が変わったら、QButtonGroup は _buttonClicked というシグナルを出すので、そのシグナルにメソッドを割り当ててやれば、どのIDのボタンが押されたのかが分かる。

アイコン画像を表示してみた。 :

各ボタンにテキストが表示されてる状態ではツールパネルっぽくないので、試しにアイコン画像を表示してみたり。

_button_test_with_icon.py.txt
u"""
押したままの状態になるボタンを並べてツールパネル相当を作るテスト.

アイコン画像をボタン上に表示してみる版。
"""


import sys
from PySide.QtCore import *  # NOQA
from PySide.QtGui import *  # NOQA


class ToolPanel(QWidget):

    u"""ツールパネル用Widget."""

    button_clicked = Signal(int)  # シグナルを用意

    def __init__(self, *argv, **keywords):
        u"""初期化."""
        super(ToolPanel, self).__init__(*argv, **keywords)

        # 画像を読み込んで分割
        im = QImage("./toolbar_32x32x8.png")
        h = im.size().height()
        imgs = []
        for i in range(8):
            imgs.append(im.copy(i * h, 0, h, h))

        self.grp = QButtonGroup()

        gb = QGridLayout()
        gb.setHorizontalSpacing(0)  # GridLayoutの水平余白を設定
        gb.setVerticalSpacing(0)    # GridLayoutの垂直余白を設定
        dt = [
            (0, 0, 0, "Brush"),
            (1, 0, 1, "Erase"),
            (2, 0, 2, "Line"),
            (3, 0, 3, "Box Line"),
            (4, 0, 4, "Box Fill"),
            (0, 1, 5, "Fill"),
            (1, 1, 6, "Text"),
            (2, 1, 7, "Select"),
        ]
        for x, y, id, s in dt:
            icon = QIcon(QPixmap.fromImage(imgs[id]))  # アイコン画像を生成
            btn = QPushButton(icon, "", self)

            # アイコンサイズを画像の元サイズにする
            btn.setIconSize(imgs[id].size())

            btn.setToolTip(s)  # ツールチップを指定

            btn.setCheckable(True)  # トグルボタンにする
            self.grp.addButton(btn, id)  # グループ登録してラジオボタン風に使う
            gb.addWidget(btn, y, x)
        self.setLayout(gb)
        self.grp.setExclusive(True)  # 排他的なボタン処理にする
        self.grp.button(0).setChecked(True)  # 最初のボタンを押しておく
        self.grp.buttonClicked.connect(self.changed_button)

    def changed_button(self):
        u"""ボタンが押された時に呼ばれる処理."""
        self.button_clicked.emit(self.grp.checkedId())  # シグナルを発生

    def get_id(self):
        u"""選択状態(ID)を返す."""
        return self.grp.checkedId()


class MyMainWidget(QWidget):

    u"""メインウインドウ."""

    def __init__(self, *argv, **keywords):
        u"""初期化."""
        super(MyMainWidget, self).__init__(*argv, **keywords)
        self.tb = ToolPanel(self)
        self.tb.button_clicked.connect(self.changed_toolbox)
        self.lbl = QLabel("----", self)
        self.lbl.setText("ID=%d" % self.tb.get_id())
        l = QVBoxLayout()
        l.addWidget(self.tb)
        l.addWidget(self.lbl)
        self.setLayout(l)

    def changed_toolbox(self, id):
        u"""ツールの選択状態が切り替わった時に呼ばれる処理."""
        self.lbl.setText("ID=%d" % id)


def main():
    u"""メイン処理."""
    app = QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("cleanlooks"))
    # app.setStyle(QStyleFactory.create("plastique"))
    # app.setStyle(QStyleFactory.create("windows"))
    # app.setStyle(QStyleFactory.create("windowsvista"))
    w = MyMainWidget()
    w.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
アイコン画像として、以下を自作した。スクリプトソースも含めて、CC0 / Public Domain ってことで。

toolbar_32x32x8.png
_toolbar_32x32x8.png

こんな見た目になった。

button_test_with_icon_ss01.gif

  • アイコンの指定には、QIcon を使う。QPixmap を渡すと作れるっぽいので、元画像が QImage なら、QIcon(QPixmap.fromImage(qimg)) てな記述になる。
  • QIcon は、自動で画像を縮小して適切なサイズにしてしまうので、元画像サイズで表示したい場合は setIconSize() を呼んで元画像サイズを指定してやる。
  • QGridLayout の水平余白、垂直余白は、setHorizontalSpacing()、setVerticalSpacing() で指定できる。
  • ボタン上にマウスカーソルを合わせた際にピョコッと表示されるツールチップは、setToolTip() で指定できる。
  • 各Widgetの全体的な見た目は、QApplication.setStyle() で変更できる。QStyleFactory.create("cleanlooks") や QStyleFactory.create("plastique") を渡してやると見た目が変わる。指定できる文字列としては、windows、motif、cde、plastique、cleanlooks があるらしい。

_QIcon - PySide v1.0.7 documentation
_QGridLayout - PySide v1.0.7 documentation
_QWidget - PySide v1.0.7 documentation
_QApplication - PySide v1.0.7 documentation
_QStyleFactory - PySide v1.0.7 documentation

#2 [python] PySideのQKeySequenceについてメモ

PySideでメインウインドウにメニューバーをつけた際、各メニューに、setShortcut() を使って、ショートカットキーを割り当てたりすると思うのだけど。
    zoomactual_action = view_menu.addAction("Zoom &1:1")
    zoomactual_action.setShortcut("Ctrl+1")
    zoomactual_action.triggered.connect(self.zoom_actual_pixels)

今頃になって、 _QKeySequence なるものがあると知ったのでメモ。

QKeySequence には、あらかじめ決まったショートカットキーが定義されてたりするようで、ソレを使うと分かりやすく…なるのかな? どうかな? どうなんだろう。かえって分かりづらくなったりしないか。どうなんだ。そのへん判断できないけど、とりあえずそういう指定もできるようですね、とメモ。
    open_action = QAction("&Open", self)
    open_action.setShortcut(QKeySequence(QKeySequence.Open))
    open_action.setStatusTip("Open Image File")
    open_action.triggered.connect(self.show_open_dialog)
    file_menu.addAction(open_action)

    ...

    zoomin_action = view_menu.addAction("Zoom &In")
    zoomin_action.setShortcut(QKeySequence(QKeySequence.ZoomIn))
    zoomin_action.triggered.connect(self.zoom_in)

    zoomout_action = view_menu.addAction("Zoom &Out")
    zoomout_action.setShortcut(QKeySequence(QKeySequence.ZoomOut))
    zoomout_action.triggered.connect(self.zoom_out)

ただ、一部、シンボルはあるけど中身が定義されてない組み合わせもあるようで。例えば、QKeySequence.SaveAs には何も割り当てられていなかった。

_QKeySequence - PySide v1.0.7 documentation を眺めた感じでは、SaveAs は、Mac OS X と GNOME なら Ctrl+Shift+S が割り当てられてるけど、Windows では何も割り当てられてないっぽい。このキーの組み合わせは、OS側で何かしらに使ってたりするのだろうか? ちょっとよく分からない。

他にも、"Ctrl+S" といった記述の他に、Qt.CTRL + Qt.Key_S、といった記述も可能らしい。
    save_as_action = QAction("Save &As...", self)
    save_as_action.setShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_S))
    save_as_action.setStatusTip("Save Canvas Image")
    save_as_action.triggered.connect(self.show_save_dialog)
    file_menu.addAction(save_as_action)

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

#1 [prog] lrevise.cをPythonで書き直していたり

実際動かしてみないとわからない気がしてきたので、lrevise.c を Python で書き直して、動作を確認してるところ。

_fakeantijaggies2.py - アンチジャギのテスト

usage:
    python fakeantijaggies2.py -i INPUT.PNG -o OUTPUT.PNG -n


一応動いたものの、結果を見ると、うーん。移植の際に何か間違えてるのではないか、という気がしてきた。

Jagi や OLM Smoother の結果と比較してみたけど、Jagi も PLM Smoother も結果がグッド。な気がする。

元画像。
testb.png

Python で処理したもの。
testb_lrevise.png

Jagi で処理したもの。
testb_jagi.png

OLM Smoother で処理したもの。
testb_olm.png


AEを持ってるなら、あるいは一枚だけ Photoshop で処理すれば済むなら OLM Smoother を使ったほうがいいし、AEを持ってないけど大量に処理したいなら Jagi を使うのがヨサゲ、だろうなと。

#2 [anime] 「庵野さんと僕らの向こう見ずな挑戦 日本アニメ(ーター)見本市」を視聴

昨晩、NHK-BSで放送されてた番組を視聴したので感想をメモ。庵野監督率いるスタジオカラー内で、日本アニメ(ーター)見本市に参加してる若いスタッフの日常を追ったドキュメンタリー番組、なのかな。

ナレーションがジブリの鈴木Pで驚いた。時々「ジブリならクビです」的台詞が入ってくるあたりが、笑えるけど恐ろしい。いや、台本書いたのは番組スタッフだろうけど。

定時出社で毎朝ラジオ体操をするジブリと、午後になってバラバラに出社して「ラジオ体操? 馬鹿馬鹿しい」と切って捨てるスタジオカラー。なかなかのコントラスト。

職場のPCで、エロ画像をひたすら漁るクリエイターの図。日本のアニメがエロとバイオレンスで出来ていることを示したワンシーン、かもしれず。

椅子寝・机の下で寝る映像がちょこちょこ挿入されるあたりが…。ナウシカ制作時、庵野氏だけがスタジオ(トップクラフト?)で寝泊まりして作業してた、てな話をどこかで見かけた気がするけど。その庵野氏が作ったスタジオだけあって、そこで働くスタッフも若い頃の庵野氏状態に自然となってしまった、みたいなことかなと。

収入が少ないであろう動画の人達に対して、会社側で御飯(+味噌汁?)は用意して、おかずだけ200〜300円で買ってくればひとまず一食はありつける、てな工夫をしていたあたりは賢いなと感心したり。もっとも、動画の人達の収入が少なすぎるのがそもそもおかしいのだけど、おかしいおかしいと言っててもどうにもならんし、ああいう形で何か工夫をしていかないと。 *1

見本市そのものは、予算超過する事例がほとんどの上、閲覧者数が固定してしまって芳しくない状況らしい。もしかすると、この番組自体がテコ入れの一種、なのかなと邪推したりもして。なんでもそのうち、NHKで見本市の作品を一部流すかも、みたいな話をどこかで見かけたので、そこでまた少しでも盛り上がってくれたら、と期待していたり。せっかくローニャ作って、NHKと多少は繋がりができたのだろうから、NHKと組んで色々やってみたほうが面白く、なるのかな、どうかな。

何にせよ、面白い、というか興味深い番組でした。企画を通した人も、取材スタッフもGJだなと。ある意味、リアルSHIROBAKOというか。

ふとなんとなく思ったけど。ジブリが大昔の東映動画ノリを継承・発展させたスタジオなら、スタジオカラーは大昔の虫プロノリを無意識のうちに継承してしまったスタジオ、てな位置づけになったりするのだろうかと。工場 vs 作家集団、みたいなものかなと。

TwitterのTLを眺めてたら、「女性キャラの乳首や股間はそのまま映してるのに、アニメーターが飲んでる豆乳にはぼかしを入れてる」と気づいた人が居て。日本社会って何か変だなと思いました。まあ、NHKの番組だから仕方ないのだろうか。そういや、昔放送されてたNHK教育のパソコン講座番組でも、ノートPCのメーカーロゴ部分にテープ貼って隠してたっけ。そういうアレかな。

それはともかく。予約録画の入れ方に失敗して、途中でチャンネルが変わってしまい、前田氏の発言のあたりはごっそり見れなかった。この番組、再放送してくれないものか…。

*1: 構造部分を改善せず、場当たり的対処でどうにかしちゃうあたりが、アニメ業界らしいというか、日本的というか、そんな感じもするのだけど、何もしないより、はるかにマシなはずで。

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

#1 [cg_tools] Xprite用のテスト画像を作成中

昨日、Xpriteを試用した感じでは、計算誤差が酷過ぎて話にならなかったのだけど。大き目の画像で使えばまた違ってくるのか気になったので、試しにそれっぽいテスト画像を作成しているところ。 最初は CLIP STUDIO PAINT PRO で描いてたのだけど、見るからにヘタクソで嫌になったので、途中から EDGE2 でベタッとした塗りのテキトーなパーツを作成。

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

#1 [web] 「ココ。」って何だろ?

Google検索していたら、この日記もリストアップされたのだけど。何故か、日記のタイトルに、「 - ココ。」という文字列が追加されていて、「なんだコレ?」と。

例えば、「mieki256 diary」で検索すると、
mieki256's diary - ココ。
blawat2015.no-ip.com/~mieki256/diary/
と表示される、みたいな。
Firefoxでの表示結果


「" - ココ。"」でググってみたものの、あまりにも一般的な単語なので、それらしい情報には辿り着けず。

ただ、どうやら世の中には、「はてなココ」なるものがあるらしく。ソレと関係あるのだろうかと思えてきたり。常用してる Firefox には、はてなブックマーク用のアドオンを入れてあるから、ソイツが何か変なことをしてる・検索結果ページを後から書き換えてる可能性もあり得る…。だとすれば、他のブラウザで閲覧すれば結果が違ってきそうだなと。

Google Chrome や Opera でも確認してみた。しかし、やっぱり「 - ココ。」がつく。するとどうやら、Google 自身がこういうソースをブラウザに送ってきてるみたいだな…。はてブを疑ってしまってゴメンナサイ。

どこぞの業者が、「ココ。」というサービスを作って、Web上のあらゆるblogをランダムに横取りして、「これは俺の作ったコンテンツだ!」とGoogleに登録してたりするのかなと思ったけれど。表示されてるURLが違うURLになってるわけではないし…。というか、「ココ。」で検索してもリストアップされにくいので、そのサービスは名前からして絶対コケるだろうと思えるし。

わからんなあ。「ココ。」って何だろ?

他のページはどうなんだろう。 :

同じ自宅サーバに置いてある、 _Free Photograph も検索してみたけれど、こっちは「ココ。」がついてこない。自宅サーバ上で公開してるページには全てつくのかなと思ったけれど、日記ページだけについてくるみたいだな…。

全然関係ないけど。件のページ、デッドリンクがたくさん…。でも、修正面倒臭いなあ…。

#2 [web] この日記はbing八分になってるっぽい

Google検索じゃなくて、bing検索でも、「- ココ。」は出てくるのかな? と疑問が湧いて確認してみたのだけど。

bing検索では、そもそも「mieki256 diary」で検索しても、この日記がリストアップされなかった。ぎゃふん。

この日記って、アクセス数の半分は、bingbot の絨毯爆撃でして…。Googlebot のアクセスより多くて、あまりに酷くて困ってしまって。robot.txt も効果が無いし、仕方ないからbingウェブマスターツールでアクセス頻度を設定してみたけど、目に見えるほどの変化も無く。

それでもまあ、検索した人のお役に立つ場面があるのでしたら…と思ってたけど。検索結果には出してくれてなかったって、なんじゃそりゃあ!

気になって調べてみたところ。どうやら bing八分はよくある話だそうで。bing には、利用者レベルでも容易に実行できる、特定サイトをbing八分に追い込んでいくテクニックがあって。おそらく業者が自身のサイトを上位に出すために、そのテクニックを駆使してる可能性がある、てな話が。

この日記も、その巻き添えを食らったのかな…。

や、別にbing検索で上位に出してほしいとか、そういう希望は全くないのですけど。むしろ下のほうに出してほしいぐらいで。要するに、クローラーのアクセスが多過ぎて自宅サーバには厳しいからもうちょっとなんとかしてほしいな、てのが希望で。どうせ検索結果に出してくれてないなら、クローラーのアクセス回数をもっと減らしてよと。検索には出してやらんがお前のページはガンガン寄こせって、わけがわからないよ。

待てよ。もしかすると、bingbot の名を騙る、どこぞの業者のクローラーが存在してたりするのだろうか? でも、そんなことして何になるんだろう。DOS攻撃がどうとか? ってほどのアクセスでもないしなあ…。

「ココ。」も、bingも、何がしたいんだか分かりません…。

#3 [pc][digital] ALPS電気からロータリーエンコーダについてのメールが届いた

マウスのホイール部分で使えそうなロータリーエンコーダを、ALPS電気の通販サイトで一週間ぐらい前に注文したわけですけど。直後に自動送信で「注文を受け付けましたよ」メールが届いて、そこから一週間経ってから、「○日ぐらいに発送できそう」てなメールが届いた。ことをメモ。

「全然連絡がこないな…。受注品だから用意するのに数週間かかる、とは書いてあったけど…。本当に注文できたのかな…。でも、自動送信メールは届いてるわけだし…。だけど担当者が気付いてなかったらどうしよう…」と若干不安だったのだけど。とりあえず連絡が来て一安心。

ということで、ALPS電機は、注文してから一週間ぐらい待ってると、その後の連絡が来るみたいなので、個人で注文した人はのんびり待ちましょう。みたいな。

企業相手ならこのあたりの対応も違ってくるのかもしれないけれど、個人相手、しかも数個だけ売ってください、という極めて都合良すぎる我儘な話ですから…。フツーこの手の部品って、個人に売ってくれないだろうから、何週間〜何ヶ月かかろうと売ってもらえるだけでもかなりありがたい話だよなあ、と個人的には思っているのでした。お手を煩わせてしまってスミマセン、みたいな。

しかし、まさか、その数個を作るためだけに機械を動かす、とかだったらどうしよう…。もしそうなら申し訳なくて、こっちの胃が痛くなってくる…。ある程度ガーッと作って置いといて、無くなったらまたガーッと作って、てなソレならいいのだけど。しかしソレだと不良率とか関係してきそうな。でもないのかな。

しかし、この部品、秋月等の店で大量に仕入れて通販してたらいいのに。と思ったけど、マウスのホイール部分をわざわざ修理・交換して使い続ける人なんてフツーは居ないから売れないか…。

ホイールクリックが「グニャカチッ」じゃなくて「カチッ」のマウスを入手できれば済む話なんだけどなあ…。

#4 [zatta] 電気ファンヒーターをバラしてみたり

妹所有の電気ファンヒーター(山善販売品)が、風は出てくるけどちっとも暖かい風が出てこない、ヒーターが働いてないみたい、という話になって。

裏面シールには、モータ用とヒータ用のヒューズが入ってますよと書いてあって。数年前に買った製品だから保障期間は切れてるし…だったら…ヒューズ交換だけで直ったら儲けものだし…とバラしてみたり。と言っても、ネジを回してケースを開いただけですけど。

中を見て驚いたというか感心したというか。ヒューズがケーブルに直付け、かつ、熱収縮ケーブルで固定。切れても交換はまず無理。こういったヒューズって交換可能にするために、基板に金具が乗ってて、そこに差し込んであるものと思ってたけど。スゲエなあ、ここまでコストダウンするのか…。

いや。そういう理由じゃないのかも。ホコリが多い場所で使われる製品だから、基板だの金具だのではホコリが溜まってショートして火事になる。交換が難しくなるとしても、チューブで固定したほうがはるかに安全なのだ、ということなのかな。ユーザが掃除してくれるかどうかなんて、ほとんど期待できないし…。

さておき。そのケーブル直付けのヒューズは、切れてるように見えない。まあ、通電を確認したくても、チューブを切り裂かないといけないので難しいわけだけど。…もしかするとこっちはモータ用かも。

すると、ヒータ用もあるはずだけど…これが見つからない。かろうじて、ヒータ用の板の横に、抵抗っぽい感じの何かがついてるのを発見。これがソレなのかなあ…。

ヒータ用の板は、組み立ててネジ止めした後で、出っ張りをペンチで捻って固定してあるように見えた。また外すことは絶対考えてないな…。仮にはずせたとしても、交換部品が分からんな…。

ということで諦めて、「直せませんでしたゴメンナサイ」と。100Vを使う電気製品だから無理しちゃいかんよなと。火事になるし。

その後、気になってググってみたけど。もしかして、温度ヒューズなるものだったのかなあ。昔のビデオデッキでも使ってたらしいし、ファンヒータ用として売られていたりもするようだし。自分が知らないだけで、メジャーな部品だったのかもしれない。

ヒューズの半田付けも、別に珍しくはないらしい。たまたま自分がこれまでバラしたアレコレが、交換可能な作りだっただけ、かもしれず。何にせよ、勉強になりました。何の勉強だかわかんないけど。

#5 [unity] ApplyGravityの謎

人体モデルを Mecanim でアニメーションさせて、スクリプトで動かしてやりたい。ということで、 Mecanimのサンプルを眺めていたり。

_Mecanim Example Scenes by Unity Technologies -- Unity Asset Store の中の、Animator Controller.unity というサンプルを眺めて勉強を。しかしコレがよく分からない。

サンプルを動かしたら、重力計算をしているように見えた ―― 高いところから落ちると下にちゃんと落ちていくのだけど。どこでその処理をやってるんだ…?

サンプル内の人体モデルには、 _Character Controller と、スクリプトが割り当てられていて。Character Controller は重力計算をしてくれないので、 _スクリプト内で重力加速度を加えたり 等をしないといけない、と思ってたのだけど。

スクリプト、IdleRunJump.cs を眺めても、それらしい記述が無い。なんだかちょっと関係ありそうなのは、以下の1行だけ。
	public bool ApplyGravity = true; 
この、ApplyGravity は、宣言・代入はされてるけれど、スクリプト内で参照されてない。なのに、サンプルは重力が働いてる…。

自分の自作の Scene 内で、IdleRunJump.cs を使ってみた。…重力は働かない。だよなあ。

と思ったが、Inspector 内で、スクリプトが上、Character Controller が下になるように配置したら、重力が働いた。なんでや…。この ApplyGravity って、一体何者なんだ…? ググってみても、解説どころか使用例すら出てこない。ワケワカラン。

ApplyGravityは関係ないのかな。 :

ApplyGravity を false にしても重力が働いた…。なんでや…。

CharacterController を削除してみた。重力が働かない。追加してみた。重力が働く。変だなあ…。CharacterController は重力計算と関係ないはずだったのでは…。

なんだか分かってきた。Animator の Apply Root Motion が関係してる…? この、Apply Root Motion は、以下の意味を持ってるらしいけど。
  • チェックを入れると、モーションで座標移動する。
  • チェックを入れないと、スクリプトで座標移動する。
チェックを入れると重力が働いて、外したら空中に浮いたままになった。

すると、Animator が重力計算をしているのか…。いや。違うか。だって、CharacterController を外すと重力計算しないのだし。Animator が重力計算をしているなら、CharacterController を外しても落ちていくはず。

もしかすると、CharacterController が、Animator の存在、かつ、Apply Root Motion をチェックして、有効だったら重力計算をするようになっている…?

でも、そうなると、スクリプト内の ApplyGravity って、何に使ってるんだ…? ワケワカラン。

この記事へのツッコミ

Re: ApplyGravityの謎 by 名無しさん    2017/03/09 19:19
同じところで詰まっています。
記事者さんは解決されたのでしょうか?
Re: ApplyGravityの謎 by mieki256    2017/04/28 19:17
返信が遅くなってスミマセン。
その後Unityは触らなくなったので、たぶんコレって謎のままだった気がします…。

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

#1 [neta] スペースハリアーをオンラインゲームにしたらどうなるのかなと妄想

あの自機が16〜64個ぐらい画面に表示されている映像を思い浮かべて、これじゃゲームにならないなと。

実際に作るとしたらどういうゲームになるんだろう。そもそもSTGって、オンラインゲームだかネトゲだかになるんだろうか。…FPSみたいな見た目にすればいいのかな。

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

#1 [python] PythonやGtk+関係をインストール

GIMP Python を使いたいので Python や Gtk+ をインストール。 _2011/08/02 のメモ を見ながら作業。

注意事項。GTK+関係はインストーラがバグってたりする・pathを全消去するバグを持ってる版があったりするので、環境変数のバックアップを必ず取っておいてから作業すること。

GIMP Python は Python 2.6系しか対応してないので、標準状態では 2.6.6 を使うことにする。よって、下の順番でインストール。Python そのものについては最後に 2.6.6 をインストールすることで、2.6.6 に関連付けする。

各バイナリの入手元。

_ftp.gnome.org - glade3
_Python標準リリース
_Download Python
_ftp.gnome.org - pygtk
_Python Imaging Library (PIL)
_Python for Windows extensions - Browse /pywin32 at SourceForge.net
_py2exe - Browse /py2exe at SourceForge.net
_Downloads - pygame - python game development
_PyOpenGL 3.0.1 : Python Package Index
_Numerical Python - Browse /NumPy at SourceForge.net
_wxpython download stable
_setuptools 0.6c11 : Python Package Index

余談。 :

Pythonは後方互換について軽視しているせいで、Pythonを使ったアプリは特定バージョンを要求することが多い。そのため、あらかじめ色んなバージョンをインストールしておかないと、後でハマる。どうにかならんのか。

GIMP をインストール。 :

  • gimp-2.6.11-i686-setup-1.exe
  • gimp-help-2-2.6.0-ja-setup.exe
  • GAP_2_6_for_Gimp_2_6_Windows_by_photocomix_resources.zip
以下はバイナリ入手元。

_GIMP - Windows installers
_GAP-2.6 for Gimp 2.6-Windows by ~photocomix-resources on deviantART

GAP というのは、GIMP でアニメを作るためのプラグイン集みたいなもの。フレーム管理みたいなことができたり、パスを指定してレイヤーを移動・拡大縮小・回転したりできる。

PyGtk関係がちゃんとインストールされていれば、GIMPインストール時の項目選択時に Pythonなんたらのグレーアウトが外れているはず。

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

#1 [nitijyou] 痛みはかなり治まったので様子見

たぶん、実際に痛い時に病院に行かないと、「おかしいところはありませんねえ。精神的なものじゃないですか?」とか言われてしまったりするのではという気がしてきたので、このままで様子見。

#2 [flash] 点と多角形のアタリ判定でハマリ中

方法としては、点から伸ばしたレイと、多角形を構成している複数の線分が交差する回数を数えて、交差回数が奇数だったら内に、偶数だったら外に点がある、と判断するソレなのだけど。

レイを伸ばす方向を、斜め方向、(画面横幅 x 2, 画面縦幅 x 2) ぐらいにしていた時には正常に判定できているように見えたものの。ふとなんとなく、水平方向にレイを伸ばしてみたところ、多角形を構成する線分の頂点上、つまりは多角形を構成する線分の始点もしくは終点上にレイがある場合は判定に失敗することに気付いた。どうも線分の交差を判定する際に、頂点上で交差する場合は交差しないと判定する作りだったらしい。

であればと、線分の始点もしくは終点上にレイがある場合も交差してると判断するように変更してみたところ、これでも失敗してしまう。考えてみれば、多角形データは頂点を羅列してあるデータだから、例えば線分1の終点と線分2の始点は重なった状態にあるわけで。であるから頂点上にレイが来た時、1本分だけ交差してると判定してほしいところで2本分交差してるとカウントされて、交差回数が1回増えてしまい奇数偶数による判断が間違ってしまうという。

解決策としては、どうせレイを水平方向に伸ばしているのだから、点のy座標(=レイのy座標)と、線分の始点終点のy座標を比較して、yの値が大きいほうは無視してしまう、というやり方がありそう。と思いながら検索していたら、やはりそういう方法で解決しているサンプルを見かけた。そのサンプルを参考にしてどうにか。

他にも、交差していると判断する際に、そこが重なっている頂点上なら特別扱いをしてカウントする、という手もありそうな。あるいは、あらかじめ線分の始点終点に若干の変更を加えておく、という手もあるのかもしれない。そのあたりはちと上手い誤魔化し方(?)が思いつかなかった。今後の課題。

余談。 :

交差回数が奇数か偶数かで内外判定を行う、というやり方は、自分が学生の頃に Oh! X あたりで知ったような記憶が。そこでも、多角形の頂点の扱いをどうするか、とか、水平方向にのみ伸びている線分はどう扱うか等々問題点も紹介されていて。要するに、結構古くから知られている方法のはず。

で。オリジナルは誰がどの時期に考えたのか、気になるわけで。外国の方が考案したのか、日本人が考案したのか。誰なんだろう。どこかに情報はないものか。

各方法に、考案者名がついた状態で普及すれば良かったのに、と思ったりもする。 _Bresenham's line algorithm みたいな感じで。そうすればこのあたりもスッキリするのにな…。特許には愛称・通称の類も設定するよう強制したほうが良いのでは。みたいな。いや、実はそういう記入欄・項目があるのかもしれないけど。

どうしてそのあたり急に気になったかというと。検索してたら比較的近年になって似たような感じのソレが多数特許申請されているようで。特にキヤノンあたりからは、何人もの人がいくつも出してるみたいなんだけど。キヤノンの中で、何かそういうコンテストでもあったのだろうか? まさかとは思うが、毎月何本特許申請しろとか会社からノルマをかけられて、苦し紛れにパクって出してしまった新人が居るとかそういう…いや、まさかね…。

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

#1 [pc] どういう環境にすればいいのかで延々と悩んでたり

開発用PCがDVI接続だったら、どれも練り直しが必要になりそうな。

とりあえず、CPU切替器、ディスプレイ切替器、液晶ディスプレイを一日中物色。液晶ディスプレイに関しては、「これだ!」というものが選べず。sRGB対応機で十分なのだけど、入力端子が…。PIP機能等もなんだか気になるし。あったらあったで便利だろうか。それともまったく使わないだろうか。ディスプレイは、一度買ったらそうそう買い替えるものでもないし、どれも5万円以上はするものなので、非常に悩む…。

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

#1 [anime][neta] 劇中の変身アイテムと店頭に並んでる玩具の間にも不気味の谷があったりしないか

てなことをなんとなく思ったけどどうなんだろう。

不気味の谷を乗り越えるためにはどんなアイテム設定もしくは玩具の作りにすればいいのだろうか。 :

変身アイテム側が、変身するための機能の全てを備えているという設定ではなくて、アイテムを使うユーザ側に、変身するための能力が備わってるかどうかも設定として盛り込む、とか? 不気味の谷は玩具側にあるのではなく、玩具を使ってる子供の側にあるのだと認識させちゃう、みたいな。

例えば、劇中においても、また、玩具においても、複雑な操作をしないと変身リアクションが出てこない、とか。格闘ゲームのコマンド技みたいな感じで。でもそれだと、コマンド技を使えない子供が出てきて泣かれてしまいそう。となると、誰でも出せるコマンド技をそこに盛り込んでおかないといけない。

劇中ではこんな感じの展開に。変身ベルトを入手した主人公は、最初のうちは、簡単なコマンド入力で誰でもなれる「簡易仮面ライダー」で戦ってる。が、そのうち強力な敵が出てきて負けてしまう。しかし、たまたま、先輩ライダーと出会う。「お前はどうして本当のライダーに変身して戦わないのだ?」「そのベルトを俺に貸してみろ!」。複雑なコマンド入力をして本来の仮面ライダーになって戦う先輩。主人公も真似をして、何度か失敗するが、最後には本当の仮面ライダーに変身。その後も劇中では、別の人達がベルトを横取りして変身して簡易仮面ライダーが出現するが、本当のライダーに変身するための操作をマスターした主人公のほうがやっぱり強い。みたいな。

TVCMでは、テロップでコマンド入力が画面表示されつつ、音声合成で「ライダー・レベル1!」「ライダー・レベル2!」「ライダー・レベルMAX!」てな感じで映像と音声が。「君は、ライダーレベルMAXになれるか!?」などと煽ってみたり。

サナギマンだな。ていうか、ライダーカブトっぽいな。>簡易仮面ライダー。

変身ベルトにパズルがついてるようなものか…。変身ベルトにジョイスティックがついてたり、ルービックキューブがはめ込まれてたりするんだろうか。なんじゃそりゃ。

#2 [anime] まだ番組は終わってないけどライダーキバについてもやもやと

色々と画期的なことをしてるように思うのだけど、どうも今一つ上手くいかなかった作品のように今のところは思えていたり。>ライダーキバ。

どういうところが画期的だと思えたのか列挙してみる。 でも、それぞれ、以下のような感じになっちゃった。 なんだか色々ともったいない感が。

別の時代を示す何かについて。 :

なんとなくだけど、「過去と現代」云々は、ナレーションをズバッと入れて表現しちゃったほうが良かったのかな、と思わないでもない。言葉にして説明すれば、子供さんだって判るだろうし。かつ、時代をまたいで本編に一本筋を通す「語り部」的キャラを置くことができて、全体の見通しがちょっとは良くなったかもしれない。本来であれば、喫茶店のマスターや、青空の会の上司あたりがそのへんの役になれたのかもしれないけど…。

いやまあ、ナレーションの類をつけず、映像のみで時代が違うことを示すというのも、作り手にとっては実に工夫のしがいがある・やりがいがある仕事だとは思うし。見ていて感心した切り替え方も多々あったように思うので、それはそれで、な感じなのだけど。とはいえ、子供さんはついてこれてるのかな、というのがどうにも気になってしまう。子供さんってのは、なんだかよくわからないと思った時点で即「つまんない」と切り捨てて視聴を止めてしまう、そんなシビアさを持ってそうでもあるし。そうなったら玩具も売れない。いや、実際そのへんどうなのかさっぱり判らんのですが。戦闘シーンさえあればそれだけでも子供さんはついてくるのかもしれんし。あるいは、戦隊とライダーでは別の年齢層をターゲットにしてるのだろうから用意する「判りやすさ」もそれぞれ違ってきて当然、という予感もあるしで。どうもよーわかりませんが。

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

#1 [prog] _AutoStitch - パノラマ写真

_horirium | パノラマ写真がスゴすぎる!

_hugin - Panorama photo stitcher :

_Microsoft Live Labs: Photosynth - Video Overview :

_pa_player - レガリアレジデンス千石ファディックス :

ゲームの背景表示をどうしたらいいかで悩んでたり。 :

上記のパノラマ表示はどうやって実現してるんだろう…。何故に上方向に注視点を動かすと遠近感があるように表示されるのか…。元画像は2D画像であろうに…。

ホームページビルダーにもパノラマ画像を表示するアプレットが :

あることに気づいた。テストしてみたり。 _こんな感じに。 しかし、やっぱり仕組みがどうもよくわからん…。

_Ryubin's Flash Panorama :

_PanoSphere V1.1 Home Page

立方体だったのか…!

該当ツールをDL・インストールして、立方体表示用の画像を出力してみて、なんとなく納得。 _元の画像からして歪んで(?)いる のだな。だから立方体で表示しても不自然に見えないのか…。

_BackPic - 3DCG用背景画像集 :

#2 [cg_tools][game] _2.5D のゲーム表現 - Game Scripting Memo

_背景への無関心 - 2007-02-14 - BLUE ON BLUE(XPD SIDE)
_腐り姫 - Wikipedia

興味深い。

#3 [game][neta] ゴルフゲームとエロゲーを組み合わせられないだろうか

てな電波をキャッチ。

脱衣ゴルフゲーム、とかかなぁ。しかし今時脱衣モノってどうなんだ。あまり売れない予感。

女体をゴルフコースに見立ててゴルフするってのはどうか。…などと書いては見たけどイメージがわかない。そもそもどんなシチュエーションなんだ。SFか。ミクロの決死圏か。

#4 [anime][cg_tools] _24人のシュヴァリエ 第17回 - Production I.G [作品詳細]

_2003年7月度 特別セミナー実施報告 - 「VFX−フォトリアリティへの挑戦」
_遅い・・・ - CGプログラマな就活日記

カメラマップなるものが気になる。

#5 [tv] スルー力は凄いけど恐ろしいかも

数日前に、NHK「ためしてガッテン」で、「怒り」をテーマにした実験映像が流れてた。心拍数を調べる装置をつけた被験者に、それとは知らせず、喫茶店内で最悪な接客に直面させ、その心拍数を測るといった実験で。大体の人は、酷い接客を目にして、どんどん心拍数が上がっていって怒り心頭に発したのだけど。ただ一人、お坊さんが被験者だったときだけは、まったく心拍数が変わらず。 *1 なんでも、そのお坊さんは、「自分は、この後行われる(と伝えられていた)実験を待つために喫茶店にいるだけで。別に喫茶店でコーヒー等を飲むことが目的ではないのだから、接客などどうでもいいことではないか」てな具合に考えながらそれら接客を見ていたとかで。また、スタジオ内では、「貴方の言動が、私の人生と何の関係があるのだろうか」という境地に達していたのだろうと、解説?喩え?をしていたり。

お坊さんはスゲーなぁ、などと単純に感心しながらも。 *2 もしかすると、これこそがスルー力ってやつなのかな、と連想したり。が、しかし、凄いなと思うと同時に、何か怖いものも感じてしまったり。 スルー力は、トラブル発生を避ける・回避するという点に関しては凄い効果を発揮するのだけど。「何か」を見落としてるような気もしてきた。その「何か」がなんであるかは、自分もよくわからないのだけど。

「人として」云々等を言ってしまったらいかんような気もする。 :

当初、「何か」=「人としてどうなのか」かなと思ったのだけど。それはちょっと違う気もした。

「人として〜」という物言いは、良い結果に繋がるときもあれば、悪い結果に繋がるときもあるわけで。悪しき思い込みとして成立してしまうときもあるから、ちと危険。会津地方に伝わるという、什の誓い ―― 「ならぬものはならぬ」と似たところがありそうな気が。どうしてそれが「ならぬもの」とされているのか、本当にそれは「ならぬもの」なのか、現状でも「ならぬもの」として相応しいのか、そこまで考えた上で語らないといかん気がする。思考停止したまま、自分が洗脳された自覚がないまま、不用意に語り、しかもそれを他者に強要するのは、何か危ない感も。

いや、楽だからつい使っちゃうんだけど。「人としてどうなのよ?」的言い方は、どんな場面でもそれっぽく語ったつもりになれるから、便利ではある。けど、そこにも「何か」、怖さを感じたりして。

*1: 番組スタッフが選んだ職業がいかにもな感じだし、心拍数にまったく変化がないあたり、どうもやらせっぽいなとは思ったんだけど、それはさておき。
*2: いや、やらせっぽいけど…。

この記事へのツッコミ

Re: スルー力は凄いけど恐ろしいかも by 名無しさん    2007/11/23 16:37
まず大乗と小乗の区別をつけたほうがいいと思うよ
Re: スルー力は凄いけど恐ろしいかも by 名無しさん    2007/11/24 07:29
人間性を問うことの是非について、結構有名な言い回しがあります。
---引用開始---
論争に勝とうと思ったら、考えうるもっとも知的に怠惰な方法とはなんでしょう?論争相手が“人間性(humanity)”を欠いている、と主張することです。
(中略)
そうすることで、あなたは相手の考えについてきちんとしたことをなにもいう必要がなくなる。
また、それがあたかも広範な世論であり、あなたには怒りに燃える
多数派がついていて、とことんあなたを支持しているかのような顔ができる……
---引用終わり---
「万物理論」という小説からの引用です(中略部分を含め非常に面白い下りなので、機会があったら一読されるのも良いかと思います)
現実にも人間性の是非を問うのは水掛け論になりがちですし、良い行為とは言えないと思います。
大乗と小乗 by mieki256    2007/12/04 06:55
> 大乗と小乗

検索してみました。
なるほど、仏教にも種類がある
→お坊さんにも色々あるから必ずしもお坊さんが
そういう考え方をするわけではないっしょ、
という話でありませうか。

どちらかが、スルー力万歳的な考えを良しとしてる、
等の状況があったりするんですかね…。
blog界隈でブームになってるソレを見て、
仏教やってる人が「それは俺達がン百年前に通った道だ」
とか思ってたら、なんだか面白いような気もします。
万物理論=SF小説? by mieki256    2007/12/04 07:01
> 「万物理論」という小説

検索してみたらSF小説のページに到達しました…。
グレッグ・イーガンさんとやらが書いた小説、で合ってるのかしらん?

#6 [zatta] _生字引に聞け! 「怒り心頭に発する」

_産経新聞 ENAK 怒りは心頭に…「発する」です 日本語の乱 「気にしない」過半数

上記の記事を書いてる最中、最初は「怒り心頭に達する」と書いてしまったのだけど。「ホントにこれで合ってただろうか」と不安になって検索。…「怒り心頭に発する」というのが正しいとされているのだな。

もっとも、頭のてっぺんまで「怒りメーター」がピーッと来てしまう、てなイメージであれば、「達する」という表記のほうが合ってるような気もする。人間にメーターがついてるというイメージからして、なんだか奇妙ではあるのだけれど。これだけ日常生活の中に「メーター」という概念が入ってきた現代においては、さほどおかしくないイメージ・比喩なのかもしれないと思ったりもして。

#7 [windows] _使えな過ぎて笑う、パワーポイントのクリップアート集:小鳥ピヨピヨ(a cheeping little bird)

#8 [digital] _コンパクトフラッシュ型SDメモリーカードアダプター HPC-CDA01 - Hagiwara Sys-Com

_コンパクトフラッシュ型SDメモリーカードアダプター 対応表
_CF Type I スロット用 SD MemoryCard Adapter CFSD-ADP - IO-DATA
_SDHC-CF変換アダプタ - JOBO SDHC/CF変換アダプタ
_買い物山脈 - CFサイズのSDメモリーカードアダプタ
_本田雅一の「週刊モバイル通信」 - ポストCFを求めて選んだメモリストレージ
_松下、CFサイズのSDカードアダプタに不具合

こういうものがあったのか…。コンパクトフラッシュが死滅したらこれでどうにか。

#9 [prog] テクスチャ貼り付け確認用のテクスチャを作成

パノラマ画像変換・表示ツールの類がどのような結果画像を出力するのか確認したかったので、升目を並べた画像を作成。

さすがにCGツールを使って手作業で作るのは辛そうだったので、Python + PIL でスクリプトを書いた。こんな感じ。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# テクスチャ貼り付け確認用、のテクスチャ画像を作成するスクリプト
# フォントファイルは Windows/Fonts/ からコピーしてきた

from PIL import Image, ImageDraw, ImageFont

width = 1024 # 画像横幅
height = 512 # 画像縦幅
xw = 32 # 1マスの幅
yh = 32 # 1マスの高さ

outfilename = "test.bmp" # 出力ファイル名
fontname = "arial.ttf" # フォントファイル名
fontsize = 12 # フォントサイズ

# マスを色分けする際のカラーリスト
colorlist = [
    (0x40,0x40,0xff),
    (0x00,0xff,0x00),
    (0x00,0xff,0xff),
    (0xff,0x00,0x00),
    (0xff,0x00,0xff),
    (0xff,0xff,0x00),
    (0xff,0xff,0xff),
    (0x80,0x80,0x80)
    ]

def makeImage():
    # 新規画像作成
    img = Image.new("RGB", (width, height), (0,0,0))

    # 画像に対して描画するためのモニャモニャ
    draw = ImageDraw.Draw(img)

    # 画像に対して文字を書き込むためのモニャモニャ
    font = ImageFont.truetype(fontname, fontsize)

    colindex = 0
    numberindex = 0

    for y in range(height/yh):
        y0 = y * yh
        for x in range(width/xw):
            x0 = x * xw
            col = colorlist[colindex]
            str = unicode("%03d" % numberindex, "shift_jis")

            # マスを塗りつぶす
            draw.rectangle((x0,y0,x0+xw,y0+yh), fill=col)

            # 文字を書く
            draw.text((x0+4,y0+4), str, font=font, fill=0)

            # マスの枠を描く
            draw.rectangle((x0,y0,x0+xw,y0+yh), outline=(0,0,0))
            
            colindex += 1
            colindex %= len(colorlist)
            numberindex += 1

    # 画像をファイルとして保存
    img.save(outfilename)

def main():
    makeImage()
    print "complete."

if __name__ == "__main__":
    main()

こんな感じの画像を出力。
テクスチャ貼り付け確認用画像

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

#1 [iappli] 音量調整はできるみたい

とりあえずN506iでサウンドの音量調整が効いたので、音割れするという機種で音量を下げるように条件分岐を追加。該当版を相手先に送った。

午前中にバグ報告が来たので、該当部分を修正してまた送った。時期的に来るかなと思って待機(?)してたので、すぐ対応できた。助かった。

#2 [comic] 「豪放ライラック」桑田乃梨子著 2巻を読んだ

妹が買ってきたので(以下略。特にこれといった展開になるわけでもないのだけど、ついつい読んでしまう。めちゃくちゃ面白いわけでもなく、さりとてまったくつまらないわけでもなく。何が魅力なのかよくわかってないのだけど、面白い。

メインとなるキャラの後ろで、サブキャラが書き文字で勝手気ままに発言してるあたりが面白いのかもしれん。そのことで作品の情報密度がどんどん上がってる。 _カロリーヌ シリーズと同様に、作品中のあちこちで、サブキャラが一体何をしてるのか、読者が認知していくあたりが宝探しのようで面白い、のかも。いや、宝探しというほど配置に凝ってるわけでもないのだけど。

#3 [tv] のだめカンタービレ、ドラマ版。Sオケ初公演の回を見た

盛り上げ方が上手いなぁ。漫画と違って、音楽を使えるのは強いな、などと感心もしたり。一番盛り上がる場面で、壮大なオーケストラ曲が流れ、しかもそれが本編内容と一致してるわけで。これは強いわ。これで盛り上げられなかったら、演出家の資質が問われてしまいそう。

DVシーンのまとめが披露されたのがありがたかったり。 :

10回ぐらいコマ送りで再生してしまった…。絶妙のタイミングで人形を使ってるあたりが上手い。感心した。

ドラマにおいて人形を使うシーンと言うと、大体が、断崖絶壁から飛び降りる人とか、そういうものに使われてしまうわけだけど。じっくりと長い時間、骨の無い、不自然にぶらぶらする手足を映してしまって、「ああー、いかにも人形ですなぁ」と判ってしまって興醒めしてしまうのが常で。

が、この作品は、極めて短い一瞬、前後のカットとそれなりに連続性を持たせて人形と差し替えているので、初見ではまず気づかないだろうと。モンタージュ技法の巧みな活用がそこに見られるわけで、実に上手いとしか言いようがない。 *1

こういうのを見ちゃうと、例えば、特撮ヒーロー番組でも、もっと工夫のしようがあるような気もしてくる。バカ正直に、スーツアクターさんに苦行を要求したりせず、もっと強烈な、それでいて事故も起きない、そんな映像を作れそうな。…などと、いかにも素人臭いことを思ったりもして。 *2

よくよく考えてみると、「殴る」「蹴る」のためにわざわざ人形が用意されてる時点で、異常なドラマだよなぁ。なんだ、この作品…。<褒めてます。

アニメシーン。 :

それなりに気合い入ってるなぁ…。ただ、もっとチープ感が欲しかったような気もしたり。いや、難しいよな、そのへん。

*1: ただ、肌の色が異なってるシーンもあって、そこは杜撰だなと思ったりもして。色の違いは大きい。パッと見でも判ってしまう。逆に言えば、色さえ一致してれば後は動きの激しさでどうにでもできそうだなと。また、今回の演出家はコマ数(?)を弄る手法にあまり気を配ってないようで。役者を飛ばすカットと人形を飛ばすカットで速度が違ってしまったり、役者に対してモノを当てるカットをベタッとした速度で流してしまったり等、なんだかもったいないところもあったり。…調整する時間が無かったのか、それとも逆に、わざとらしさを見せたいと思ったのだろうか。
*2: つーか特撮ヒーロー畑だったら破壊専用の人形を開発してもいいような気もするんだがそこはやっぱりスケジュールと予算が問題なのだろうか。…まあ、そのへん、CGに期待、なのかな。ウルトラマンシリーズなどは、そんな感じになってきてるし。

#4 [web] 親父さんがplalaのブログサービスに申込みをしたのだけど

アカウント名を取る際に、「どうせURLが指定したソレになるだけだろう」と思い、xxxxblog という文字列にしたら。投稿者の名前も xxxxblog になってしまったわけで…。

一旦サービスを解約して、再度申し込むことでアカウント名 = 投稿者名を直そうとしたら。どうも解約ができないようで。親父さんがplalaのサポートにメールで質問したら、申し込んだ月は解約することができず、かつ、次に申し込むには1ヶ月ほど空けてから申し込まないとダメという。そんなアレなサービスだから、当然、アカウント名のみを変更する機能なんてついてるわけもなく。

アカウント名とは別に、投稿者・ユーザ名にニックネームを使えるような機能でもあればどうにかなりそうだなと思ったりもするのだけど…。そこまで気が利いてるわけもなく。>plalaのブログサービス。

ということで。親父さんのblogへの興味度は、急速に萎んでいったのでした。やってくれますなぁ。>plala。

この記事へのツッコミ

Re: 親父さんがplalaのブログサービスに申込みをしたのだけど by けいと    2006/11/11 16:34
> 申し込んだ月は解約することができず、
> かつ、次に申し込むには1ヶ月ほど空けてから申し込まないとダメという。

私はそれでお金をいただく立場なので、ぷらら側の気持ちも良くわかる…;_;

料金計算を日割りでやろうとしたらISPもお客さんもめんどくさい。

通常の売り掛け/買い掛けで料金計算するので当月締め翌月払いが原則なのに
当月加入当月解約だと解約後に料金請求って言うことになるから
当月再加入すると2か月分料金かかっちゃうんですよね。
本人確認を厳密にするわけじゃないから
再加入した人が本当に再加入かどうかもわからない、
となると現実問題としては1ヶ月待ってね、ということに…

ブログのほうもアカウントとニックネームを別々に設定できればいいんだけど
捨てアカ(捨てニックネーム)で使われてしまう可能性も出てくるし、
DB上で一括管理しておけばいいんだろうけど、
利用者が多いとそれもしんどい、ということなのかも。

ブロガー=情報発信者=マスコミもどき=情報に責任を持つべき
っていう考え方がじわじわと出てきているので
この辺の扱いがなんとも難しいです。

某巨大掲示板の管理者が判決結果に従わない
っていうあたりもインターネットと法律のあり方に影響を与えそうですし…

個人的には、
法人や団体格の情報発信者に対して
SSLの証明書みたいな一種の認証を与えて、
責任ある情報管理がされていることを証明するしかないかなぁ、
と思ったり。
個人が雑多な掲示板やブログに書き込むこと自体は
井戸端会議や飲み屋での酒の肴程度の扱いでいいと思ったりします。
個人や企業の悪口なんて小さなコミュニティでは良くある話しだし。

ネット接続を免許制にしろ、なんていう意見もあるけど、
物理的なもんじゃないから止められないだろうし。
ブログサービスの提供にまつわるアレコレ by mieki256    2006/11/12 11:17
> 私はそれでお金をいただく立場なので、ぷらら側の気持ちも良くわかる…

ああ、無茶を書いてしまってスイマセン…。たしかに、一般的には、
ユーザ名 = アカウント名 = ホームフォルダ名、ですしねぇ…。

URLとユーザ名は別にする、なんて機能を実現しようとしたら、
例えば Apache だったら mod_rewrite (だったかな?)等導入したり
することになるのでありましょうか。
たしかに構築する側の作業負荷は増えそうな感もありますな…。
動き始めちゃえばアレだけど、サーバの負荷は増えるのでしょうし…。

でも、料金計算はどうなんですかね。
そこは自動化することが前提ではないのか、という気も。
まあ、今回、想定外の仕様実現要求がユーザから上がってきてしまった、
ということなんでしょうけど…。
仕様策定の際の見通しが甘かったと考えるべきか、
それとも過度の仕様要求であると捉えるべきか…。
Re: ブログサービスの提供にまつわるアレコレ by けいと    2006/11/12 23:17
> URLとユーザ名は別にする、なんて機能を実現しようとしたら

今時だとApacheでいじるんじゃなくて
裏方のDBでユーザー管理とニックネーム管理をすると思いますよ。
ブログってたいていDBが裏に控えていますし。

> 自動化することが前提ではないのか

自動化すると2か月分請求が行きますよ(笑)
それでよければいいのですが、そうは行きませんよね。
Re: ブログサービスの提供にまつわるアレコレ by mieki256    2006/11/15 18:22
> 裏方のDBでユーザー管理とニックネーム管理をすると思う

なるほど。そういう作りになるのですか…。勉強になるであります。

> 自動化すると2か月分請求が行きます

あ、そうか。そんな処理になっちゃう可能性は高いですな…。

まあ、plalaの場合は、plalaの会員情報が別に存在するので、どうにか…
と思ったけど清算処理をする直前に解約したらどうなるのか、
等々、色々問題が出そうですな。
それを考えると一度申し込んだら一定期間解約できないようにしたほうが
対策は楽というか、問題が出にくい感じがする…。

一番手っ取り早いのは、アカウント名を決めるときに
「ここで指定した文字列は投稿者名として使われます。
 絶対に間違えないように!」
「解約は、申し込んでから1ヶ月経たないとできません」
等、注意書きをハッキリ見せておく、とか…。
まあ、見落とすユーザは絶対に見落とすでしょうが、
そのへん特に示さないよりはまだマシかも。
Re: ブログサービスの提供にまつわるアレコレ by けいと    2006/11/15 20:26
> 清算処理をする直前に解約したら

ぷららのように大量にユーザー抱えているところは
加入年月と退会年月を比較して
同じだったら「翌月に課金」フラグを立てるんだと思います。

> 一度申し込んだら一定期間解約できないようにしたほうが

これは問題ありですよね?
やめたいのにやめられないって言うのは商売上まずいんじゃないかと。
Re: ブログサービスの提供にまつわるアレコレ by mieki256    2006/12/01 21:05
> やめたいのにやめられないって言うのは商売上まずい

マズイですね。マズイけど、現状のplalaはそうなってるしなぁ…。

このへんの仕様・取り決めって難しいですな。
あまり複雑にしてもユーザが理解できなかったりもするんだろうし。
かといって、シンプルにし過ぎて不満が出てくるようでもアレだし。

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

#1 [digital] _NTT、曲げ半径2mmの光ファイバ開発。「折り」「曲げ」や「結び」も自在

素晴らしい。これで家の中でも光ファイバーが…と思ったが、無線LANのほうが家庭内では主流になるのかな。爆速有線より、そこそこの速度で無線のほうが使い勝手がいいよなぁ。

#2 [flash] FLASHでユーザ認証ってどうやるんだらう

CGIとやり取りするのかな。

_GAC なぜなにGAC->ActionScript->FLASHからASPへIDとpassの渡し方
_GAC なぜなにGAC->CGI->FlashゲームとCGI
_GAC なぜなにGAC->ActionScript->flashで作成した掲示板について
_GAC なぜなにGAC->CGI->過去ログは参照したのですがCGI→FLASHの変数の受渡しが上手くいきません。
_GAC なぜなにGAC->Flash->外部テキストへの『書き込み』
_FLASH-JP.COM - FLASH-japan FORUM
_FLASH-JP.COM - フォーラム サーバ関連【CGI・FCS・XMLSocket etc】

そうみたいだ。

ただ、safari + flash、Opera + flash で不具合が起きる場面があるかもしれないという話も出ているような感じがするあたりがちょっと気にならないでもないが safari と opera では動作の保障はしないと書いておけば済む話かもしれん。いや、ブラウザ種別を判定できればいいのかな。

#3 [flash] FLASH関連のデモ

メモ。

_画像を歪ませるサンプル
_歪ませた画像を立方体に貼り付ける(8枚/面)
_(via FLASH-JP.COM - フォーラム)

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

#1 [digital] _AVOX ADSS-02XSで遊ぼう

_ADSS-02XS
以前、どこぞで見かけて気になってたのだけど。検索してみたら…うーむ。ボケボケの画面だなぁ…。

_撮影枚数はフラッシュ無し連続撮影で約30〜40枚 :

厳しい…。

_ピントが1.2m付近に固定されている様子? :

厳しい…。

でも :

パソコン・カメラ機能が気になる。ライブカメラに使えないか、みたいな。

ピントが問題になるから使えないか。

#2 [zatta] _アンケートで分かった「心の病」の悲惨な実態

_(via ネットワーク・セキュリティ・ニュース)

#3 [pc] _FreeMind

_Gon's BLOG: MindMap
_削除操作を Delete キーに割り当てる
_FreeMindの操作法をマインドマップ
_矢印を引く
_(via A Way Out)
マインドマッピング。

_IdeaFragment2 :

KJ法。

#4 [digital] _VirtualRD for Windows

ネットワークを使用して、 RD-XSxx → PC ができるらしい。こんなものもあったのか…。NEC の AXxxx ほどじゃないけれど、 *1 これで充分かもなぁ…。

_録画番組を同一ネットワーク内にあるパソコンから視聴できる「ネットdeモニター」機能 :

対応OSは、Windows XP/2000およびMac OS 10.3で、再生プレーヤーとしてQuickTime 6.5.1以降が必要になる。
オイラのPCの G400DH は、QuickTime を TV に出力できないねん。 *2 何故に QuickTime かな…。そのほうが視聴に制限を設けやすいのかしら。

_PCとLAN等で接続し、録画した動画をPCへ吸い上げられるDVDレコーダー :


*1: NEC の AXxxx は、PC → xxx も可能。らしい。
*2: オーバーレイ、とやらでしたか。アレが有効にならない。mpeg や avi は有効になるのだけど。何故に QuickTime だけ…。

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

#1 投票してきた

日頃虫けらの如く扱われる我々が正々堂々と上の人に異議申立てができる唯一の機会だものこれは行使せねば。というわけで反体制の一矢をシュッシュッと。

#2 [pc] M/Bの電池買ってきた

親父さんのPCの時計が盛大にズレまくり。たぶんM/Bについてるボタン形電池の寿命なのだろうと。てことで投票の帰りにCR-2032を買ってきた。

_ボタン形電池じゃなくてコイン形電池なのか :

知らなかった。

#3 [pc] 親父さんのPCにIDE-HDD増設

今は無き Quantam の Fireball 12GB。接続直後は認識してくれた。拡張パーティションしか残ってなかったので、SCSI-HDDの後ろにドライブレターが並んでくれた。ラッキー。しかし、念の為にパーティションを切り直してformatを始めたところでエラー発生。再起動しても認識してくれない。それどころかSCSI-HDDすら認識しなくなってWindowsも起動せず。大ピンチ。

ふと。ケースファンへの電源ケーブルを試しに外してみたら、どちらも認識してくれた。…もしかして電源容量が足りてない? 電源を見たら230Wと書いてあった。うーむ、SCSI-HDD x 2、IDE-HDD x 1、CD-Rドライブ x 1、DVD-ROMドライブ x 1、ケースファン x 3 を動かすのは無謀だろうか。

仮に電源容量が足りてないとして。さてどうしよう。思いつくのは、 …ぐらい。しかしどれも新たな出費に繋がる。うーむ。

M/B は ASUS P2B-S。ゴージャスSCSIが利用可能なM/Bなので、内蔵SCSI-HDD x 2 はこのM/Bと一緒に使いたい。しかし容量的には厳しいのでなにかしらのHDDを増設する必要が。外部SCSI-HDDを増設できればいいのかもしれないけどコストパフォーマンスは悪いだろうし。

光学系ドライブってどのくらい電気を食ってるのだろう。常時モーターを回転させてる、HDDやケースファンほどは電気を食って無さそうな気もする。2台が1台になっても効果は期待できないかもしれない。

さて、どうすべなぁ。

#4 Y氏のサイトが復活

気づくのが遅れてしまった。それにしても以前に比べTOPページの萌え度が妙にUPしてません?

この記事へのツッコミ

Re: Y氏のサイトが復活 by Y    2003/11/10 20:53
復活って言いますか・・・汗
少しあちらの世界で問題がありまして、日記を
見られたくらかった為と申しますか・・・w

>萌え度
以前運営してたサイトが垢デリで消えちゃいました
ので折角だから使っちゃえってカンジでw
実際サイトの中身とは全然関係無いのですが(汗
Re: Y氏のサイトが復活 by mieki256    2003/11/14 14:45
>日記
復活後の日記、ちょくちょく読ませて戴いてますですよー <m256名義で

ああいった運用を見てると、Webにおける「公開」という行為にも、
より多くの選択肢、レベル設定可能な部分が欲しい感じもしてきますな…。

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

#1 初雪

福島県須賀川市もうっすらと雪化粧。
部屋の温度、3度ですよ。寒い。
あっ…ちょうど今、灯油が切れました。ピンチ

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

#1 だらだら

歯医者に予約入れてたのにまたキャンセルしてしまいました。
自分の時間感覚のルーズさに自分で吐き気がします。


親父さんの友人からプリンタの相談を受けたり。
HP製品ってそんなに印刷画質悪いんだろうか。
型番聞いておけば良かったなぁ…


人様のラクガキ掲示板でラクガキしてるうちに調子出てきたかも。
Painterでバリバリ行きます。行くつもり。

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

#1 惰眠を貪る

一日中寝てました。

寝てる間に、車が届けられていたようです。
夜、車庫入れをやらされましたが、ムチャクチャ難しいッス。
親父さんが誘導してくれたものの、15分ぐらいかかった…
一人でやったら、コレ、絶対ぶつける。
確実にぶつけるなぁ (-_-;)

こないだ焼いて従兄に渡した、「快傑ズバットOP」CD-Rが、ちゃんと再生できなかったそうで。
いきなりデカイ音が鳴ってビビッたとか…
むむぅ。何かテクニックが必要? >音楽CD作成
それとも、再生機器によってはCD-Rを読めないとか、そのへん?
もう一度焼いて、手持ちの各機器で再生状況を調べてみよう…

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

#1 (NoTitle)生活サイクル逆転。ま...

生活サイクル逆転。また昼に寝てしまってるです。明日はハローワークに行ってこなければならないのでちゃんと起きなければ。というか起きてなければ。

掲示板のアイコン数を増やす作業をしてみたり。とりあえずローカルでCGIが動く事を確認したです。
あとはfreewebから返事がくれば万事OKなんだけど。結構日数かかるものなのかな。もう少し情報集めてみよう。

昨日書いてた小中氏のHPは _ココ でし。
そういやこれ、「ドメイン取ってる」っていうんでしょうか。よくわかんないけど。

以上、20 日分です。

過去ログ表示

Prev - 2019/10 - 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 31

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project