mieki256's diary



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

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

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

坂道を表現しようとして手を入れているところ。以下の解説ページがとても参考になった。

_Creating a pseudo 3D racer - part 3

各セグメントには、坂道にするためのピッチ量も持たせておくのだけど、上記のページの例ではその値が線形補間で少しずつ変化していくようにしてあるようだなと…。自分が書いてるソレは、大雑把なセグメントデータから、ベタで並んでるセグメントデータに展開させてから使っているので、その展開処理をするところで、線形補間で得られた値を持たせるようにしてみた。

もしかすると線形補間の代わりにイージングを使えばもっと滑らかな見た目になるのでは、と思えてきたので試しにイージングで補間値を求める処理も入れてみたけど、線形補間で十分っぽい感じがする…。ちなみに HSP にはイージングをするための命令があるようで、それを知らずに自分で式を書いてしまった…。

_OHDL - setease

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

#1 [prog][windows] OpenGLを使ったWindows用スクリーンセーバをMinGWでコンパイル

Windows10 x64 21H2上で、OpenGLを使ったWindows用スクリーンセーバのサンプルを、MinGW を使ってコンパイル/ビルドしたい。

環境は、Windows10 x64 21H2 + MinGW (gcc 9.2.0) + freeglut 3.0.0-1。

MinGW-w64 (+ MSYS2) ではなくて、MinGW (+ MSYS) で作業。何度も何度も書くけれど、MinGW-w64 は libscrnsave.a (libscrnsavw.a) の中身が空っぽなのでスクリーンセーバをビルドできない。

参考にしたページは以下。OpenGL を使って、緑色の四角が円を描いて回るスクリーンセーバのソースが紹介されてる。リソースファイルやコンパイル手順までは紹介されてない。

_How to Scr: Writing an OpenGL Screensaver for Windows
_How to Scr: Sample Code for an OpenGL Screensaver

動作結果は以下。解像度が荒いけど雰囲気ぐらいは伝わるかと…。




ちなみに、このスクリーンセーバは OpenGL を使っているせいか、デスクトップキャプチャツール (OBS Studio 28.0.1) で数秒ほどキャプチャできなかった。デスクトップ画面が通常状態から OpenGL に切り替わる際にキャプチャできなくなるっぽい…。

MinGWにfreeglutを導入。 :

MinGW で freeglut を使えるようにする手順は、昨日メモしたのでそちらを参考に。

_MinGWでfreeglutを使ってみた

ソース。 :

ソースファイル群とアイコンをzipにして置いておく。

_greensquare_src.zip

中身は以下。
  • greensquare.cpp
  • icon.ico
  • Makefile
  • resource.h
  • resource.rc


一応、各ファイルも載せておきます。

リソースファイルは以下。ちなみに、元の参考ページではリソースファイルが掲載されてなかったので、Resource Hacker 5.1.8 を使って .scr からリソースを逆算(?)して書いてみた。

_resource.rc
/* resource.rc */

#include <windows.h>
#include <scrnsave.h>
#include "resource.h"

#define IDC_STATIC_ICON     2300
#define IDC_STATIC_TEXT     2301

/* LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US */

/* Screensaver title */
STRINGTABLE
BEGIN
  IDS_DESCRIPTION       "Green Square Example Scr"
END

/* Icon */
ID_APP  ICON    "icon.ico"

/* Dialog */
DLG_SCRNSAVECONFIGURE DIALOG DISCARDABLE  0, 0, 186, 82
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "GreenSquare Setup"
 FONT 11, "Segoe UI"
BEGIN
  DEFPUSHBUTTON "OK", IDOK, 39, 61, 50, 14 
  PUSHBUTTON    "Cancel", IDCANCEL, 107, 61, 50, 14
  AUTOCHECKBOX  "Square tumbles as it revolves", IDC_TUMBLE, 25, 35, 137, 12
  LTEXT "One option... that's all you get.", IDC_STATIC_TEXT, 17, 15, 150, 13
END
※ この日記システムの問題で、FONT指定行の見た目がおかしくなってます。行頭の空白を削除してもらえればと。


リソースファイルのヘッダファイルは以下。

_resource.h
#ifndef _RESOURCE_H_
#define _RESOURCE_H_

#define IDC_TUMBLE 1000

#define IDC_STATIC_ICON     2300
#define IDC_STATIC_TEXT     2301

#endif


C++ソースファイルは以下。ちなみにオリジナル版はレジストリの読み書きにも対応してるのだけど、いきなりレジストリに書き込むのはちょっと怖いので、以下のソースではレジストリ関連処理( GetConfig()、WriteConfig() ) は if (0) { 〜 } でコメントアウト/無効化してある。

_greensquare.cpp
// greensquare.cpp is an open-source example screensaver by Rachel Grey, lemming@alum.mit.edu.
// Paste into an IDE to compile if desired.
// I haven't chosen to include the resource file, so you'd need to provide a description string /and so forth.

#include <windows.h>
#include <scrnsave.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "resource.h"

// get rid of these warnings: truncation from const double to float conversion from double to float
// #pragma warning(disable: 4305 4244)

//Define a Windows timer

#define TIMER 1

#define FPS 60

// globals for size of screen
static int Width, Height;

static bool bTumble = true;

// a global to keep track of the square's spinning
static GLfloat spin = 0;

/////////////////////////////////////////////////
////   INFRASTRUCTURE ENDS, SPECIFICS BEGIN   ///
////                                          ///
////    In a more complex scr, I'd put all    ///
////     the following into other files.      ///
/////////////////////////////////////////////////

// Initialize OpenGL
static void InitGL(HWND hWnd, HDC &hDC, HGLRC &hRC)
{
  PIXELFORMATDESCRIPTOR pfd;
  ZeroMemory(&pfd, sizeof pfd);
  pfd.nSize = sizeof pfd;
  pfd.nVersion = 1;
  //pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; //blaine's
  pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 24;

  hDC = GetDC(hWnd);

  int i = ChoosePixelFormat(hDC, &pfd);
  SetPixelFormat(hDC, i, &pfd);

  hRC = wglCreateContext(hDC);
  wglMakeCurrent(hDC, hRC);
}

// Shut down OpenGL
static void CloseGL(HWND hWnd, HDC hDC, HGLRC hRC)
{
  wglMakeCurrent(NULL, NULL);
  wglDeleteContext(hRC);
  ReleaseDC(hWnd, hDC);
}


void SetupAnimation(int Width, int Height)
{
  //window resizing stuff
  glViewport(0, 0, (GLsizei) Width, (GLsizei) Height);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  if (0)
    {
      glOrtho(-300, 300, -240, 240, 25, 75);
    }
  else
    {
      float w = 300;
      float h = ((w * 2) * Height / Width) / 2;
      glOrtho(-w, w, -h, h, 25, 75);
    }

  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity();
  gluLookAt(0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  //camera xyz, the xyz to look at, and the up vector (+y is up)

  //background
  glClearColor(0.0, 0.0, 0.0, 0.0); //0.0s is black

  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

  // glShadeModel(GL_FLAT);
  glShadeModel(GL_SMOOTH);
}

void OnTimer(HDC hDC) //increment and display
{
  float xvals[] = {-30.0, -30.0, 30.0,  30.0};
  float yvals[] = {-30.0,  30.0, 30.0, -30.0};

  spin = spin + 1;

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glPushMatrix();

  glRotatef(spin, 0.0, 0.0, 1.0);
  glTranslatef(120, 0, 0);
  glRotatef(spin * ((bTumble) ? -4.0 : -1.0), 0.0, 0.0, 1.0);

  //draw the square (rotated to be a diamond)

  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  glColor3f(0.1, 1.0, 0.3); // set green color

  glBegin(GL_POLYGON);

  for (int i = 0; i < 4; i++)
    glVertex2f(xvals[i], yvals[i]);

  glEnd();

  glPopMatrix();

  glFlush();
  SwapBuffers(hDC);
}

void CleanupAnimation()
{
  // didn't create any objects, so no need to clean them up
}


/////////   REGISTRY ACCESS FUNCTIONS     ///////////

void GetConfig()
{
  if (0)
    {
      // get configuration from registry

      HKEY key;
      //DWORD lpdw;

      if (RegOpenKeyEx(HKEY_CURRENT_USER,
                       "Software\\GreenSquare", //lpctstr
                       0,                       //reserved
                       KEY_QUERY_VALUE,
                       &key) == ERROR_SUCCESS)
        {
          DWORD dsize = sizeof(bTumble);
          DWORD dwtype =  0;

          RegQueryValueEx(key, "Tumble", NULL, &dwtype,
                          (BYTE*)&bTumble, &dsize);

          //Finished with key
          RegCloseKey(key);
        }
      else //key isn't there yet--set defaults
        {
          bTumble = true;
        }
    }
  else
    {
      bTumble = true;
    }
}

void WriteConfig(HWND hDlg)
{
  if (0)
    {
      HKEY key;
      DWORD lpdw;

      const char* null_str = "";
      LPSTR str = const_cast<LPSTR>(null_str);

      if (RegCreateKeyEx(HKEY_CURRENT_USER,
                         "Software\\GreenSquare", // lpctstr
                         0,                       // reserved
                         str,                     // ptr to null-term string specifying the object type of this key
                         REG_OPTION_NON_VOLATILE,
                         KEY_WRITE,
                         NULL,
                         &key,
                         &lpdw) == ERROR_SUCCESS)

        {
          RegSetValueEx(key, "Tumble", 0, REG_DWORD,
                        (BYTE*)&bTumble, sizeof(bTumble));

          //Finished with keys
          RegCloseKey(key);
        }
    }
}

//////////////////////////////////////////////////
////   INFRASTRUCTURE -- THE THREE FUNCTIONS   ///
//////////////////////////////////////////////////

// Screen Saver Procedure
LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT message,
                               WPARAM wParam, LPARAM lParam)
{
  static HDC hDC;
  static HGLRC hRC;
  static RECT rect;

  switch (message)
    {
      case WM_CREATE:
        // get window dimensions
        GetClientRect(hWnd, &rect);
        Width = rect.right;
        Height = rect.bottom;

        // get configuration from registry
        GetConfig();

        // setup OpenGL, then animation
        InitGL(hWnd, hDC, hRC);
        SetupAnimation(Width, Height);

        // set timer to tick every 10 ms
        SetTimer(hWnd, TIMER, (int)(1000 / FPS), NULL);
        return 0;

      case WM_TIMER:
        OnTimer(hDC);       // animate!
        return 0;

      case WM_DESTROY:
        KillTimer(hWnd, TIMER);
        CleanupAnimation();
        CloseGL(hWnd, hDC, hRC);
        return 0;
    }

  return DefScreenSaverProc(hWnd, message, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message,
                                       WPARAM wParam, LPARAM lParam)
{
  //InitCommonControls();
  //would need this for slider bars or other common controls

  HWND aCheck;

  switch (message)
    {
      case WM_INITDIALOG:
        LoadString(hMainInstance, IDS_DESCRIPTION, szAppName, 40);

        GetConfig();

        aCheck = GetDlgItem(hDlg, IDC_TUMBLE);
        SendMessage(aCheck, BM_SETCHECK, (bTumble) ? BST_CHECKED : BST_UNCHECKED, 0);
        return TRUE;

      case WM_COMMAND:
        switch (LOWORD(wParam))
          {
            case IDC_TUMBLE:
              bTumble = (IsDlgButtonChecked(hDlg, IDC_TUMBLE) == BST_CHECKED);
              return TRUE;

            //cases for other controls would go here

            case IDOK:
              WriteConfig(hDlg);  // get info from controls
              EndDialog(hDlg, LOWORD(wParam) == IDOK);
              return TRUE;

            case IDCANCEL:
              EndDialog(hDlg, LOWORD(wParam) == IDOK);
              return TRUE;
          }

        return FALSE;
    }  //end command switch

  return FALSE;
}

// needed for SCRNSAVE.LIB
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
  return TRUE;
}


アイコンファイルは以下。中に icon.ico が入ってる。

_icon.cio.zip

コンパイルの仕方。 :

Makefile は以下。

_Makefile
greensquare.scr: greensquare.o resource.o
        g++ greensquare.o resource.o -o greensquare.scr -static -lstdc++ -lgcc -lscrnsave -lopengl32 -lglu32 -lgdi32 -lcomctl32 -lwinmm -mwindows

greensquare.o: greensquare.cpp resource.h
        g++ -c greensquare.cpp

resource.o: resource.rc resource.h icon.ico
        windres resource.rc resource.o

.PHONY: clean
clean:
        rm -f *.scr
        rm -f *.o

Makefile があれば、make と打つだけでコンパイル/ビルドできる。ちなみに、make clean で *.o と *.scr を削除できる。

一応説明しておくと…。
  • windres resource.rc resource.o で、リソースファイル resource.rc を .o に変換する。
  • g++ -c greensquare.cpp で、.cpp をコンパイルして .o を生成。
  • g++ greensquare.o resource.o -o greensquare.scr ... で、.oファイル群をリンクして .scr を生成。

リンク時の指定については以下。
  • -static : スタティックリンクを指定。
  • -lstdc++ -lgcc : C言語の標準的なライブラリをリンク。
  • -lscrnsave : スクリーンセーバ用ライブラリをリンク。libscrnsave.a (libscrnsavw.a) をリンクする。
  • -lopengl32 -lglu32 : OpenGLのライブラリをリンク。
  • -lgdi32 : GDIライブラリをリンク。
  • -lcomctl32 : よく分かってないけれど、これをつけないと「*.dll が見つからない」と言われて .scr が動作しなかった。
  • -lwinmm : Windowsのタイマー関係ライブラリ、らしい。
  • -mwindows : Windows用アプリケーション(GUIアプリ)であることを指定。

動作確認。 :

greensquare.scr を右クリックして動作確認。
  • 「Test」を選ぶと、フルスクリーン表示の動作確認ができる。
  • 「構成」を選ぶと、スクリーンセーバ設定画面で「設定」をクリックした時の設定ダイアログが表示される。

MinGW で生成したので、この .scr は32bit版。それをWindows10 64bit上で動かしているので、C:\Windows\SysWOW64\ 以下に .scr をコピーして動作確認。スクリーンセーバとしても動いてくれた。

とりあえず、これで OpenGL を使ったスクリーンセーバを MinGW でコンパイル/ビルドできることは分かった。後は、OpenGL を使った描画処理部分を ―― OnTimer() のあたりを改造していけば、それらしいスクリーンセーバを作れそうな予感。

#2 [python][windows] PyOpenGLが使うfreeglut.dllの場所を調べた

Windows10 x64 21H2 + Python 3.9.13 x64 + PyOpenGL 3.1.6 で実験をしていたのだけど、freeglut.dll がどこに置いてあるのかが気になったので少し調べてみた。

参考ページは以下。

_【Python】PyOpenGLのインストール方法を解説 | ジコログ

前提条件。 :

まず、自分の環境では、以下から .whl を入手してインストールしている。

_Archived: Python Extension Packages for Windows - Christoph Gohlke
  • PyOpenGL-3.1.6-cp39-cp39-win_amd64.whl
  • PyOpenGL_accelerate-3.1.6-cp39-cp39-win_amd64.whl

インストールは以下。
pip install PyOpenGL-3.1.6-cp39-cp39-win_amd64.whl
pip install PyOpenGL_accelerate-3.1.6-cp39-cp39-win_amd64.whl

この .whl には freeglut*.dll が同梱されているので、巷の解説ページで書かれているように、freeglut.dll を別途入手して C:\Windows\System32\ にコピーしなくても PyOpenGL が動いてくれる。

freeglut.dllの在り処。 :

さておき。その freeglut.dll は、実際はどこにあるのか…。調べた感じでは、どうも以下のフォルダに .dll が入ってるように見えた。

(Python3インストールフォルダ)\Lib\site-packages\OpenGL\DLLS\

以下の2つが入っていた。
  • freeglut64.vc16.dll
  • gle64.vc16.dll

ちなみに、Python 2.7.18 + PyOpenGL 3.1.0 上で確認してみたら、以下のファイルが入っていた。freeglut だけではなく GLUT も入っている。
  • freeglut32.vc9.dll
  • gle32.vc9.dll
  • glut32.vc9.dll


これらの .dll は、以下のスクリプトから読み込まれている。

(Python3インストールフォルダ)\Lib\site-packages\OpenGL\platform\win32.py

処理をしてる部分を抜き出してみる。
    def GLUT( self ):
        for possible in ('freeglut%s.%s'%(size,vc,), 'glut%s.%s'%(size,vc,)):
            # Prefer FreeGLUT if the user has installed it, fallback to the included
            # GLUT if it is installed
            try:
                return ctypesloader.loadLibrary(
                    ctypes.windll, possible, mode = ctypes.RTLD_GLOBAL
                )
            except WindowsError:
                pass
        return None
「freeglut*.*.dll」もしくは「glut*.*.dll」が見つかったらそれらを使うようだなと…。

freeglut.dllを差し替えてみる。 :

試しに、前述の処理部分を以下のように修正してみた。
        for possible in ('freeglut%s.%s'%(size,vc,), 'glut%s.%s'%(size,vc,)):
# ↓
        for possible in ('freeglut', 'freeglut%s.%s' % (size,vc), 'glut%s.%s' % (size,vc)):

これで、freeglut??.vc*.dll ではなく、freeglut.dll を読み込んでくれるのではないかと…。

以下から、freeglut 3.0.0 MSVC Package (freeglut-MSVC-3.0.0-2.mp.zip) を入手。

_freeglut Windows Development Libraries

解凍すると、bin/x64/freeglut.dll が入ってる。

以下のフォルダにコピー。
(Python3インストールフォルダ)\Lib\site-packages\OpenGL\DLLS\
or
(Python3インストールフォルダ)\

加えて、freeglut64.vc16.dll を freeglut64.vc16.dll.orig にリネームした。これで freeglut64.vc16.dll は呼び出されない状態になって、別途導入した freeglut.dll が呼び出されてる状態になるはず。

手元のサンプルスクリプトを動かしてみたところ、この状態でも動いてくれた。

しかし、上記の freeglut.dll はバージョンが 3.0.0 と古い。

MSYS2 + MinGW-w64 で入手できる freeglut.dll (libfreeglut.dll) は 3.2.2 なので、そちらも試してみた。

以下のファイルをコピーしてくる。
(MSYS2インストールフォルダ)\mingw64\bin\libfreeglut.dll

これを、freeglut.dll にリネームして、前述の場所にコピー。この状態でも簡単なサンプルなら動いてくれた。

ところで。手元の環境では、Python 3.9.13 のインストールフォルダ直下に freeglut.dll を置いても動いているわけで…。もし、その場所に置いても問題無く動くのであれば…。巷の解説ページは C:\Windows\System32\ 以下にコピーしてる事例がほとんどだけど、Pythonインストールフォルダに入れたほうが、まだ安全だったりしないのだろうか…。

余談。glutIdleFunc()が動かなくて悩んだ。 :

PyOpenGL関係のサンプルファイルを眺めていると、glutIdleFunc() を使っている事例を結構見かけるのだけど。手元の環境、Windows10 x64 21H2 + Python3.9.13 + PyOpenGL 3.1.6 上ではエラーが出てしまってかなり悩んだ。

> py 03_teapot_draw_idle.py
Traceback (most recent call last):
  File "C:\Python\Python39-64\lib\site-packages\OpenGL\GLUT\special.py", line 130, in safeCall
    return function( *args, **named )
TypeError: idle() missing 1 required positional argument: 'value'
 GLUT Idle callback <function idle at 0x000002A6438D8B80> with (),{} failed: returning None idle() missing 1 required positional argument: 'value'

やりたいことは一定の時間間隔で処理を呼び出したいだけなので、glutIdleFunc() の代わりに glutTimerFunc() を使えば目的は果たせるのだけど…。若干気になる状態なわけで。ググってみても仕様が変わった等の話を見かけないし。この症状が気になって freeglut.dll を色々差し替えていたわけで。結局動作は変わらなかったのだけど。

ふと、渡していた関数に引数があることに気づいた。glutTimerFunc() に渡す関数は引数を一つ用意するのだけど、その関数を安易に流用して、glutIdleFunc() にそのまま渡していたのが問題だった。何の引数も取らない関数を渡したらエラーが解消された。そういうオチか…トホ。

def on_timer(value):
    """timer callback."""
    global yrot
    yrot += 0.5
    glutPostRedisplay()  # Redraw

    glutTimerFunc(int(1000 / FPS), on_timer, 0)


def idle():
    """idle callback."""
    global yrot
    yrot += 0.5
    glutPostRedisplay()  # Redraw

# ...

    if USE_IDLE:
        glutIdleFunc(idle)
    else:
        glutTimerFunc(int(1000 / FPS), on_timer, 0)

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

#1 [nitijyou] 市の健康診断に行ってきた

須賀川市の健康診断・集団検診に行ってきた。

場所は、西袋地域体育館。電動自転車で移動。10:11に自宅を出発して、10:35頃に到着。24分ほどで着いた。検診を終えたのが10:56頃。約20分ぐらいかかった感じ。

曇り空で、天気予報は小雨、降水確率40%だったので、雨合羽を着て走ったけれど、幸い雨には降られなかった。

混み具合は…ほとんどガラガラ状態。自分以外には数人しか居なかった。今年は年齢に応じて受付けをする時間帯が違っていたせいもあるのかなと…。あるいは、天気模様が怪しいから諦めた人が多いのか。はたまた、人が集まる場所ではコロナ感染が怖いから近隣の病院で受けた人がほとんどなのか。

例年なら近所の北団地集会所で検診を受けられたのだけど、おそらくコロナウイルスの感染対策絡みで、体育館の類でしか受けられないことにしたのだろうなと。集会所の類では狭過ぎて密になるし。

ちなみに、去年はコロナ禍で感染が怖かったので自分は受診しなかった。そもそも集団検診も取り止めになって、近隣の病院で予約を取って受けてくれ、という話だったから面倒臭くなってしまって…。

帰りにあちこちに寄ってみた。 :

帰りに、西袋地域体育館の近くの笹平池の周辺をウロウロして、スマホで写真を撮ってきた。曇り空じゃなければ、もう少しそれらしい写真が撮れたのだろうけど…。

カワチにも寄って夜食その他を購入。

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

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、13:10-15:10の間、自宅サーバ止めてました。申し訳ないです。

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

#1 [ubuntu][vmware] VMwareの仮想HDDのサイズを増やしてみた

Windows10上で VMware Player 12 + Ubuntu 18.04 を動かしていたのだけど、仮想HDD、16GB の空き容量が1GBぐらいになってきたので、さすがにサイズを増やさないとダメかなと。試しに若干増やしてみたり。

VMware Player 12 を起動して、仮想マシン設定の編集 → ハードディスク(SCSI) → 拡張。16GB から 24GB に増やした。

このままではパーティションサイズは変わってないので、Ubuntu を起動。GParted を起動して、サイズを変更。

本来、起動中・使用中のHDDに対して、パーティションサイズ変更等をするなら、別途CD-ROMやUSBメモリから起動した GParted で処理をしないといかんのだろうけど。単にサイズを増やすだけなら、起動中・使用中のHDDに対しても、GParted を使っていきなりサイズを増やすこともできる模様。試してみたら、できてしまった。

#2 [ubuntu] Xubuntu上でウインドウを上下左右に移動

Windows10 は、アプリウインドウのタイトル部分をドラッグして画面右端や左端にぶつけると、画面右半分や左半分にサイズ調整してくれるけど。そういうことを Xubuntu上でもできたら便利そうだなと。

ググってみたら、機能としては持っていて、ショートカットキーを割り当てることで使えるらしい。

_Xfce キーボードショートカットで一瞬でタイル表示する方法 | ビバ!Linux
_Xubuntuの備忘録 - Qiita

一般的には、Windowsキー + Left,Right,Up,Downあたりに割り当てるらしいけど。自分の環境では、Windowsキーでアプリメニュー?が開く設定にしてあるので、Windowsキーを押しただけでメニューが開いてしまって目的を果たせない。

ということで、上記の記事で紹介されているように、Ctrl + Windows + Left, Right, Up, Down に割り当ててみたり。

設定の仕方は、設定 → ウインドウマネージャー → キーボード → ウインドウを画面(上|下|左|右)にタイル表示 → 編集をクリックして割り当てたいキーを入力。

ちなみに、Windowsキーを押したらメニューが表示されるように設定するのは、設定 → キーボード → アプリケーションショートカットキー → 追加 → xfce4-popup-whiskermenu を入力してOK → Windowsキーを叩く。

#3 [ubuntu][linux] Linux上で画像ビューアをいくつか試用

Ubuntu Linux 18.04上で、イイ感じの壁紙を設定しようとして、Windows10側からアレコレ大量に壁紙画像をコピーしたのだけど、Ubuntu側で閲覧するのがちょっとアレだなと。画像ビューアの類を探してみたり。

以下の記事が参考になった。ありがたや。

_Linuxで使える画像ビューアを集めてみた
_Ubuntu忘備録: Ubuntu14.04で使える画像ビューア一覧
_Ubuntuで使える画像ビューアー - 旧ID:itiriのブログ
_第336回 軽量で高機能な画像ビューアー「Geeqie」を使う:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
_便利で高速な画像ビューアー Geeqie | レンズの向こう

Geeqie が、類似画像検索までできてイイ感じ。ただ、左側のファイルリスト表示部分が大きくなりがちなのがちょっと。

一般的には gthumb あたりがメジャーなのだろうか。

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

#1 [blender] blenderでカメラマッピングの実験

前々から、カメラマッピングなるものに興味があったので、blender を使って試してみたり。

カメラマッピングとは何ぞや。写真素材なり、背景画なりの静止画を、立体的に見せるテクニックの一つ、という説明で合ってるのだろうか。

実験結果。 :

基本的には CC0 の画像を入手できるとされている _Pixabay から、以下の静止画像を入手、かつ、1920x1080にトリミングして…。

corridor-1990622_1920x1080.jpg
_廊下 エンドレス 通路 - Pixabayの無料写真

hospital-661274_1920x1080.jpg
_病院 医師 看護師 - Pixabayの無料写真

解説記事を眺めつつ、 blender で作業して、以下のような動画が得られた。





よく見るとモデルが簡単すぎて、あちこち破綻した映像になってるけど…。パッと見はそれっぽいので、個人的にはそれなりに満足。元々は静止画なのに、たしかに立体的に動いてるように見えるな…。これは面白い。

説明。 :

実際の作業は、以下のような流れになる。
  1. 元画像を下絵にしながら、カメラから見て形が同じになる3DCGモデルを作成。
  2. その3DCGモデルに、カメラから見た形のままテクスチャのUV設定をして、元画像を貼り付け。
  3. カメラを動かして動画を作成。

注意点としては…。

その1。結局は3DCGモデルを作って処理するので、3DCG映像を作るのと同じだなー、と…。

元画像の中に細かいアレコレが映ってたら、モデルも細かく作り込まないと映像が破綻するので、どうしてもそれなりの作業時間が必要になる。けして、フィルタを選んでボタンを1クリックすればできちゃう系の簡単な作業ではない…。

その2。元画像に映ってない・描かれてない部分は、当然映像にも出てこない。

例えば、手前に木の幹がある写真を使ったら、幹の向こう側は隠れてるわけだから、映像にも出しようがない。そういう時は、木の幹を切り抜いて別レイヤーにして、幹で隠れていたところはフォトレタッチで誤魔化して…。つまり、1枚の画像を、フォトレタッチ技術を駆使して、数枚〜数十枚に分割していく作業が入ってくる。もっとも、これが手描きアニメ等なら、最初から木の幹と向こう側の2枚を発注すれば済みそうだけど…。何にせよ、後工程を何も考えずに描かれてしまった1枚の背景画を渡して「よろしくー」で済む作業ではないだろうなと。

その3。3DCGだからと言って、カメラをグリグリ動かせるわけじゃない。

カメラが奥に行けば、元画像の小さい部分を無理矢理拡大表示しちゃうから、テクスチャが荒れてボケボケになるし。前述のように、元になった画像素材に映ってない部分はもちろん出せないのだから、後ろを振り向いたり等、360度グリグリとカメラを回せるわけでもない。ほんのちょっとだけカメラの位置や向きが気持ち変わったかな、ぐらいの見せ方しかできないような気がする。

そんなわけで、制限は多いけれど…。それでも、静止画を元にして、奥行きや立体を感じさせる映像を作れるあたり、なんだか浪漫を感じるわけで…。

とは言え、あの宮崎駿監督も仰ってるように「CGは魔法の小箱じゃない」ので…。それなりの結果を得たいなら、面倒な下ごしらえをしないと…。「CGなら簡単なんでしょ?」なんてとんでもない話で。

今回作ったモデル。 :

今回は、以下のようなモデルを作成した。

blamtest02_ss01.png

そこにテクスチャを設定。

blamtest02_ss02.png

テクスチャを貼るためのUV設定は、blender 2.79b の場合、各頂点を選択した状態でUキー → プロジェクション、を選択。これで、カメラから見たモデルの形そのままでUVが設定される。

blamtest02_ss03.png

ただ、各ポリゴンを細分化しないと、テクスチャが歪みまくるようで。頂点を全選択してWキー → 細分化、だったかな…。あるいは、Ctrl + R キーを押して、任意の場所を分割とか。分割する際にマウスホイールを回すと分割数を変更できる。以下の解説ページが分かりやすいかも。

_【Blender】細分化する方法【ポリゴンの分割】
_【Blender】ループカットとスライドの使い方

2つ目の動画は、以下のようなモデルになった。

blamtest03_ss01.png

本当は、元画像の廊下が十字路っぽくなってるので、それに応じたモデルにしないとおかしいのだけど…。実際、今回の出力映像は、脇の廊下が不自然な見た目に…。手抜きをすると、その分しっぺ返しが来るというか。

写真と画角を合わせるのはBLAMが便利。 :

blender上で、写真からカメラの画角等を求めるのは、BLAMというアドオンを使った。

参考ページ。 :

2つ目の動画をもうちょっと頑張ってみた。 :

やはり、十字路っぽい廊下が気になる。もう少しきっちりとモデルを作ってみたい…。

GIMPを使って元画像をレタッチ。手前の壁と、奥の画像の2枚に分割してみた。

_hospital-661274_1920x1080_a.png
_hospital-661274_1920x1080_bg.jpg

3DCGモデルは、以下のような感じに。

blamtest04_ss01.png

出力動画は、こうなった。



元画像を適切に分割して、モデルをちゃんと作れば、らしさが増すなと…。

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

#1 [raspberrypi] Raspberry Pi Zero WのmicroSDHCを交換してみたり

Raspberry Pi Zero W の、microSDHC へのアクセス速度が遅いあたりが気になるわけで。

手元に、昔購入した microSDHC、Transcend TS16GUSDC4 16GB Class4 があったので、交換してみようかなと。

Transcend TS16GUSDC4 16GB Class4 のベンチマークは、 _2016/06/25の日記 にメモしてあった。

Team製 8GB の microSDHC のベンチマークもメモ。 :

せっかくだから、Raspberry Pi Zero W スターターキットについてきた Team製 microSDHC 8GB Class10 (KSY008G0MC28PI) のベンチマークもとってみたり。SDカードフォーマッタでクイックフォーマットをした直後の状態で測定。

-----------------------------------------------------------------------
CrystalDiskMark 5.1.2 x64 (C) 2007-2016 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :    19.793 MB/s
  Sequential Write (Q= 32,T= 1) :    14.131 MB/s
  Random Read 4KiB (Q= 32,T= 1) :     2.117 MB/s [   516.8 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     0.414 MB/s [   101.1 IOPS]
         Sequential Read (T= 1) :    19.714 MB/s
        Sequential Write (T= 1) :    12.792 MB/s
   Random Read 4KiB (Q= 1,T= 1) :     2.052 MB/s [   501.0 IOPS]
  Random Write 4KiB (Q= 1,T= 1) :     0.284 MB/s [    69.3 IOPS]

  Test : 100 MiB [E: 0.0% (0.1/7536.0 MiB)] (x3)  [Interval=5 sec]
  Date : 2017/09/09 8:02:00
    OS : Windows 10 Professional [10.0 Build 15063] (x64)
    microSDHC Team 8GB CLASS10 (KSY008G0MC28PI) + BUFFALO BSCRMSDCBK(USB2.0)

microsdhc_team8gb_class10_20170909.png

Transcend製 microSDHC と、そんなに変わらんなあ…。あっちは Class4 で、こっちは Class10 なのだけど…。

いや待て。結構違うか。
  • Team製は、Transcend製に比べて、シーケンシャルライト(書き込み)速度が倍。
  • その代わり、ランダムライトは、1/2〜1/3。
  • ランダムリードも微妙に遅い。
シーケンシャルライトが速いあたりが、Class10 らしさ、なのだろうか。でも、リード(読み込み)は、さほど変わらんよな…。それに Raspberry Pi は、どうせ20MB/s前後で頭打ちになるのだし…。

ちなみに、Raspberry Pi3 購入時に一緒に買った Team製 microSDHC 16GB は、 _2016/07/13の日記 にベンチマークがメモしてあった。16GBのほうが微妙に速いのだな…。

起動時間は変わらなかった。 :

Transcend製も、起動時間は Team製とさほど変わらなかった。デスクトップ画面が出てくるまで1分20秒ほど。

hdparmの結果は違った。 :

hdparm も同じかなと思ったら、これは違った。
$ sudo hdparm -t /dev/mmcblk0

/dev/mmcblk0:
 Timing buffered disk reads:  62 MB in  3.09 seconds =  20.05 MB/sec
Transcend製のソレは、20MBぐらい出てる。Team製は10MBぐらいだったのに…。なんでやろ。まさか、Team製を使ってた時は、接触不良だったとか…? それとも、アクセスしてる領域によっては遅いとか。microSDHC については詳しくないから分からん…。

とりあえず、Transcend製を使うことにするか…。

#2 [raspberrypi] Raspberry Pi Zero W でサンプル等を動かしたり

Raspberry Pi は、/opt/vc/src/hello_pi/ 以下に、OpenGL ES を使ったサンプルソース等が入ってるので試しに動かしてみたり。

cd /opt/vc/src/hello_pi
sh rebuild.sh
色々コンパイルされる。ということは、この手のビルドに必要なプログラム群は既にインストールされてるらしい。

各フォルダに入ってる hello_*.bin が実行ファイル。
cd hello_triangle
./hello_triangle.bin
キューブが表示された。

描画速度は Raspberry Pi3 とほとんど違いが見られなかった。GPUに頑張ってもらう分には、Pi3 も Zero W も速度的には同じようなものらしい。

ただ、hello_teapot を実行したらテクスチャが反映されず。hello_teapot は、動画をテクスチャにして描画するサンプルなのだけど。

Zero W はRAMが512MBしかないから、デフォルトではGPUに64MBしかメモリが割り当てられてない。故に、メモリ不足で動画をテクスチャにできない。128MBまで増やせば、テクスチャも描画されるようになる。

GPUへのメモリ割り当て量は、以下で変更。

pi3dも動かしてみた。 :

Python から OpenGL ES を扱える、 _pi3d もインストールして動作確認してみたり。

pi3d の動作には Pillow と numpy も必要らしい。raspbian stretch では既にインストール済みだった。別途インストールしたい場合は以下。
sudo aptitude install python-pillow python3-pillow
sudo aptitude install python-numpy python3-numpy

pi3d は pip でインストール。
sudo -H pip2 install pi3d
sudo -H pip3 install pi3d
pip2 が、Python 2.7用のpip。pip3 が、Python3.x用のpip。

サンプルスクリプト群の _pi3d_demos を git で持ってくる。
git clone https://github.com/pi3d/pi3d_demos.git

フォルダに入って何か実行してみる。
cd pi3d_demos
python Earth.py
画面が出てくるまで、何故か結構かなり時間がかかったけど、それでも一応、地球と月と謎の球体がくるくると回ってくれた。

pi3d も、GPUに頑張ってもらう系のスクリプトなら Pi3 と似たような速度で動いてくれる模様。ただ、CPUに頑張ってもらう系のスクリプトは、ちょっとフレームレートが低いような…気がする。

それはともかく、pip list と打つとインストール済みのPythonモジュールが一覧表示されるけど、25秒ほど、無反応で待たされる…。ストレージへのアクセスが遅いのか、CPUが遅いのか、メモリが少ないのか…。

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

#1 [nitijyou] どうも調子が

どうも調子が悪い。ずっとエンジンがかからないというか…。

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

#1 [dxruby] Ruby+DXRubyでベルトスクロールアクションゲームを作ってみたり

開発途中ですが、そこそこゲームっぽい見た目になってきたので一旦公開しておきます。Rubyでも、DXRubyを使えばこういうゲームが作れるらしい、てな参考にでもなればと。

ちなみに Windows専用アプリです。タイトルも仮です。今のところ単なる出オチゲーです…。

screenshot

_baseballknuckle_20150909_143445.zip(89.7MB)

必要スペック :

  • 画面解像度 : 1280x720ドット以上
  • 実行に必要なメモリ : 1.5GByte程度
  • Windows7 以降のOS

以下の環境では動きましたが、最低限動作するスペックは正直分かりません。60FPS前後で動いていれば、そこそこ問題なく動いてる状態だろうと思いますが…。
  • Intel Core i5 2500 (3.3GHz) + RAM 8GB + GeForce GTX 750 Ti
  • AMD Athlon II X4 605e (2.3GHz) + RAM 8GB + オンボードビデオ Radeon HD4200(RS880)

インストール・アンインストール。 :

zipを解凍して任意のフォルダに置いてください。

アンインストールは、フォルダごと削除してください。レジストリは使ってません。

起動の仕方 :

main.exe を実行。または、Ruby + DXRuby がインストールされてる環境なら ruby main.rb を実行。

開発途中のため、起動時に画像の読み込みだけで1分近くかかります。気長に待っていただければと…。

遊び方 :

  • カーソルキー + Z,X,Cキー、または、USB接続ゲームパッドでプレイヤーキャラを操作します。敵を殴って倒して先に進んでください。
  • Zキー/ボタン1でパンチ。押しっぱなしでパンチを連打できます。
  • Xキー/ボタン2でジャンプ。
  • Cキー/ボタン3で特殊攻撃。前後の敵を攻撃できます。
  • カーソルキー/十字ボタンの、左、または右を、二度押しすると走ります。
  • ESCキーを押すとアプリを終了できます。

尚、開発途中のため、まだ3ステージしかありません。掴み、投げ等も実装してません。殴るだけです。

動作確認環境 :

  • Windows7 x64
  • Ruby 2.0.0 p647 (Rubyinstaller mingw版)
  • DXRuby 1.4.2

ライセンス/LICENSE :

  • main.exe は、Ruby や DXRuby のライセンスに従います。Ocraでexe化したため、Ruby、DXRuby のバイナリを内部に含んでるはずなので…。
  • 同梱の Ayame.dll はフリーウェアということになってるようです。
  • ロゴ画像、フォント画像は、使用フォントのライセンスに従います。一応、画像化して配布可能なライセンスのフォントだけを使っているはずですが…。
上記以外の以下のファイルは CC0 / Public Domain にしておきます。魔改造でも何でも好きにしてください。
  • ソースファイル(.rb)
  • キャラ画像、背景画像、エフェクト画像(.png)
  • SE(効果音)データ(.wav)
  • BGMデータ(.ogg)

その他、詳しくは、zip内に入ってる readme.md を読んでいただければと。

作った目的。 :

  • 巨大な画像を大量にバカバカ表示したら、DXRubyはどうなっちゃうのかなと試しに確認してみたかった。結構動いちゃってビックリしてます。ただ、時々スクロールがガタガタするのが気になるけど…。描画が間に合ってないのか、CPUなのか…。
  • ベルトスクロールアクションってどうやったら作れそうか、一応知っておきたかった。
そんなところです。

ところで。

作ってる最中、このゲームジャンルは、絵描きさんのためのゲームジャンルかもしれないなあ、と思いました。プログラムは難しいことを全然やってなくて。仕様を入れてくのが単に面倒臭いだけで…。とにかく、絵をたくさん描かないといけないのが一番シンドイなと…。逆に言えば、「俺はバリバリ描くぞー、描いちゃうぞー」ってタイプの絵描きさんなら、プログラムも含めてスンナリ作れちゃうのかも、とすら思いました。スーファミやメガドラが売られてた頃、ベルトスクロールアクションが結構作られましたけど ―― 何せセーラームーンまでベルトスクロールアクションしてましたけど ―― アレって、システムを作ってしまえば、後は絵描きさんがひたすら頑張れば出来上がるから、だったのかなと邪推しちゃったりもして。

2017/03/19追記。 :

DropboxからDLできるようにしていたのだけど、DropboxがPublicフォルダを非公開にするようにサービス変更してしまったので、リンクを修正。

#2 [dxruby][dtm] 野球拳についてメモ

上記の記事で公開してるゲーム内で、一部の曲が「野球拳」のメロディをアレンジしたものになっているのですけど。「野球拳」のメロディの著作権ってどうなってるのかなと気になったわけです。

_ 作品データベース検索サービス で検索したところ、どうやら _前田伍健 という方が、詞・曲共に著作者ということになっているようで。

そして、2015年現在、前田伍健氏の没後50年以上経っているから…日本国内では著作権が消滅しているはずだよなと。なので、該当のアレンジ曲データ(.ogg)を CC0 / Public Domain で配布しても問題無いだろうと考えているのですが、もし何か問題があるようでしたら指摘していただけると助かります、と書いておくのです。

自分の知ってる野球拳は「Tiny 野球拳」だった模様。 :

ところで。 _野球拳 について調べてたら、「アレレ?」と思ったことが。愛媛県松山市が本家云々と言うことになってるらしいのですが…。

歌詞に、「投げたら こう打って 打ったら こう受けて ランナーになったらエッサッサー」とあるのですが。自分、こんな歌詞は知らんぞと。アレレ?と。

自分にとって野球拳と言えば、あの衝撃的なグラフィックを提示して日本全国の少年達の心になんとも言えないほろ苦い青春の思い出を残してくれた、 _MZ-700版野球拳 しかないわけですよ。俺にとって、野球拳と言えばコレだよ。コレ以外にねえよと。

で。どうもそのMZ-700版野球拳は、本物の野球拳の歌詞・メロディの一部だけを使ってたのではないのかなと…。だから自分は、本物の野球拳の歌詞もメロディも知らないのかもしれんと…。

要するに、自分はずっと、いわば「Tiny 野球拳」しか知らなかったわけですよ。

だから何だ。それがどうした。って話ですけどね…。オチは無いです。

#3 [comic] 「ダンジョン飯」1〜2巻を読んだ

妹が以下略。どんな漫画なのか一応説明すると…えーと…うーん…うむむ…。コレってどう説明するのが適切なのだろうか。タイトル通り、ダンジョンで飯を食う漫画? なのかな。いや、ダンジョンで、魔物を倒して、食べる漫画、だよな…。まあ、話題になってる漫画だから、あえて今更説明する必要はないのかもしれないけど。

とにかく考証がスゴイなと。ダンジョン、魔物の生態、そして、料理。コレとソレとアレがどうしてここまで綺麗にくっついて、見事な説得力を持ってしまうのか、さっぱりわからないのだけど、そこが面白い。その発想は一体どこから出てくるのか、読んでいて、不思議で不思議で…。ダンジョン内をうろついてる魔物の一つ一つに、現実に存在する植物・昆虫・生物の仕組みを淡々と応用して、更に料理法まで探し出して煮詰めていく作業…。この作家さんは一体何者なんだろう。やってることはSF考証とかそういうのと変わらないと思うのだけど。でも、それが、ダンジョンで、飯…。実はブレーンが何人も居るんじゃないのかと邪推するぐらいに見事な仕上がりで。

そういえば、一時期、宮崎ゴロー監督が、この漫画のアニメ化企画を進めていたらしいけど。もしかするとゴロー監督との相性ピッタリな原作漫画かもしれないよなと、読んでるうちに思えてきたり。山の上の砦に坂が無いのは不自然だ、てなところにこだわる監督さんだから、そういうこだわりの方向性が、真っ直ぐに面白さへと繋がっていく可能性はあるかもなと。几帳面に、真面目に考えていけばいくほど、そして、淡々とソレを見せ続けるほど、「いやいやいや。ちょっと待て」「えっ? そこなの? そこにこだわるの?」と見ていてツッコミたくなる内容になってくれそうな…。まあ、ゴロー監督じゃなくて、高畑勲監督がやっても面白そうだけど。「ここ一週間、キノコについて調べてみたんですけどね…。縦と横で切れ方が違うというのは、アレは間違ってますね」とかスタッフに言い出しそうで…。あ、いかん。こりゃ完成しないな…。 *1

何にせよ、とんでもない漫画だなと思いました。世の中にはスゴイ漫画があるんだなあ…。
*1: 「これはアレですね。実際に食べてみないとわかりませんね。よし。○○○○を食べに行きましょう」って高畑監督が言い出して、女性スタッフが「ヤダーッ!」と叫んだりとか…。

#4 [nitijyou] この日記ページを更新

気がついたら、2015/06/27を最後にアップロードしてなかった…。ローカルでは淡々とメモしてたのだけど。せっかくだからアップロード。

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

#1 [python] Python勉強中

昨日悩んでた部分について動作確認。Windows7 + Python 2.6.6。
'''
codecs、os.walk() の動作確認
'''
import codecs
import os
import pprint

def main():

    # 指定されたパス以下のファイル一覧を取得
    flist = {}
    for root, dirs, files in os.walk(".\\testdir"):
        for file in files:
            print root, dirs
            name, ext = os.path.splitext(file) # ファイルパスをベース名と拡張子に分ける
            name = name.decode('sjis') # sjis -> unicode に変換してる?
            path = os.path.abspath(os.path.join(root, file))
            flist[name] = path # ハッシュ(辞書)に記録

            print type(file), file
            print type(name), name, type(path), path
            print

    # sjisで書かれたテキストファイルを読み込み
    data = codecs.open("sjis_text.txt", 'r', 'sjis')
    for linedata in data:
        linedata = linedata.rstrip('\r\n') # 行末の改行を削除。Perlのchomp相当
        print type(linedata), linedata
        if flist.has_key(linedata):
            print u"[%s]はあります" % linedata
        else:
            print u"[%s]はありません" % linedata
        print

if __name__ == '__main__':
    main()
以下は動作結果。
.\testdir\日本語ディレクトリ\サブディレクトリ []
<type 'str'> 日本語ファイル名.txt
<type 'unicode'> 日本語ファイル名 <type 'str'> C:\home\prg\python\test_codecs\testdir\日本語ディレクトリ\サブディレクトリ\日本語ファイル名.txt

.\testdir\表示 []
<type 'str'> 表示.txt
<type 'unicode'> 表示 <type 'str'> C:\home\prg\python\test_codecs\testdir\表示\表示.txt

<type 'unicode'> 日本語ファイル名
[日本語ファイル名]はあります

<type 'unicode'> 表示
[表示]はあります

<type 'unicode'> 存在しないファイル名
[存在しないファイル名]はありません

_よりPythonicなPythonを目指して(前編):Python 3が後方互換性を捨ててでも求めたもの (2/2) - @IT によると、Python 3.0 では str型が無くなったらしいので、Python 3.x で動かすと違う動作になるんだろうなと。そもそも print のところを書き換えないと動かないけど。

古いアプリと昔のPythonを紐づける方法は無いのかな。 :

例えば GIMP 2.6.x は Python 2.6 を決め打ちで要求してくるわけで、GIMP 2.6.x + Python-fu を使いたいと思ったら、そのOS上で動く Python を 2.6 にしておかないといかんわけですよ。今時、Python 2.6 に固定って…。Python 3.x とまでは行かなくても、せめて Python 2.7 ぐらいは使いたいわけで…。

古いアプリを動かす時だけ、Python 環境を2.6にする、みたいな設定・工夫はできないものかと。batファイルで環境変数を書き換えて、とか以前試してみた記憶もあるけど、上手くいかなかった、そんな記憶もあるような、ないような。

比較的新しいアプリは、アプリと一緒に Python を実行するための何か(.dll?)も一緒に入ってるようで、Python バージョンの制限を受けない・各アプリが同梱のPythonを決め打ちで使ってるから問題無いのですけど。昔のアプリが…どうしたもんか…。仮想PCでも使って、などと考えたりもするけど、Python のせいで Windowsライセンスをもう一つ買うなんてアホかって感じだし。…いや、GIMP 2.6.x を動かしたいだけなら、Linux でもいいのか。

というか、GIMP 2.6.x でしか動かないプラグイン・Python-fuスクリプトがあるってのがクソなんですけど。GIMP 2.8.x 上でも動いてくれれば悩まなくて済むのに。

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

#1 [haxe] Haxe + HaxeFlixelで書いたプログラムがhtml5で出力できず

FlashDevelop + Haxe + OpenFL + HaxeFlixel で、サンプルプログラム程度のソレを書いてるのだけど。

flashで出力すると、画面も出るし、音も出る。しかし、html5で出力すると動かない。ローディング画面っぽいものが表示された後、読み込みバーが途中で止まったまま、ウンともスンとも言わなくなる。

色々検証してるのだけど…。 とりあえず、画像を表示するだけなら、flash も html5 も両方動きそうな感じはする。ただ、サウンドを追加したり、jsonを追加して解析等させようとすると、怪しくなる。

サウンドは、どうせブラウザ毎に対応フォーマットがバラバラだから、html5ではそもそも鳴らない、という扱いにしてもいいのだろうけど。jsonが読み込めないのでは…。

xml内の記述がなんだか怪しい。 :

それと、どうも xml 内に記述する assets 関連の記法が、あちこちおかしいんじゃないのかという気もしていて。

例えば、サウンドファイルを登録する際、Haxe や OpenFL の公式サイトのドキュメントを眺めた感じでは、以下のような記述ができそうだけど。
<assets path="assets/sounds/se_jump.ogg" id="SeJump" if="html5" />
<assets path="assets/sounds/bgm_stage1.ogg" id="BgmStage1" if="html5" />
<assets path="assets/sounds/se_jump.ogg" id="SeJump" type="sound" if="html5" />
<assets path="assets/sounds/bgm_stage1.ogg" id="BgmStage1" type="music" if="html5" />
<sound path="assets/sounds/se_jump.ogg" id="SeJump" if="html5" />
<music path="assets/sounds/bgm_stage1.ogg" id="BgmStage1" if="html5" />
<assets path="assets" if="html5">
    <sound path="sounds/se_jump.ogg" id="SeJump" />
    <music path="sounds/bgm_stage1.ogg" id="BgmStage1" />
</assets>
本来、どの書き方でもいいはず、と思えたのだけど。書き換えてビルドするとエラーが出たり出なかったりで。特定の書き方をすると毎回必ずエラーが出るならまだしも…書き方を変えてないのにエラーが出たり出なかったりするあたりが、よく分からない…。

ちなみに、xml内のソレについて説明しておくと…。
  • if="flash" や if="html5" は、flash や html5 を出力する際に、定義(?)を変えるための記述。
  • id="hoge" を指定しておくと、プログラム上では Assets.getSound("hoge") といった形で呼び出せる。
  • type="sound" や type="music" は、ファイル形式の指定。効果音は "sound" で、BGMは "music"、らしいのだけど、扱いがどう違うのかは不明。
  • type="〜" には、他にも、"text", "image", "binary", "font" が用意されてる。らしい。
  • type="〜" は、本来なら、指定する必要はない。xml を読んで何かするソレが、ファイル拡張子を見て自動で対応付けをしている、という話も見かけた。でも、本当にやってくれてるのか怪しい…。それとは逆に、ファイル形式を指定するとかえっておかしくなる時があったような印象も。このへん、どうも怪しい。
  • <assets path="〜" type="sound" /> といった書き方の他に、<sound path="〜" /> や <music path="〜" /> もあるらしいが、この記述が本当に反映されてるのかは不明。
まあ、とにかく動作が色々と怪しい…。flash版を出力するだけならスンナリ行くのだけど。

#2 [cg_tools][prog] BG画像が今一つ

奥の背景がなんだか寂しいので、巷のゲームの画面を見て勉強しようと。

クオリティの違いに凹んできたり。やっぱり絵描きさんは凄い。

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

#1 [as3][flash] FlashDevelop上でAIRアプリのパッケージを作ろうとすると失敗する

Windows7 x64 + FlashDevelop 4.0.4 での話。PackageApp.bat を実行すればパッケージが作成されるはずなのだけど。以下のようなエラーが出る。
 Packaging starlingwdwresize.air using certificate "bat\starlingwdwresize.p12"...
 Could not generate timestamp: handshake alert:  unrecognized_name
 AIR setup creation FAILED.
 
 Troubleshooting:
 - did you build your project in FlashDevelop?
 - verify AIR SDK target version in application.xml

エラーメッセージで検索してみた。

_Flashdevelop + AIR: Could not generate timestamp: handshake alert: unrecognized_name
_FlashDevelop.org - View topic - Trying to create AIR application -PackageApplication fails

bat\Packager.bat の、11行目あたりを修正。
call adt -package %OPTIONS% %SIGNING_OPTIONS% %OUTPUT% %APP_XML% %FILE_OR_DIR%
↓
call adt -package -tsa none %OPTIONS% %SIGNING_OPTIONS% %OUTPUT% %APP_XML% %FILE_OR_DIR%
〜.air が作成できた。

下のようにすると、デスクトップ用の .exe も作れるらしい?
call adt -package -tsa none %SIGNING_OPTIONS% %OPTIONS% -target bundle %OUTPUT% %APP_XML% %FILE_OR_DIR%

#2 [web] Google翻訳で妙な変換

Google翻訳で、「320x480」を日本語に訳すと「アイフォーン」に変換される。たしかに、iPhone の画面解像度だけど…。

#3 [as3][flash][starling] Starlingとフルスクリーンモード

Starling 勉強中。フルスクリーンモードで表示しようとしているところ。Starling を使ってないなら、stage.displayState = StageDisplayState.FULL_SCREEN; でいいんだろうけど…。

Starling ではなく、旧来の表示方法 ―― flash.display.SimpleButton と flash.display.Sprite で表示して、クリックしたら StageDisplayState.FULL_SCREEN を設定、という方法で試してみたところ、一応フルスクリーンモードになってくれたっぽい。 Starling で表示している部分も、ちゃんと拡大表示されているように見える。ただ、stage.scaleMode = StageScaleMode.NO_SCALE; を設定してるので、フルスクリーンになっても旧来の表示方法で描画してるものが拡大されずに小さいままで。まあ、フルスクリーンに切り替えるボタンぐらいでしか使わないだろうから、表示位置だけ変更して済ませちゃってもいいかな…。

フルスクリーンモードにすると、キーボード情報の取得がほとんどできなくなるらしい。困ったな…。

StageDisplayState.FULL_SCREEN_INTERACTIVE ならキーボード情報も取得できるらしい。ただし、Flash Player 11.3 以降から対応だそうで。

#4 [flash] FlashDevelop等をインストールし直し

何故か知らんけど、FlashDevelop 上で作業をしてたら、置換操作等がまともにできなくなってしまった。全然関係ない単語等を置換しようとする…。

原因がよく分からないので、FlashDevelop 4.0.4 をアンインストールして、また再インストール。しかし再インストール時に「Java 1.6が必要なんだが、お前の環境は 1.7 がデフォルトになってる」と文句を言われたり。面倒臭いので Java 1.7、Java 1.6 をアンインストール後、Java 1.6 update 35 だけを再インストール。

勝手に Java 1.7 に更新されたら面倒なので、Javaコントロールパネルから更新チェックを無効にしようとしたのだけど、そのままだと設定が変更できない。

_Java アップデート設定が Java コントロールパネルで保存されていません。
Java コントロールパネルを管理者として実行するには、次の手順に従います。

1. 「スタート」をクリックし、「検索の開始」ボックスにコマンドと入力します。
2. 上に一致した候補のリストが表示されます。プログラムリストでコマンドプロンプトを右クリックします。
3. 「管理者として実行」をクリックします。
4. 「コマンドプロンプト」ウィンドウで次のコマンドを入力します。 c:\Program Files\Java\jre6\bin\javacpl.exe Java コントロールパネルが開きます。
5. Java コントロールパネルで、「アップデート」タブをクリックします。
6. アップデートの通知の設定を目的の設定に変更します。
7. 「適用」ボタンをクリックしてから、「OK」ボタンをクリックして設定を保存します。

Java アップデート設定が Java コントロールパネルで保存されていません。 より

要するに管理者権限で javacpl.exe を動かせ、ということらしい。

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

#1 [nitijyou] 録画してたアニメを消化中

BSデジタルが視聴できるようになって録画本数が増えてしまい、どんどん消化していかないとHDD容量が…。うーん。

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

#1 [sound] MIDIシーケンスでSEを作ろうとしているけど

2音目を鳴らそうとしているタイミングで「プチッ」というノイズが入る。こういうのって、どうやって解決すればいいんだろう…。Audacityで、クリックノイズ・ポップノイズの除去を試してみたけど、効果が無い。そういう種類のノイズじゃない、ということなんだろうか…。

ゲームのサウンド関係の作業をしている人は、こういった部分で色んなノウハウを持っているんだろうなあ。こういうのって、専門学校とかで教えてもらえたりするんだろうか。いかにしてノイズを除去するか、みたいな授業・講義があるなら、そこだけ受けてみたい気もする。通信教育でそういう講座があったりはしないだろうか。あるわけないか。

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

#1 [nitijyou] perlスクリプト作成中

テーブルの削減を試みていたり。

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

#1 [pc] 親父さんがノートPC用バッグを買ってきた

ノートPC用のバッグは通販で注文しようかと思っていたのだけど。親父さんが、明日、写真関係の集まりにノートPCを持っていきたいとのことで。となると通販じゃ間に合わないから、だったら店頭で買ってくれ、該当機種が入りそうなヨサゲな型番は調べてあるから、とメモを渡しておいたわけで。

朝、ヨドバシに電話して在庫を確認したらしいのだけど、セミハードタイプはまったく店頭に置いてないとの返事だったらしい。親父さん・お袋さんが、うっかりバッグの上に物を載せていく状況を想定して、外側が堅そうなものがいいのでは、と思っていたのだけど。

ということで親父さんがヤマダ電機の店頭で買ってきた。 _ELECOM ZSB-BM001BK 。衝撃に強いと謳ってはいるが…。

Gateway M-2408j を入れてみたら、本体は入ったものの、ACアダプタが入らない。ヤマダ電機の店員さんは、親父さんからの問いに、「15.4ワイドのノートPCならこれで大丈夫。入りますよ!」と言ったらしいが…。いや、まあ、本体だけならそりゃ入るけどさあ…。

いや、自分が考えなしだった。ACアダプタも含めて、幅や長さを測っておいて、検討すれば良かったのだ。どうして本体だけ測って、そこで良しとしてしまったんだろう。失敗した。

そのあたりも意識したうえで、ELECOMやサンワサプライの製品群について再度調べ直してみると、ELECOM製はACアダプタまで入らないけど、サンワサプライの製品群ならACアダプタも入ったであろう感じもしたり。このへんの店頭には何故かELECOM製のバッグしか置いてないけど。バッグに関しては、ELECOMはダメだな。…まあ、ACアダプタは持って歩かない・一緒に入れておかないなら問題ないんだろうけど。

#2 [pc] ヨドバシでHDDを注文

ヨドバシのサイトでHDDを注文しておいた。コンビニで支払い。

#3 [iappli] 操作系を修正中

左右キーのみを押すことで時計回り・反時計回りにカーソル移動していたのを、上下左右キーによるカーソル移動に変更。ただ、変更作業中に気になった点がいくつか。 ゲームにおけるカーソル移動と言うのは、大体感覚的に何故かイイ感じに移動してくれる、という実装が当たり前なので、そのあたりまで対応しておきたいのだけど。どうも、「どの感覚」が正解なのかがよくわからず。これがオプション画面等なら、感覚的に判り易いようにレイアウトをし直してしまう、なんてのもありだろうけど、ゲーム本編中のソレだからそういうわけにもいかんし。

ちなみにこういう感じの移動位置。 :

   0
 7   1
6     2
 5   3
   4
  • 0上で下キーを押すとどこに? 1? 7? 4? あるいは、移動なし?
  • 4上で上キーを押すとどこに? 3? 5? 0? あるいは、移動なし?
  • 1,2,3上で右キー、5,6,7上で左キーを押すとどこに? 左右反対側の位置? 上段か下段? あるいは、移動なし?
  • 0上で上キーを押すとどこに? 4? 移動なし?

たとえば、0上で下キーを押した場合は、1 か 7 に移動させようと思ったとして。どっちに移動したほうがいいのかと。
  • A. 1、もしくは7に、固定で移動する。<4上で上キーを押したとき移動する方向の反対側、としておくと判り易い?
  • B. 0に来る前の位置が1だったなら1に。7だったら7に。あるいはその逆。
  • C. 乱数で1か7のどちらかに移動する。<これ最悪。
  • D. その移動位置に何かイベントが発生していたら、イベントがあるほうに移動。<なかったら、あるいは両方あったらどうする?
  • E. ユーザがどっちに行きたいのかこっちで判るわけないんだから、そもそも下キーは受け付けない。
いわゆるフツーのプログラマーの感覚なら、E. が正解だろう常識的に考えて、と思いそうだけど。実際そうしてみると、イイ感じの操作にはならないんだよなあ…。や、下手に余計な事をして、かえって操作が混乱する・誤操作を増やしちゃうときもあるので難しいんだけど。とりあえず今回、E. は間違ってる。ユーザにとって「下に行きたい」という欲求があって「下キーを押す」のだから、そこで無反応だと「イラッ」とくる。…だけど反対側に行っちゃうとそれも「イラッ」とくるんだよなあ。

同じキーを連続で押してガンガン移動したいという需要があると考えるか、自分の行きたい方向を逐一指定したい需要があると考えるかで、仕様が違ってきそうな気もする。また、これがもし、カーソル移動するたびに0.n秒〜数秒のリアクションがあるなら、誤操作を極力減らす意味で余計な事をしないほうがいいんだけど。今回そういうわけでもないし。うーん。

まあ、こういうクイズがポロポロ出てくるのがゲーム制作なのです。

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

#1 [cg_tools] フルカラービットマップ画像を実使用色数で減色してpng変換するツールはないものかと

たとえばPC98のアプリ画面等は明らかに16色までしか使ってないわけで。PC98エミュの画面をキャプチャした際など、フルカラーでキャプチャしても、実際は16色以内に収められるはず。…OPTPiX(無印)はレジストして持ってるので、それで減色・一括処理できるといえばできるのだけど。それだと微妙に色が違ってしまう感もあり。

IrfanView の PNGOUT を使うと、実際に使っている色数をカウントして、インデックスカラー画像に変換してくれるっぽい。

_BlastPNGの簡単な使い方 :

pngoutを呼び出して使えるのか…。コレを使わせてもらうという手もありそうな。

一括処理でトリミングをしたい。 :

たとえばキャプチャ画像のウインドウ枠を削除したいときなどがあって。ViXの「総合変換」でもできるのだけど、画像が大量にある場合でもサムネイル表示するのがちと面倒な感も。何かいい手はないものか。…ImageMagickかなぁ。

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

#1 [neta][anime] 食用肉になる怪獣ってのはどうだろう

ウルトラマンその他に出てくる怪獣はえてして倒したらそれで終わり、だけど。人間の食料にもなり得る怪獣という設定はどうだろう。豚・牛・馬・羊・鳥から進化した怪獣だから、食材にもなる。生姜焼きにしたり、バターで炒めたり。 問題は、成育するまでの餌が大変そうだなという。

どうして食肉になり得る怪獣が少ないのだろう。 :

映像作品において、怪獣とは、観客に恐怖を与える存在でなければならない。つまりは、 基本的に肉食。故に、食肉にはなりづらいのであらうか。実在する動物で言えば、人間はライオンをわざわざ調理して食べるか、みたいな話で。…でも、熊は食ったりしそうだな。雑食の怪獣であれば、人間の食料になりえるイメージが付随するのかしら。

食材として扱われるかどうかは別にして、単に保護されるだけの怪獣ということであれば。たしかウルトラマンコスモスあたりがそんな感じの基本設定だったような。当時、「怪獣を倒さないウルトラマンなんて…」と思ったものだけど。意外と、設定面を煮詰めていった故に生まれた作品であったのだろうか。

怪人は食料になりえないだろうか。 :

仮面ライダーに登場する怪人とか。…無理か。一応、「人」だもんなぁ。

仮面ライダーが怪人をバリボリ食べてしまうという設定はどうか。ビジュアル的にアレか。EVAっぽいし。…逆はありそうだけど。ライダー龍騎で、カニライダーは、モンスターにバリボリ食べられてた。そう考えると、極めて特殊な存在・シリーズ中稀に見る画期的なライダーだったのかもしれない。>カニライダー。

#2 [neta][tv][jiji] 皇室特別番組でこの声優さんがナレーションしたらかなり違和感を覚える、みたいな話

妹と食事時にそういう話をしていたのだけど。林原めぐみがナレーションしてたらちょっと違和感がありそうだなと。…意外とすんなりこなしてしまうか。上手いし。TARAKOはどうか、と言ってみたら、妹から「あの人の声はコミカルっぽい場面を演出するときに使われそう」と反論された。たしかにそうかもしれん。

ていうか男の子が生まれてつまらんなと。>皇室。 :

女の子が生まれたら色々議論せざるをえない状況に陥っただろうに。などと数日前のニュースに、今頃反応。

基本的には天皇制廃止を望んでる自分なのだけど、それは一旦さておいて。男の子が生まれないだけで状況が維持できなくなるルールというのはそもそも何かがおかしいと思うわけですよ。維持したいなら維持したいで、維持しやすいルールにしとけと。ホントに維持したいと思ってるのか。みたいな。

結局、私たちは、子や孫の世代に問題を先送りしてしまったと、そういうわけでありましょう。嗚呼、どこまでも無責任な現世代。後の世代から怨嗟の声が上がるのは、ほぼ間違いない。ジジババ連中が問題を放置したからこんなことに、とか言われちゃう。…せめて、「こういう状況になったら、こうやって解決できるかもしれん、と、そういう話はしてました」ぐらいの情報は後世に残しておかないとマズイような気がするのでした。

#3 [zatta] _伴天連 - ばてれん

キリシタン宗門の神父。ポルトガル語のパードレは,当時の発音として子音の間に次の母音を挿入して日本語化する方法がとられパーデレと呼ばれた。『室町家御内書案』所収,永禄3年の禁制に「波河伝連」とある。もちろん「波阿伝連」の誤記である。それが変体仮名で「伴天連」と記すことから転訛して〈バテレン〉と読まれるようになった。

伴天連 より

禁教時代になると「破天連」という当て字も現れ,俗説で天を破って飛行する人となどとされ,〈バテレンの魔法〉観が江戸時代人に定着した。

伴天連 より

なるほど。

#4 [web] _切込隊長BLOG(ブログ) - 乙武洋匡氏のブログの小炎上で寄せられたコメントを深く吟味する

観察ってのはこうやるのかと素直に感心してしまった。

#5 [iappli][java] _eclipse - プロジェクトの読み込み/書き出し

既存プロジェクトをコピーして、新しいプロジェクトを用意した。

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

#1 [digital] _相互テレイグジスタンスロボット「テレサ2 (TELESAR 2)」

遠隔操作+光学迷彩技術の応用。 _(via 究極映像研究所)

#2 [anime] _ロリコンを採り入れたボディ

『超時空騎団サザンクロス』なるアニメ作品のプラモデルを紹介している記事。時代の先を行き過ぎたのか、考えが浅かっただけなのか…。 _(via 電網山賊)

#3 [jiji] _「干からびたチーズ」という政治的言語

_一世一代の名演技を見た

今頃になってこの話を知った。 _各種失態の報道 で変な印象があったのだけど。森さんって凄い人なんだな。

#4 [zatta] _郵政民営化と、保守主義と、システムエンジニア - 「出来ません」しか言わないエンジニア = 使えないエンジニア

耳が痛い。いや、自分はエンジニアじゃないけど。 _(via 圏外からのひとこと)

#5 [anime] _Cartoon Network | The Hi Hi Puffy AmiYumi Show

初めて見たけど、いい動きをするなぁ。こういう動き方は好き。

#6 [jiji] _切込隊長BLOG 俺様キングダム casTY本店 : これはまずかろう - 亀井先生、仏恥義理トップ。

_本当にトップ だ。何故。

#7 [web][zatta] _岩手の噂 - Chakuwiki

凄い量になってる。これほどまでに岩手には噂があるのか。 _(via 5P日記)

_福島の噂 - Chakuwiki :

少な。まあ、そういう土地柄お人柄ってことなのかも。恥ずかしがりやが多い県なのだ。たぶん。

13. 首都機能移転・・・禁句である。
アハハ。

そういや、自分の投票すべき選挙区で立候補してる、自民党の議員さん。宣伝チラシに「首都機能移転は悲願」等の記述もあって。読んでてクラクラ。まだ言ってる人がいるんか。

15. 探偵ナイトスクープで局長の西田敏行(福島県人)が、怪しい関西弁を話す瞬間、殺意を覚える。
アハハハ。…いや、でも、関西弁って移るからなぁ。アレは伝染力がある。

この記事へのツッコミ

Re: 岩手の噂 - Chakuwiki by けいと    2005/09/18 15:07
リアル岩手県民なので突っ込み(笑)

岩手は福島県のように
「会津」「中通り」「浜通り」のような大分類が明確ではなく、
かつ、
福島、郡山、いわき、会津若松の4拠点都市
(もしくはそれに白河・相双をふくめた6つでもよい)を中心とした
人的交流がカチッと決まっていますが、
岩手県は盛岡以外の町がどんぐりの背比べ。
市町村合併前でも
盛岡28.9、北上9.2(これも合併前は北上6+江釣子村3)、花巻7.3、一関6.4、水沢6.1と
6万〜7万クラスの都市が4号線沿いにずっと並んでいる。
このためにどこが中核というわけでもなく、
全部の都市がそれなりの存在感を出している。
合併後も
盛岡30.3がぬきんでているほかは
奥州(旧水沢)13.3、一関13.0、花巻10.7、北上9.2とこれまた大差ない
状態が続くので、
それなりの存在感を出し続けることでしょうし、
沿岸部の久慈、宮古、釜石、大船渡や、
それ以外の内陸都市である、二戸、八幡平、遠野も
他都市との交流がほとんどないので
小さいながらも地域の存在感を出しやすい。

こんなわけで地域地域に根ざした噂がでやすいんでしょう。

須賀川に住んでいれば
否応無しに郡山や白河の話題が飛び込んできますが、
岩手では他都市との交流が少ないので
自分のところだけで完結するんですよね。
ですから、
「岩手県」のコミュニティをつくっても
「岩手県民」としてはなかなか盛り上がれません。
岩手らしさ by mieki256    2005/09/20 01:50
> 〜こんなわけで地域地域に根ざした噂がでやすい

なるほどなぁ…。噂がでやすい・でにくいという状態一つを注目しても、
その県の地理的特性・人口分布の特性が既に現れてると。
なかなか興味深い話であります。

#8 [web] _野蛮人の認知モデルによればWebページは自我の一部。よって「ディープリンク禁止」「無断リンク禁止」という風習が生まれる

なるほど…。

_売られるために育てられる作品より、自由に生きる作品の方が幸せか :

「もういつ終了するか分からない」「長くは続けられない」「リンクするのでなく必要なら全文コピーしてほしい」といったことは、哲学や宗教ではなく、単純にサーバ負荷が高くなると、お金が払えなくなって続けられなくなる、ということなのだ。もっと露骨に言えば「無断コピーしてもらった方が、わたしは儲かる」(コストを削減できる)。ひるがえって、リンク等は勝手にしてくださいと明記してあるのに、リンクというこちらの帯域を食う行為をするうえに「リンクしていいですか。お返事ください」などとメールをよこして管理者らの時間を浪費させるのは、絶対に避けるべき行為だ。
ただしこれは心理的な面やスケールの要素もある問題で、「情報の作者として尊敬されたい」というモチベーションが「情報自体」を生かしたい気持ちを上回ると機能しない。図式的には「わたしが死んだらこの情報は利用できなくなります」という作者と作品の無理心中関係だ。なぜならその作者にとって作品は第一義的に自分の功名心を満たすためのものだから、そのこと自体は少しも悪くないが、結果としては、本人が死んでしまえば、その作者にとっての作品の第一義的な存在意義もなくなるわけだ。
自分の生み出したコンテンツを自我から切り離して捉えることができるか、あるいは自我の一部として認識し続けるか。という話になるのかしら。

#9 [jiji] _内田樹の研究室: カトリーナのもたらした災禍

アメリカのハリケーン「カトリーナ」による被害に関しての考察記事。「階層化社会」と「銃」が、アメリカの欠陥の徴候として見える。という話。 _(via 圏外からのひとこと)

_霞が関官僚日記 - 役人的に興味深いハリケーンカトリーナにまつわるアメリカの動き方 :

官僚主義・役人の法的手続きによって救済活動が遅れに遅れたという話。これほどまでにヒドイとは。

そういやスマトラ沖地震による津波被害でも、どこぞの国が似たようなトホホぶりを見せていた記憶があるなぁ。

_有事法制なき悲劇 - 阪神大震災 :

自衛隊は準備を整え、知事からの出動命令を今か今かと待っていたのである。しかし兵庫県の貝原知事は「事実関係が確認できるまでは自衛隊の要請はできない」といってそれをしなかった。
時の総理村山富市氏は「道路を閉鎖するのは私権の侵害となる」との理由から道路規制をしなかった。
救助犬の検疫でもめた。
ヘリが飛ばなかった。
日本も似たようなものか。もっともこれらを教訓にして多少は改善されてるのだろうけど。

救助犬の話はもう少し補足が必要かしら。検索してみたら、 _こちらのページ でもう少し詳しい説明があった。
フランスの方が救助犬を伴って空港に降り立ちました。しかし日本は外国の犬の検疫証明を認めず、改めて検疫を求めたり、さらにフランス料理の出せる宿の手配を延々と続けるなど、何時間も空港で足止めしました。阪神大震災のときの、新聞で報じられた恥ずべきエピソードです。
…アレ? スイスじゃなかったっけか。

_震災を語る というページにもう少し解説が。
例えば、スイスやフランスからの救助犬の受け入れは、検疫が遅れたことが通説のようになっているが、そんなことはなかった。スイスは狂犬病の汚染地域。日本の犬と接触されると困る。水際で止めるのは当然だ。むしろ今考えると、メリット以上に、受け入れ側の自治体の負担が大きかったことが分かる。
スイスとフランスから申し出があったのか。狂犬病とはなぁ…。でも人命救助が優先されるべき場面でもあるような。

_LIVING WITH DOGS - 記事-JRDN救助犬キャンプ(富士・朝霧高原) というページには、
阪神・淡路大震災の時、正式な外交ルートを経てスイスやフランスから来た災害救助犬は、各メディアで報道されました。しかし、その一方で、アメリカからの救助犬は、民間ボランティア団体からの出動の申し出があったにも関わらず、検疫その他の諸問題がクリアできずに残念ながら入国が実現しませんでした。
とある。アメリカからの申し出もあったけど断ったのか。

_こちらのページ にも情報が。
スイスからは早速救助犬が派遣されたが、日本の検疫で足止めされた。またフランスからはボランティアの医師たちが来日したが、日本の医師免許を所持していないという理由で医療行為は制限された。日本の官僚は偉大だ。
官僚は偉大だ。

まあ、起きる前から災害時のパターンを予想・想像して手続きを決めておくしかないような。ところで日本の場合、台風被害の場合はどの程度関連手続きを想定してるのだろうか。…しょっちゅう来てる国だから、大体は決まってるのかな。

ちょっと不安なのは、「自衛隊」から「自衛軍」になっちゃうと、そうそう救助活動等を要請できない雰囲気になりそうな…。考えすぎかしら。

時には悲観論者も必要かもしれない :

そういう人に災害時の場面を妄想させると、きっと穴のない多数の状況設定を出力してくれそう。後はそれぞれの状況設定に対して官僚が適切な対策を考えれば…。

と思ったがえてして悲観論者ってのは一つの状況設定を想像するとそこから離れられなくなりそうな印象もあるなぁ。

#10 [zatta] ゼーベック効果関係の話をメモ

コメント欄で、「温度差で電流を発生できる」と教えてもらって、興味が沸いたので検索。

_進化する腕時計 - セイコーサーミック : ゼーベック効果について :

_「人間の体温で動く腕時計」

既に腕時計を動かしていたとは。

人の体から出る熱エネルギーは、全部を電気エネルギーに代えたら、60ワットの電球をつけることができるぐらいになるんだ。
素晴らしい。いや、全部を変換することは無理だろうけど。でも、例えばPCの廃熱を利用したら結構なかなか…と思ったけど。PCの場合は冷やさないと各種チップ・コンデンサが壊れるから、絶えず温度差を確保するのはちとアレか。

_ゼーベック効果 - Wikipedia :

_熱電対 - Wikipedia

ゼーベック効果で温度を測定してる事例が多い、ということかしら。

_産総研:プレス・リリース 棄てる熱から発電 - セラミックス材料で実用可能な高温用熱電発電モジュールを実現 :

ポイント
1. 800℃の高温動作でも酸化による性能劣化が全く無い熱電変換モジュール
2. 熱機関のトータル効率向上による省エネ、CO2排出削減に大きく貢献
3. 稀少元素や毒性元素を全く使わない安全、安心、安価な発電装置
4. いつでも、どこででも熱源さえあれば電気の供給を可能に
おお。800℃まで耐えるとは。実験例では、お湯を沸かすときの熱で携帯電話に充電をしてる。

道路に貼り付けたらどの程度発電できるだろう。と思ったけど温度差がないと発電できないのか。うーむ。

_産業技術総合研究所「消える70%のエネルギー? - nとpがそろって一人前!?」(1) :

_産業技術総合研究所「消える70%のエネルギー? - nとpがそろって一人前!?」(2)
また優れた熱電材料の条件として、電気をよく流しながらも熱は流しにくいことも必要になります。しかし、電気をよく通す電気抵抗の小さい物質は、熱もまたよく伝えます。熱を伝わりにくくすれば、電気も伝わりにくくなります。そして一般的にゼーベック係数が高い物質には電気抵抗が大きくなってしまう傾向があります。

まさに“あちらを立てれば、こちらが立たず”なのです。
ガーン。

_産業技術総合研究所「消える70%のエネルギー? - nとpがそろって一人前!?」(3)
ところで、熱電発電には2つの材料が必要です。乾電池であれば、プラスとマイナスを直列につなげば電気量を増やせます。しかし熱電発電では、高温部と低温部の位置で熱電材料のプラスとマイナスが決まるので、同じ材料では高温部がすべてプラス、低温部がすべてマイナスという具合になってしまうのです。これでは並列になり、大きな電気量は得られません。これをうまく直列にするには、一つおきにプラスとマイナスが逆転すればいいのです。つまり、高温部がプラスになる材料と高温部がマイナスになる材料が交互に配置されればいいわけです。
ちなみに、産総研で合成したCa3Co4O9(Co-349)は、高温部がマイナスになる性質をもつ熱電材料(p型熱電材料と言います)です。一方、高温部がプラスになる熱電材料はn型熱電材料と呼ばれます。実はいままでに発見されているn型熱電材料は、高温・空気中において最高でもZTが0.3程度しかありません。つまり、優れたn型熱電材料さえ見つけることができれば、熱電発電は一気に実用化へと歩を進めることが可能となります。そのため世界の研究者は、血まなこになって高温・空気中で使えるn型熱電材料を探し続けているのです。
つまり、n型熱伝材料を“発見”できれば、 _田中さんみたいにノーベル賞を貰える かもしれないと。<そうなのか?

全然関係ないけど、この _ゲノムアニメ劇場 なるページ。YAMAHA XG Plugin (ブラウザ上でMIDIを鳴らすためのプラグイン)を要求してるけど…。YAMAHA は当の昔に、 _XG Plugin の公開・提供・配布を止めちゃってる んだよね…。

#11 [tv][movie] 『ラッシュアワー』を少しだけ見た

相変わらず安っぽい画だなぁ。どうしてジャッキー主演の映画はいつでもこんな画になってしまうのやら。でも、アクションはとにかく秀逸。素晴らしい動き。会話・展開のテンポも早い。飽きさせない。

#12 [zatta] _本物の向上心と逃げの向上心

本物の向上心を持つ人は「他人の目から見た、よりよい自分」にとらわれることなく、“自分が”どうなりたいのか、つまりどう変化したいのかを知っています。理想の自分像が明確になっているのです。そして、現状の自分と理想の自分の差という「当たり前の現実」をしっかり受け止める勇気を持っているのも、本物の向上心を持つ人の特徴。したがって彼らの努力は「理想の自分と現実の自分の差を埋める努力」、つまり『自分を変化させる努力』といえます。

一方、逃げの向上心は、自分が置かれている現在の環境が嫌だから、状況が納得いかないから、そして『そこから逃がれたいから』努力するといった類のものです。一見すると、さまざまなことに挑戦したり学んだりして(本物の)向上心にあふれているように見えるし、当の本人もすっかりその気ですが、本物の向上心を持つ人と違って成果が出ません。逃げの向上心に基づく転職チャレンジや、資格&習い事活動をみれば一目瞭然です。

その理由は、逃げの向上心あふれる人たちは、環境や自分以外の人といった“他”の変化を望み、自分を変えようとしないから…。つまり逃げの向上心派は、「他人と過去は変えられない。変えられるのは自分と未来だけ」という当たり前の自然の摂理に逆らってしまっているのです。
_(via あけてくれ)

#13 [zatta] _日本の若い女の子がAV女優になるのは『JJ』のせい

日本の若い男の子がAV男優になるのは『xx』のせい。という言説はたぶん出てこないだろうけど。この違いは何なんだろう。 _(via あけてくれ)

#14 [zatta] _木を盲信してはいけません。 - 水不足の場所に木を植えるとますます悲惨な状況に

そういやそうか。…草の場合はどうなんだろう。 _(via あけてくれ)

#15 [zatta] _含羞をもたぬ新都庁。すべてが清潔。だが街にはいかがわしい場所がなければならない。なぜなら我々人間は、そもそもいかがわしい存在

中野貴雄監督のWeb日記。2005/08/13。故・石井輝男監督の残したエッセイらしきものの一部。…そのとおりだと思ったり。

#16 [anime] SEED2、ニセモノさんの回その1たぶん

そもそもこのキャラってガンダムで言えばどのキャラなんだろう。なんとかプルとか?

予告映像を見て、なんだかリンミンメイみたいだなと思ったり。多少意識はしてるのだろうか。それともアニメでアイドルを描くと、どれもこれもこんな感じになるんだろうか。

後番組のCMが流れた :

てっきり、またガンダムかと思ってたけど、違うのだな。どこが作るんだろう。まあ、放映が始まれば判るか。

#17 [anime] エウレカセブン、腕の回をビデオで見返し

再度ビデオで見返したらその手のカットの時間って結構短かった。ような。色々フィルタをかけて、あるいは背景となるオブジェクトのシルエットを強調して、それとは見えないような工夫も加えてあるようだし。衝撃的なシーンだから時間が長かったような感覚になってしまったのだろうな。>自分。…SEED2はどうだったかなぁ。アレも結構短かったのかも。

それにしても、来週はどうなってしまうのだろう。予測がつかない番組だ。グー。

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

#1 [nitijyou] 親父さんが新潟へ

写真を撮りに。今日の深夜から、土曜の午後まで。

#2 [tv] BSアニメ夜話とやらを見た

ネット上で見かけた、「999」や「カリ城」の回の感想記事を見て、面白そうだと思ったので。

今日は「CCさくら」の回だった。ネタもゲストも薄かった。ハズレな感じ。毎回こんなレベルだったら見る必要ないな…。

#3 [novel] 「マリみて」卒業話前編後編を読んだ

送辞云々のあたり、上手いなー。

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

#1 [pc][gentoo][linux] Firebird も拡張してたら同様の問題が発生

一般ユーザで拡張機能をインストールしようとすると、時々、「ファイル書きこみの権限が無いよ」とエラーになる。面倒臭いので root になって拡張機能を一通りインストール。root で Firebird が起動できる事を確認した後に、一般ユーザになって起動してみたら…うーむ、起動しませんよ。以前の Mozilla 1.4 と同じ状態になってしまった。

どちらのディレクトリに入れればいいのか :

どうやら、ユーザのホームディレクトリ ~/.phonix/default/xxxxx.slt/chrome/ *1 以下に格納できる拡張機能ファイルと、Firebird の入ってる /usr/lib/MozillaFirebird/chrome/ 以下じゃないと格納できない拡張機能ファイルが混在してるらしい。また、インストール時、「アプリのディレクトリに入れるならOKを。ユーザのディレクトリに入れるなら Cancel を押せ」と親切に尋ねてくれる場合があるのだけど、OK,Cancelのどちらでどうなるのかは、拡張機能を作った人の好みによって異なってるようで、メッセージをよく読まずに迂闊に片方だけ押し続けてると酷い目に合う。 *2

そもそも拡張機能の類は、極力アプリのディレクトリに入れたほうがいいのか、それともユーザのディレクトリに入れたほうがいいのか。そこからしてわからないんですけど。トホホ。

拡張機能ファイルを削除していったら動いたり動かなかったり :

/usr/lib/MozillaFirebird/chrome/以下の拡張機能ファイルをちょこちょこ削除、install_なんちゃら.txt 内の該当行削除、overlayinfo/ , chrome.rdf 削除、とかやったら一般ユーザでも起動した。が、再度、拡張機能ファイルをインストール後に、root と 一般ユーザを行ったり来たりして起動してると、また一般ユーザで動かなくなる。アプリのディレクトリに入れた拡張機能ファイルのパーミッションが絡んでるのかと思って、関係ありそうなファイルのパーミッションを試しに変更してみたけど変化無し。

いっそ、全ての拡張機能をユーザのホームディレクトリに入れれば問題解決かもしれないけど、 *3 問答無用でアプリのディレクトリに入ってしまうヤツも多いし。またそれらの「問答無用」タイプにも、root だけが利用できるものと、root , 一般ユーザ関係無く利用できるものがあったりで、もう何が何やら。

格納先を統一してもらえないだろうか :

アプリのディレクトリ、ユーザ別のディレクトリ…どちらに入れるか統一してもらうわけにはいかないのだろうか。…統一すると何かマズイ事でもあるんだろうか。あるいは統一できなくても、このフォルダ内のパーミッションは全てこうする、等の情報なりルールなりを強く明示するなり規定するなりしてもらえないものだろうか。

リンクをクリックするだけでインストールされるのはたしかにありがたいのだけど。そういった簡便さばかりを強調せずに、不具合が出た時の解決方法についても情報が欲しいところ。正直、かなり疲労困憊状態であります。それともコレは gentoo だけの問題なんだろうか。他のディストリビューションではすんなり動くのだろうか。ていうかブラウザの設定するだけでこんなに時間かかってたらヤバイ。しかも動いたって重いわけだし。ue-n... yappa gentoo tte shin doi no ka-...?

*1: ディレクトリ名のつづりは怪しいです。
*2: 英語赤点野郎のオイラには英語メッセージは厳しいス。一部で見かけた、「OK -> user directory , Cancel -> Mozilla directory 」といった書き方だと非常に助かるのだけど。下手に英語の文章で書いてあったりするともうダメですわ… >自分。
*3: その代わり、ユーザが変るたびに同じファイルをインストールし直さないといけない。

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

#1 NIC入替え

メインPCのNICを100BASE-TXのヤツに替えました。
_corega FEther PCI-TXS 。RealTeK RTL8139C使用(たぶん)
一応ネットには繋がったみたいだけど、体感的に反応が遅いのはなぜなんだろう。 _

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

#1 大河ドラマにおけるCG

北条時宗見てたんですが。
あのたくさんの元の船って、やっぱりCGなんでしょうか。
数隻実際に作って、あとはコピペなのかな。
って動画でコピペなんてどうやってやるんだろう。

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

#1 フリクリ

弟がフリクリ1〜3のDVDを持ってきてました。
弟のPC環境(Athlon700MHz,G400DH,パイオニアのDVD-ROMドライブ,WinDVD)では2巻で妙なノイズが出てるのだけど、オイラのPC環境ではどうか?ってことで。
ちなみに他のDVDはAthlonでも問題無く再生できてるそうですが…

で、フリクリ鑑賞させてもらったんですが。

スゴイっス。
ムチャクチャだぁ。
もう絵を見てるだけで楽しい。
EDカッコイイなぁ。

ってことで、大変楽しませてもらいました。
スゴイやコレは。

で、ノイズなんですが。
オイラは全然気がつかなかったんですが、やっぱり出てるそうで。
ちなみに妹のPS2でも同じでした。
ソースの段階で入ってるのかな?という結論に。

で、今日のうちに弟は仙台に帰っていきました。
にしても、MT車、運転しずらそう。
家から道路に出る時エンストしてたし。
オイラAT限定で教習受けてて正解かも。
MTだったらダメダメだったろうなぁ。

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

#1 (NoTitle) PM8:00起床。トホ。...

PM8:00起床。トホ。

メインマシンの復旧作業続行。不具合出るかなと睨んでいたキャプチャーボードでやはり問題発生。TV画面が出ない。これは以前IRQの関係での不具合を経験しているので、ボード引っこ抜きの再起動の…アレ?ダメだ。うっ、今度は別のボードのIRQと重なっている。むぅ。
仕方ないので今までタブレット(シリアル接続)に使用していたCOM2を使用不可に設定。再起動。今度は上手くIRQが割り当てられた様子。よかよか。でも使えない機能があるってのは精神衛生上よろしくないですな。…とかやってるといつまでも泥沼にハマリそうなので、この件に関しては思考停止しておこう。これでいいのだ。

ボードを引っこ抜くついでに、サブマシンに使用していたCD-ROMドライブ TEAC 532E と、メインマシンの 松下製 CR-589 を交換。TEACのほうが音が静かだし(といってもそこそこうるさいけど)、CD-ROMも読めるのが多いし。ついでにサブマシンに今まで部屋の隅に転がしていたHDD FIREBALL-ST 4.3G を増設。これでネット上で落とした怪しいデータを保存する場所が増える… ( ̄ー ̄)ニヤリッ …が、format,scandiskをしたところ、なんか「ガコ、ガコ、ガコ」とかケースの中から異音が。そういやこのHDDって、以前「キュイーン」とか変な音がして危険だからと外してたんだっけ。すっかり忘れてたよ。トホホ。…ま、いっか。ホントに御亡くなりになるまで使ってみようかな。 <後で大後悔の予感が…  ( ̄ー ̄;)

なんかここんとこ、毎日親父さんに就職関係で御小言もらっているような。トホホ。
就職で思い出したけど、たぶんこの世代って、仮に家の中でする仕事…例えば漫画家・小説家・在宅勤務のプログラマーとかの職業に関して、あまり理解は得られないんだろうな。ネタを考えたり、アルゴリズム考えたり、そういった瑞からは何もしてないように見えるけど頭の中ではフル回転なんて時、必ず口を出してきそうな感じがする。…なんて今の自分の状況と関係無い事考えても無意味だな。ヤメヤメ。そんなことよりPCの環境を復旧しなきゃ。
…などとこっちも思考停止だな。なんか逃げまくりです。ふにゃ〜

以上、25 日分です。

過去ログ表示

Prev - 2024/03 - 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