昔の最近の出来事(2015.04)

2015/04/30

遅めに帰着。

32bit MinGW-gdc調査。普通の関数呼び出しとクラスのメソッド呼び出しの gimpleを見比べたり。

以下のようなコードをコンパイラオプション「-g -fdump-tree-all -O0 -frelease」 でコンパイルしてみました。

     1: void main()
     2: {
     3:   Foo f = new Foo() ;
     4:
     5:   size_t function(in void*) tF=&testFunc;
     6:   size_t delegate() dg_footestfunc = &f.FootestFunc ;
     7:
     8:   tF(cast(void*)f) ;
     9:   testFunc(cast(void*)f) ;
    10:   f.FootestFunc() ;
    11:   dg_footestfunc() ;
    12: }

これに対応するGIMPLEは以下のようになりました。
     1:D main ()
     2:{
     3:  struct Object & D.5360;
     4:  int (*<T6e>) () * D.5361;
     5:  uint Foo::<T8e3> (struct Foo *) * D.5362;
     6:  int (*<T6e>) () * D.5363;
     7:  uint Foo::<T8e3> (struct Foo *) * D.5364;
     8:  uint void::<T952> (void *) * D.5365;
     9:  void * D.5366;
    10:  int D.5367;
    11:  struct uint delegate() dg_footestfunc;
    12:  uint (*<T950>) (const void * const) tF;
    13:  struct Foo & f;
    14:
    15:  try
    16:    {
    17:      D.5360 = _d_newclass (&mingwgdcfailed_test3.Foo.__Class);
    18:      f = __ctor (D.5360);
    19:      tF = testFunc;
    20:      D.5361 = f->__vptr;
    21:      D.5362 = MEM[(uint Foo::<T8e3> (struct Foo *) *)D.5361 + 20B];
    22:      dg_footestfunc.object = f;
    23:      dg_footestfunc.func = D.5362;
    24:      tF (f);
    25:      testFunc (f);
    26:      D.5363 = f->__vptr;
    27:      D.5364 = MEM[(uint Foo::<T8e3> (struct Foo *) *)D.5363 + 20B];
    28:      D.5364 (f);
    29:      D.5365 = dg_footestfunc.func;
    30:      D.5366 = dg_footestfunc.object;
    31:      D.5365 (D.5366);
    32:      D.5367 = 0;
    33:      return D.5367;
    34:    }
    35:  finally
    36:    {
    37:      dg_footestfunc = {CLOBBER};
    38:    }
    39:}

これだけ見ると GIMPLEの関数呼び出し表現は途中に変数を介するか否かの違いは あるものの、どれも同じに見えます。しかし、これがアセンブラの最終コードに なると、以下のような感じになります(対応をコメントで示しています)。

004013b6 <__Dmain>:
  4013b6:       55                      push   %ebp
  4013b7:       89 e5                   mov    %esp,%ebp
  4013b9:       83 ec 28                sub    $0x28,%esp
  4013bc:       c7 04 24 00 00 49 00    movl   $0x490000,(%esp)
  4013c3:       e8 68 89 01 00          call   419d30 <__d_newclass>
  4013c8:       89 c1                   mov    %eax,%ecx
  4013ca:       e8 ac ff ff ff          call   40137b <__D20mingwgdcfailed_test33Foo6__ctorMFZC20mingwgdcfailed_test33Foo>
  4013cf:       89 45 f4                mov    %eax,-0xc(%ebp)
  4013d2:       c7 45 f0 4a 13 40 00    movl   $0x40134a,-0x10(%ebp)
  4013d9:       8b 45 f4                mov    -0xc(%ebp),%eax
  4013dc:       8b 00                   mov    (%eax),%eax
  4013de:       8b 40 14                mov    0x14(%eax),%eax
  4013e1:       8b 55 f4                mov    -0xc(%ebp),%edx
  4013e4:       89 55 e8                mov    %edx,-0x18(%ebp)
  4013e7:       89 45 ec                mov    %eax,-0x14(%ebp)
  4013ea:       8b 45 f4                mov    -0xc(%ebp),%eax
  4013ed:       89 04 24                mov    %eax,(%esp)
  4013f0:       8b 45 f0                mov    -0x10(%ebp),%eax
  4013f3:       ff d0                   call   *%eax                  # tF (f)
  4013f5:       8b 45 f4                mov    -0xc(%ebp),%eax
  4013f8:       89 04 24                mov    %eax,(%esp)
  4013fb:       e8 4a ff ff ff          call   40134a <__D20mingwgdcfailed_test38testFuncFxPvZk>  # testFunc (f)
  401400:       8b 45 f4                mov    -0xc(%ebp),%eax
  401403:       8b 00                   mov    (%eax),%eax
  401405:       8b 40 14                mov    0x14(%eax),%eax
  401408:       8b 55 f4                mov    -0xc(%ebp),%edx
  40140b:       89 d1                   mov    %edx,%ecx
  40140d:       ff d0                   call   *%eax                  # D.5364 (f)
  40140f:       8b 45 ec                mov    -0x14(%ebp),%eax
  401412:       8b 55 e8                mov    -0x18(%ebp),%edx
  401415:       89 d1                   mov    %edx,%ecx
  401417:       ff d0                   call   *%eax                  # D.5365 (D.5366)
  401419:       b8 00 00 00 00          mov    $0x0,%eax
  40141e:       c9                      leave
  40141f:       c3                      ret

以前、デバッガで追いかけた時、 受け側の方で %ecx をポインタだと思っているようだと書いた事があったのですが、 ただの関数呼び出しでは特に%ecx に値を仕込んでいる様子は無かった為、 これまで呼び出され側に問題があるものだと思っていました。ところが、 メソッド呼び出しに対応する、アセンブラコードの40140bや401415で %ecx に値を仕込んでいる節があります。 呼び出し方が、ただの関数呼び出しとメソッド呼び出しとでは違っている為、 関数呼び出しを使ってメソッドをアクセスを行うと事故が起こるという流れ のような気がしてきました。
Linuxビルドのgdcだとどうなのか?という点を調べてみると何か判るか??

そういや gdcのDMD2.067マージが始まったようです。

2015/04/29

昼前起床。

すっかりほっぽらかしにしていたi686 MinGW-gdcのコンパイルバグ調査を ちょろっと再開してみたり。 で、今の所の最小コードでも、GIMPLEとかにするとまぁまぁなサイズになる 為、もっと小さくできないかと考えたり。

問題となっているのは、libdruntime/object_.d内の関数呼び出しの 部分(下の981行目)なのですが、xtoHashの中身をどこで設定しているのかが 判らなかったり。

    963 class TypeInfo_Struct : TypeInfo
    964 {
     :
    976     override size_t getHash(in void* p) @safe pure nothrow const
    977     {
    978         assert(p);
    979         if (xtoHash)
    980         {
    981             return (*xtoHash)(p);
    982         }
    983         else
    984         {
    985             return hashOf(p, init().length);
    986         }
    987     }
     :
   1063   @safe pure nothrow
   1064   {
   1065     size_t   function(in void*)           xtoHash;
     :
   1075   }

このコードが期待通りに動いたとすると、pはとある構造体の実体へのポインタが入り、 実行されると引数無しの構造体のメンバー関数呼び出しになります。 どうやらコンパイラがxtoHashの中身を設定するコードを生成しているっぽい。
このコードを元に単なる外部関数呼び出しコードを書いてみたのですが 特に問題無く動作したり。

     1  import std.stdio;
     2
     3  size_t testFunc(in void* p){
     4    writef("Here is testFunc %08x %08x",&p,p) ;
     5    return(0) ;
     6  }
     7
     8  class Foo{
     9    size_t function(in void*) tF;
    10
    11    this(){
    12      tF = &testFunc ;
    13    }
    14
    15    size_t testfunc(in void* p){
    16      return( tF(p) ) ;
    17    }
    18  }
    19
    20  void main()
    21  {
    22    Foo f = new Foo() ;
    23    int *p ;
    24
    25    f.testfunc(p) ;
    26  }

上記コードのクラスFooの メンバー変数 tFはfunction宣言していますので、 クラスのメソッドや構造体のメンバー関数を入れようとしても文法的にエラーになります。 functionをdelegateにすれば勿論入れられますが、それだと元にしたコードと 違うものになります。という訳で、普通には書けない事をやってる所で バグっているという状況かも。

以前調べた通り、いわゆる関数呼び出しと メソッドやメンバー関数呼び出しとでは、thisが引数に自動挿入されるか否かの 違いがあります。なのでfunction宣言した変数にメソッドやメンバー関数を代入 する事は、文法的に無理なのは納得できる所なのですが、 ならばphobosも文法的に無理な方法で表現しないで欲しいとは思います。 だって、コードが読めないんだもん(文法的に無理なのにそれで良いとしている理由が 見ただけでは判らない)(^^;

2015/04/28

遅めに帰着。

Cygwinの2.0.0-1が来ている模様。アプリアップデートがかかると思うので 落ち着くまで様子見。

2015/04/27

遅めに帰着。

DMDの2.067.1がリリースされているようです。変更量が少ないなぁ? と思ったのですが、2.067.0から1ヶ月しか経っていない からこんなもんか。

2015/04/26

昼前起床。

Cygwinで x86_64 MinGWクロスgdcをビルドしてみたり。ソースはi686 MinGWクロスで 使用したものと同じなのですが、libphobosのビルドでエラー。 ICE(Internal Compiler Error)なのでどうしたもんか。

/home/TANE/develop/dlang/gcc/gdc031_20661_510/GDC-ab7ac60cadc9d6e71a114d1c2948f64b9d0deaa1/build_x86_64mingwcross/./gcc/gdc -B/home/TANE/develop/dlang/gcc/gdc031_20661_510/GDC-ab7ac60cadc9d6e71a114d1c2948f64b9d0deaa1/build_x86_64mingwcross/./gcc/ -L/usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/lib -L/usr/local/gdc031_20661_510_mingwcross/mingw/lib -isystem /usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/include -isystem /usr/local/gdc031_20661_510_mingwcross/mingw/include -B/usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/bin/ -B/usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/lib/ -isystem /usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/include -isystem /usr/local/gdc031_20661_510_mingwcross/x86_64-w64-mingw32/sys-include -o std/math.o -Wall -Werror -g -frelease -O2 -nostdinc -pipe -Wno-deprecated -I../../../../gcc-5.1.0/libphobos/src -I../../../../gcc-5.1.0/libphobos/src/../libdruntime -I./libdruntime/x86_64-w64-mingw32  -c ../../../../gcc-5.1.0/libphobos/src/std/math.d
../../../../gcc-5.1.0/libphobos/src/std/math.d: In function 'copysign':
../../../../gcc-5.1.0/libphobos/src/std/math.d:4738:5: internal compiler error: in declare_return_variable, at tree-inline.c:3373
     return copysign(cast(R)to, from);
     ^

../../../../gcc-5.1.0/libphobos/src/std/math.d:4738:5: internal compiler error: Aborted
gdc: internal compiler error: Aborted (program cc1d)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
Makefile:511: ターゲット 'std/math.o' のレシピで失敗しました

ICEでずっこけるものの、.oファイルの残骸ができてmakeは先に進められそうだったので、 そのまま進めてみたり。すると、数学系のコードでICEずっこけする箇所が他にも いくつかありました。 何かしらのハマりパターンがあるようです。それを越えられれば、他はエラー せずにビルドできました。

数学関数を使っていなければいけるかな?と思いインストールしてみたものの、 libphobos内で数学関数を参照している(まぁ、writef()とかは使うよな)ようで、 リンクに失敗。惜しい。

それにしても、Fedoraでは特にエラーせず(multilibの -m32も-m64も)、 MinGW32ターゲットでもエラーしなかったのですが、MinGW64ターゲットだとそんなに違う事 あるんだっけ?と思ったりも。 因みに、少し前にはビルド&実行できて いたので、gcc-5に関係するものか、ここ数ヶ月でgdcが壊れているかが 原因と考えられます。

そういやgcc-5.1.0ではエラーやワーニングがカラー表示されるようです。

gcc-5 error/warnning カラー表示

人が見るのには良いと思います。パイプやリダイレクトした場合は エスケープコードは出てこないようなので、フィルターを通して 何かする場合でも大丈夫そうな予感。

x86_64 MinGW-gdcのビルド。オプティマイズレベルを-O0に下げれば ICEになりにくい感じだったり。それでもまだICEになる場合もあったのですが、 makeを進めてみたり。で、簡単なコードならばコンパイルできました。

$ cat iam.d
import std.stdio;
import std.string ;

int main()
{
  version( GNU     ) writef("I am GNU\n"    ) ;
  version( Unix    ) writef("I am Unix\n"   ) ;
  version( linux   ) writef("I am linux\n"  ) ;
  version( Windows ) writef("I am Windows\n") ;
  version( MinGW   ) writef("I am MinGW\n"  ) ;
  version( MinGW32 ) writef("I am MinGW32\n") ;
  version( MinGW64 ) writef("I am MinGW64\n") ;
  version( cygwin  ) writef("I am cygwin\n" ) ;
  version( Win32   ) writef("I am Win32\n"  ) ;
  version( Win64   ) writef("I am Win64\n"  ) ;
  version( Posix   ) writef("I am Posix\n"  ) ;
  version( X86     ) writef("I am X86\n"    ) ;
  version( X86_64  ) writef("I am X86_64\n" ) ;
  version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ;
  version( ARM     ) writef("I am ARM\n"    ) ;
  version( PPC     ) writef("I am PPC\n"    ) ;
  version( PPC64   ) writef("I am PPC64\n"  ) ;
  version( PPC_SoftFloat ) writef("I am PPC_SoftFloat\n" ) ;
  version( PPC_HardFloat ) writef("I am PPC_HardFloat\n" ) ;

  return(0) ;
}

$ x86_64-w64-mingw32-gdc -O0 iam.d

$ ./a.exe
I am GNU
I am Windows
I am MinGW
I am Win64
I am X86_64

$ x86_64-w64-mingw32-gdc -v
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-gdc
COLLECT_LTO_WRAPPER=/usr/local/gdc031_20661_510_mingwcross/libexec/gcc/x86_64-w64-mingw32/5.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-5.1.0/configure --with-pkgversion='gdc-5 ab7ac60cad' --build=i686-pc-cygwin --host=i686-pc-cygwin --target=x86_64-w64-mingw32 --enable-languages=d --prefix=/usr/local/gdc031_20661_510_mingwcross --with-sysroot=/usr/x86_64-w64-mingw32/sys-root --enable-threads --disable-nls --enable-sjlj-exceptions --disable-bootstrap --disable-shared --disable-multilib
Thread model: win32
gcc version 5.1.0 (gdc-5 ab7ac60cad)

コンパイラバグである事は間違い無さそうですが、Cygwinでクロスコンパイル しているので、ネイティブおよびLinuxでのクロスコンパイルでも再現するのかは 判らず。

2015/04/25

AM中に起床。

Emacsのdiredのソート機能を拡張する こちらのブログエントリ(1) の設定を利用していました。それとは別に、ディレクトリを先に表示するのに (setq dired-listing-switches "-al --group-directories-first") てな感じの設定を加えれば良いのを知り試したのですが、ソート拡張がうまく 動かなくなりました。ソート機能拡張ELISPでは、lsのオプション文字列を モディファイする感じに書かれていたのですが、オプションをいくつも指定する とか、ロングオプション指定時のモディファイがうまくできていないのが原因 だと判ったり。しかし、正規表現を ちょっと弄るレベルではうまく対応できませんでした。
で、もっと単純な方法として こちらのブログエントリ(2) のようなのを知ったり。でもこちらも微妙にうまくいかないコードのようだったので、 二つを合わせた感じにしてみました。

(setq dired-listing-switches "-la --group-directories-first") ; ディレクトリを先頭に

(defvar dired-various-sort-type
  '(("t" . "date")
    ("S" . "size")
    ("X" . "extension")
    ("v" . "version")
    (""  . "name")))

(defvar dired-current-sort-keypos 0)
(make-variable-buffer-local 'dired-current-sort-keypos)

(defun dired-various-sort-change (sort-type-alist &optional prior-pair)
  (when (eq major-mode 'dired-mode)
    (let* ((opt-desc-pair
            (nth dired-current-sort-keypos dired-various-sort-type)))

      (setq dired-actual-switches
            (concat dired-listing-switches " -l" (car opt-desc-pair)))
      (setq mode-name
            (concat "Dired by " (cdr opt-desc-pair)))
      (force-mode-line-update)
      (revert-buffer)
      (setq dired-current-sort-keypos
            (% (1+ dired-current-sort-keypos) (length dired-various-sort-type)))
      )))

(defun dired-various-sort-change-or-edit (&optional arg)
  (interactive "P")
  (when dired-sort-inhibit
    (error "Cannot sort this dired buffer"))
  (if arg
      (dired-sort-other
       (read-string "ls switches (must contain -l): " dired-actual-switches))
    (dired-various-sort-change dired-various-sort-type)))

(define-key dired-mode-map "s" 'dired-various-sort-change-or-edit)

ブログエントリ(1)をベースにしていますが、anythingは良くわからないという 理由により anything-c-source-dired-various-sortを省いてしまったので 劣化してます(^^;
で、lsのオプションは「ls -a -l -t -S」の様に分けて複数指定しても大丈夫な事 (この例では-tよりも後ろの-Sが優先される)を利用して、 dired-listing-switchesの 最後にオプションを追加する感じにしてみました。一応 dired-listing-switches に 「--full-time」とかを追加しても大丈夫です。

そういやほぼ使う事はありませんがEmacsのwdiredモード、良くできてますよね。 例えば、以下のような

$ ls
0.txt  1.txt  2.txt  3.txt

0〜3の並びを1〜4に変えたくなったとしたとき、迂闊にコマンドラインで、

/bin/mv 0.txt 1.txt
/bin/mv 1.txt 2.txt
/bin/mv 2.txt 3.txt
/bin/mv 3.txt 4.txt

とかやってしまうと、絶望を味わえると思います。また、a.txtとb.txtのファイル名 を交換したい場合も ちょっと面倒臭いと思います。 wdiredモードだとそういう事故が起こらないようになってるようです。

gcc-5.1.0が来ているのに気づいたり。gdcの新しいのと合わせて Fedoraでビルドしてみたり。ビルドは特に問題無し。 手持ちの簡単なコードをいくつかコンパイルしてみましたが、 こちらも特に問題無さげ。 そういや 32bit-MinGWずっこけの は、まだ音沙汰無し。

Cygwinでi686 MinGWクロスgdcをビルドしてみたり。MinGW-gdc向けのパッチを あててmakeしてみるもlibsspのビルドでエラー。 libssp/ssp.c内に 「#if defined (_WIN32) && !defined (__CYGWIN__)」 というifdefが新たに追加されていて、そちらのコードブロック選択された 結果エラーになったようですが、gcc-4.9.2では無かった(elseのブロックと 同じ)かつそれで通っていたので、ひとまずコメントアウトで対応してみたり。 そこを乗り越えれば他はエラー無くビルドできたり。

$ cat iam.d
import std.stdio;
import std.string ;

int main()
{
  version( GNU     ) writef("I am GNU\n"    ) ;
  version( Unix    ) writef("I am Unix\n"   ) ;
  version( linux   ) writef("I am linux\n"  ) ;
  version( Windows ) writef("I am Windows\n") ;
  version( MinGW   ) writef("I am MinGW\n"  ) ;
  version( MinGW32 ) writef("I am MinGW32\n") ;
  version( MinGW64 ) writef("I am MinGW64\n") ;
  version( cygwin  ) writef("I am cygwin\n" ) ;
  version( Win32   ) writef("I am Win32\n"  ) ;
  version( Win64   ) writef("I am Win64\n"  ) ;
  version( Posix   ) writef("I am Posix\n"  ) ;
  version( X86     ) writef("I am X86\n"    ) ;
  version( X86_64  ) writef("I am X86_64\n" ) ;
  version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ;
  version( ARM     ) writef("I am ARM\n"    ) ;
  version( PPC     ) writef("I am PPC\n"    ) ;
  version( PPC64   ) writef("I am PPC64\n"  ) ;
  version( PPC_SoftFloat ) writef("I am PPC_SoftFloat\n" ) ;
  version( PPC_HardFloat ) writef("I am PPC_HardFloat\n" ) ;

  return(0) ;
}

$ i686-pc-mingw32-gdc.exe -O2 iam.d

$ ./a.exe
I am GNU
I am Windows
I am MinGW
I am Win32
I am X86

$ i686-pc-mingw32-gdc.exe -v
Using built-in specs.
COLLECT_GCC=i686-pc-mingw32-gdc
COLLECT_LTO_WRAPPER=/usr/local/gdc031_20661_510_mingwcross/libexec/gcc/i686-pc-mingw32/5.1.0/lto-wrapper.exe
Target: i686-pc-mingw32
Configured with: ../gcc-5.1.0/configure --with-pkgversion='gdc-5 ab7ac60cad' --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-mingw32 --enable-languages=d --prefix=/usr/local/gdc031_20661_510_mingwcross --with-sysroot=/usr/i686-pc-mingw32/sys-root --enable-threads --disable-nls --enable-sjlj-exceptions --disable-bootstrap
Thread model: win32
gcc version 5.1.0 (gdc-5 ab7ac60cad)

「--with-pkgversion=」というconfigureオプションを知ったので、 gitのバージョンを入れてみました。これで「これってどのバージョンだっけ?」 とならない事に期待したり。

さておき、未解決の 32bit-MinGWの特定コードでずっこける件は やっぱりそのまま。

$ cat mingwgdcfailed_test2.d
import std.stdio;
import std.typecons;
import std.string;

void main()
{
  struct Foo{
    string s ;
  }
  string dic[Tuple!(Foo,int)] ;

  Foo x = {s:"foo"} ;
  dic[tuple(x,0)] = "foo:0" ;
}

$ i686-pc-mingw32-gdc.exe -O2 mingwgdcfailed_test2.d

$ ./a.exe
Segmentation fault

$ gdb -q ./a.exe
Reading symbols from ./a.exe...done.
(gdb) run
Starting program: /home/TANE/develop/dlang/test/dmd2065gcc490/a.exe
[New Thread 15136.0x25b0]

Program received signal SIGSEGV, Segmentation fault.
0x0040416b in rt.typeinfo.ti_Ag.TypeInfo_Aa.getHash(const(void*)) (this=...,
    p=0x4ec9e0 <TypeInfo_S3std8typecons47__T5TupleTS20mingwgdcfailed_test24mainFZ3FooTiZ5Tuple.init$>)
    at ../../../../gcc-5.1.0/libphobos/libdruntime/rt/typeinfo/ti_Ag.d:129
129                 hash = hash * 11 + c;
(gdb) where
#0  0x0040416b in rt.typeinfo.ti_Ag.TypeInfo_Aa.getHash(const(void*)) (this=...,
    p=0x4ec9e0 <TypeInfo_S3std8typecons47__T5TupleTS20mingwgdcfailed_test24mainFZ3FooTiZ5Tuple.init$>)
    at ../../../../gcc-5.1.0/libphobos/libdruntime/rt/typeinfo/ti_Ag.d:129
#1  0x00401337 in mingwgdcfailed_test2.main().Foo.__xtoHash(ref const(mingwgdcfailed_test2.main().Foo)) ()
#2  0x004ec9e0 in TypeInfo_S4core3sys7windows9threadaux10thread_aux26_SYSTEM_THREAD_INFORMATION.init$ ()
#3  0x00000000 in ?? ()
(gdb)

ぐぅ。因みに、このずっこけが解決しないと、std.regexが使えない (参考)というのが 困った所なのです。

2015/04/24

遅めに帰着。

調べ事。うまくいきそうでいかず。

2015/04/23

気持ち遅めに帰着。

SAI2の新しいのが出ているのに今気づきました(汗; いくつかの機能追加とバグ修正が行われたようです。 自動選択の機能はまだ付いていないようです。

2015/04/22

遅めに帰着。

ちょろり調べ事。

2015/04/21

少し遅めに帰着。

pdf-toolsですが、 Cygwin32と64とで共通のディレクトリパスにインストールしたため、 epdfinfoという実行バイナリは名前を変えるなどして、32と64の両方を 用意しなくてはダメだという事に気づいたり。ひとまずバージョン文字列で 切り替えるようにしてみたものの、rebaseが必要になった時に ハマリそうだなぁ?と思ったりも。

2015/04/20

早めに帰着。ちょうど雨が止んでいる期間に到着できてラッキー。

ちょろり調べ事。

そういやここ最近gdcの 更新頻度が高い気がしたり。2.067.0対応しているという訳ではないのですが、 バグを修正しているもよう。そういや32bitのMinGWでの問題は、その後とくに音沙汰無し。

DConf2015。今年は5月末に 行われるらしい。そういや、DConf2013の時はスライドとビデオが タイムスケジュール表に 後で整理されて良い感じに公開されたのですが、DConf2014のはYouTubeのどこかに 整理されずに置かれてて、結局 ちゃんと見られませんでした (一応ここ にまとまっているようですがスライド単品公開は無いもよう)。 今年はDConf2013のように整理して(後でいちいち探さなくて済むように) 公開される事を期待したいです。

2015/04/19

AM中に起床。

掃除したりWeb巡回したり。

Emacsのgitログを遡ってみると1985年くらいまでログがあり、 もしかして15.34とかもチェックアウトできるのか?と思い試してみた所、 なんか違う感じだったり。Emacs本体ソースは1991年くらいのリビジョン じゃないと出てきませんでした。それ以前のは何故か部分的なコードしか 出てきませんでした。

078e7b4ada3144b8c045c0989737f7eb1f5f17c4という 「Fri Jul 19 20:51:57 1991」頃のコードを眺めてみたり。 正確なバージョンは判りませんが、18.55くらいだと思われます。 因みにTANEは、まだEmacsの存在を知らなかった頃ですが、 Nemacs X68k移植版の ベースEmacsのバージョンと同じくらいのようです。 いくつか気づいた点など挙げてみますと、


現在のちょっと大き目のプログラムくらいという感じなのですが、 ハードのメモリ搭載量がせいぜい数MBという時代なので、当時としては 大分大きいと思います。それにしても、 テキストエディットという要件は変わらないのに、24.5比でこんなに大きく なるもんなんですねぇ(^^;
logを遡っていて、ここ二年くらいのgit logの量がハンパ無いと思いました。 一日に何件コミットされているんだ?!ってくらい更新されているようです。

2015/04/18

昼過ぎ起床。

この前知った「PFUのキーボードコレクション」 の中に、LISP machineのキーボードというのがあるのを知ったり。 Webを散策していると、EmacsのバインドはLISPマシンのキーボード配列に 関係があるような話をちらっと見つけたのですが、本当かなぁ? と思ったりも。
LISPマシン実機のキーボード写真 を見てみると、Emacsを使う観点からはCtrlキーが正気ではない位置に あると思います。また、Gosling Emacsも初期のGNU EmacsもUNIX上で動作したの ですから、少なくともLISPマシンではなく、PDP-11以降のマシンの キーボード配列に由来しているんじゃないかと思う訳です。
個人的には、年代とMetaキーの存在、UNIXという環境から、 「Sun Type2 keyboard」および「Sun Type3 keyboard」あたりの キー配列に関係しているんじゃないかと推測します。 因みに「Sun Type1 keyboard」にはMetaキーが存在していないので、 これをベースにキーバインドを割り当てたとは考えにくいと思います。 ESCを押す事でMetaの代わりにしたのは、vt100端末由来 による所だと思うのですが、ELISPの構文的に「M-」は 18.59くらいには既にあったようなので、Metaキーを使うよりも ESCで代替した方が 後という気がします。
以上の推測を踏まえて、Emacsを使う観点から見て 101/106キーボードの Ctrlキーの位置が「無いわー」は思うのは、そもそもそれに合わせた 物理キー配置でバインドを割り当てた訳ではないからだと考えます。

Emacsを使わない人から見ると「Ctrlキーの位置がそんなに重要なのか?」 と思われるかも知れませんが、車で言うと「アクセルとブレーキの位置が逆」、 ゲームコントローラで言うと「十字キーとボタンが右手左手で逆」、ピアノで言うと 「音階が右から左に向かって高くなる」くらいの感じです。 最初からそうならばどうという事は無いでしょう。でも、途中から変えるのはムリです。 しかしながら、キーボードの場合、前述の例とは違ってソフト的にキー位置を 変更できるのは不幸中の幸いだったのかも知れません。

そういや、viの人は 101/106キーボードの ESCキーの位置に納得 できているのだろうか?と思う事はありますがどうなんだろう? 「C-[」を使う? えー? それって今度はCtrlキーの位置に納得できる?

Emacsのキーボードマクロ実行を範囲指定した領域に適用する apply-macro-to-region-lines(C-x C-k r)というコマンドがあるのを知ったり。 行毎に同じ処理をするような場合で、対象行数が数千行とかある場合に 便利そうです。

プロ遊の下のEmacsの雑記を 更新してみたり。御参考まで。

そういや一番最初に広く頒布されたとされる GNU-Emacs 15.34のソースアーカイブを 探してみたのですが見つけられず。

2015/04/17

気持ち早めに帰着。

Emacs上からGoogle翻訳ができなくなっていた件。 google-translateの方は 対応済みになっていて、elpaのパッケージもアップデート版に なってました。 text-translator の方は特に動きは無く。そんな訳で、text-translatorの方は Excite翻訳をプライマリ サイトにして、text-translatorとgoogle-translateの両方を 使う感じにしました。

gcc-5がそろそろリリースされそうな予感。でも何故か 5.1としてリリース されるようです。開発版はgcc-6になっているようで、gdcのmasterブランチも gcc-6をベースバージョンに切り替えたようです。年1回のリリースで バージョン番号x.y.z のyをインクリメントするのを辞めて、xを インクリメントする事にしたのかしら?定期更新にすると、 メジャーバージョンがすぐに上がりすぎるように思ったりも。

2015/04/16

早くも無く遅くも無く。

WindowsUpdateでリブートしたついでにCygwinパッケージアップデート を行ってemacs-w32を24.5化してみたり。とは言え、即、 自前IMEパッチ&野良ビルド版に差し替え。ひとまず乗り換え作業終了。

Cygwin64の方も24.5に差し替え。こちらは rzl24ozi氏のパッチと 少々の改造を加えてビルド。ひとまず大丈夫そう。 Cygwin64自体を本格的に使っていないので、32の方で問題があったとき のバックアップという感じで。

2015/04/15

早めに帰着。

Web巡回してたらあまりの眠さに急速停止。

2015/04/14

気持ち早めに帰着。

先日のgdcバイナリの件。その後、同様の報告が挙げられたようですが、 すぐに直せないという事で一旦保留状態。でも、問題がある事は 認識されたので、修正されるのを期待しよう。

2015/04/13

気持ち早めに帰着。

先日のgdcバイナリの件。リンカ呼び出しでエラーする話は 「 why no ld.exe in 2.066.1 Windows builds?」というスレッドに 挙げられてたようです。調べてアップデートする模様。 32bitはまだその先に一山あるのですが、まだそこまでは到達していない模様。

「Windows版を誰か試してくれないだろうか?」的なニュアンス の書き込みがある辺り、本格的に使っている人は居ないような 雰囲気があります。GNUのツールチェーンはライブラリのリンクとか 楽だと思うのですけどね。

とか書いていたらアップデート版が置かれた模様。早速試してみた所、 リンカの問題は解決されたのですが、やはり次の山にぶつかってみたり。 てか、Windowsで全く試さずに置いているようですね(^^;

$ cat iam.d
import std.stdio;
import std.string ;

int main()
{
  version( GNU     ) writef("I am GNU\n"    ) ;
  version( Unix    ) writef("I am Unix\n"   ) ;
  version( linux   ) writef("I am linux\n"  ) ;
  version( Windows ) writef("I am Windows\n") ;
  version( MinGW   ) writef("I am MinGW\n"  ) ;
  version( MinGW32 ) writef("I am MinGW32\n") ;
  version( MinGW64 ) writef("I am MinGW64\n") ;
  version( cygwin  ) writef("I am cygwin\n" ) ;
  version( Win32   ) writef("I am Win32\n"  ) ;
  version( Win64   ) writef("I am Win64\n"  ) ;
  version( Posix   ) writef("I am Posix\n"  ) ;
  version( X86     ) writef("I am X86\n"    ) ;
  version( X86_64  ) writef("I am X86_64\n" ) ;
  version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ;
  version( ARM     ) writef("I am ARM\n"    ) ;
  version( PPC     ) writef("I am PPC\n"    ) ;
  version( PPC64   ) writef("I am PPC64\n"  ) ;
  version( PPC_SoftFloat ) writef("I am PPC_SoftFloat\n" ) ;
  version( PPC_HardFloat ) writef("I am PPC_HardFloat\n" ) ;

  return(0) ;
}

$ gdc -v
Using built-in specs.
COLLECT_GCC=C:\MinGW\i686-gdc-2.066.1_gcc4.9.2\i686-w64-mingw32\bin\gdc.exe
COLLECT_LTO_WRAPPER=c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../libexec/gcc/i686-w64-mingw32/4.9.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: /home/build/tmp/build/.build/src/gcc-4.9.2/configure --build=x86_64-build_unknown-linux-gnu --host=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/home/build/tmp/install/i686-w64-mingw32 --with-sysroot=/home/build/tmp/install/i686-w64-mingw32/i686-w64-mingw32/sysroot --with-local-prefix=/home/build/tmp/install/i686-w64-mingw32/i686-w64-mingw32/sysroot --enable-languages=c,c++,d --with-arch=i686 --disable-shared --with-pkgversion='crosstool-NG 1.20.0 - 20150413-2.066.1-f378f9ab41' --with-bugurl=http://bugzilla.gdcproject.org --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --with-gmp=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-mpfr=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-mpc=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-isl=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-cloog=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-libelf=/home/build/tmp/build/.build/i686-w64-mingw32/buildtools/complibs-host --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=win32 --disable-win32-registry --enable-target-optspace --disable-nls --disable-multilib --enable-c99 --enable-long-long
Thread model: win32
gcc version 4.9.2 (crosstool-NG 1.20.0 - 20150413-2.066.1-f378f9ab41)

$ gdc iam.d
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `_lambda3':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1983: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `D4core6thread6Thread6__dtorMFZv':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:633: undefined reference to `D2rt5tlsgc7destroyFPvZv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_entryPoint@4':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:193: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_attachThis':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1903: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_attachByAddrB':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1968: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `D4core6thread15scanAllTypeImplFNbMDFNbE4core6thread8ScanTypePvPvZvPvZv':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:2666: undefined reference to `D2rt5tlsgc4scanFNbPvMDFNbPvPvZvZv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_processGCMarks':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:2896: undefined reference to `D2rt5tlsgc14processGCMarksFNbPvMDFNbPvZiZv'
collect2.exe: error: ld returned 1 exit status

素早い対応でバイナリアーカイブを置いていただけるのはありがたい事なのですが、 折角 置くのならば ちょっとは試したものを置いて欲しいなぁ?と思わなく もありません。

キーボードのCtrlキーの位置について。X68kキーボードのように 「83キーボード(風)」なレイアウトの存在を知っている人は、 「106キーボード」のCtrlキーとCapsLockキーをひっくり返すという発想が 出てくると思うのですが、初めて触ったキーボードが106キーボードと いう人にはその発想は出てこないかもと思ったり。 EmacsでCtrlキーを押すのが苦痛(でEmacsを使っていないorでもEmacsを使っている) に感じている人で、106キーボードの配列をそのまま使用している人の割合って どれくらい居るんだろう?と改めて思ったり。

そもそも106キーボードレイアウトでのCapsLockキーは、Ctrlキーを差し置いて 今の位置にある合理的な理由が無いように思うのです。CapsLockは 他のキーと違ってトグルスイッチなので、そもそも鍵打率が高く無いと 考えられます。英語で文章を入力するとしても、大文字はSHIFTキーを 押せば良いですし、大文字で入れ続けたければCapsLockを1回押すだけです。 ぶっちゃけ、文書やプログラムを入力する際、CapsLockを明に押す事はほぼありません。 これらを踏まえると、106キーボードのCapsLockキーは押す頻度の割に、 かなり良い位置を無駄に占拠しているように思うのですがどうでしょう?

こちらに 色々なマシンのキーボード配列が資料として公開されています (X68kやファミベまで揃っているのは驚きです)。 ざっと眺めてみると変則的なのもありますが、Ctrlキーは、Aキーの左隣に 配置されたものが多いように思います。

2015/04/12

昼頃起床。

掃除したり。

そういや少し前に、gdcの 実行アーカイブ置き場に新しいバージョンのを置いてくれないかなぁ?と 書いたのですが、先週 2.066.1+gcc4.9.2ベース のバイナリが置かれていた ようです。でも、リンカをうまく起動できず。うーむ。 因みに、gdc -v で表示されるconfigureオプションを見る限り、 linuxでクロスビルドしているようです。

binutilsをバイナリに合わせてビルドしたり。ひとまずリンカは動く ようになったものの、いくつかシンボルが見つからなくて結局 リンクに失敗。うーむ。このバイナリが使える事は確認されている のだろうか?

$ gdc iam.d
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `_lambda3':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1983: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `D4core6thread6Thread6__dtorMFZv':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:633: undefined reference to `D2rt5tlsgc7destroyFPvZv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_entryPoint@4':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:193: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_attachThis':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1903: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_attachByAddrB':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:1968: undefined reference to `D2rt5tlsgc4initFZPv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `D4core6thread15scanAllTypeImplFNbMDFNbE4core6thread8ScanTypePvPvZvPvZv':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:2666: undefined reference to `D2rt5tlsgc4scanFNbPvMDFNbPvPvZvZv'
c:/mingw/i686-gdc-2.066.1_gcc4.9.2/i686-w64-mingw32/bin/../lib/gcc/i686-w64-mingw32/4.9.2/../../../../lib/libgphobos2.a(thread.o): In function `thread_processGCMarks':
/home/build/tmp/build/.build/src/gcc-4.9.2/libphobos/libdruntime/core/thread.d:2896: undefined reference to `D2rt5tlsgc14processGCMarksFNbPvMDFNbPvZiZv'
collect2.exe: error: ld returned 1 exit status

リンクできないのは恐らくこのとき と同じ状況が原因と思われたり。このときは無理やりアセンブラコードを書き換えて ましたが、その後、次のようなパッチで対応してました。
*** libphobos/libdruntime/core/internal/traits.d.orig   2015-03-15 19:37:17.000000000 +0900
--- libphobos/libdruntime/core/internal/traits.d        2015-03-25 00:15:25.736178900 +0900
***************
*** 65,71 ****
                  s ~= " " ~ attr;
              return s ~ ";";
          }();
!         pragma(mangle, mangleFunc!T(fqn)) mixin(decl);
          alias externDFunc = bug13050;
      }
      else
--- 65,79 ----
                  s ~= " " ~ attr;
              return s ~ ";";
          }();
!         version (MinGW){
!             version (X86_64){
!                 pragma(mangle, mangleFunc!T(fqn)) mixin(decl);
!             }else{
!                 pragma(mangle, "_" ~ mangleFunc!T(fqn)) mixin(decl);
!             }
!         }else{
!             pragma(mangle, mangleFunc!T(fqn)) mixin(decl);
!         }
          alias externDFunc = bug13050;
      }
      else

32bit MinGWを使うと必ず引っかかるんじゃないかと思うのですが、 最近のMinGWだと様子が違うのかしら?

2015/04/11

昼前に起床。

Emacs-24.5がリリースされたようです。バグフィックスリリースと いう位置付けのようです。Cygwinパッケージがアップデートされる ようなら追従する方向で。

と書いた数時間後に、もうCygwin Emacsパッケージのアップデートが来てた。 パッチを整理しないといけないなぁ。

Emacs-24.5のCygwinビルド。自前IMEパッチ版はとりあえずビルド成功。 ちょろっと使った感じでは特に問題無さげ(いきなり死んだりはしないと いうレベル)。
また、rzl24ozi氏の24.5対応パッチも既に 来ていました。 32bit-Cygwinでemacs-24.5-w32-ime.diffだけを試してみた のですが、ビルドも実行も特に問題無さげ。

そういえばgitやブログなどで、更新された日時ではなく現在時刻 からどれくらい前という表示になっている場合があります。 以前は絶対日時の方が判り易いんだけどなぁ?と思う事があった のですが、相対時刻でも良いかもと思うようになったり。というのは、 タイムゾーンがどこに設定されているかで、例えば日本とアメリカの 西海岸とでは時差がかなりあるので、日時だけだと結構勘違いして しまう事があります。相対時刻であれば、タイムゾーンによらない ので、最近か否かだけを知りたいだけなら判り易いと思うように なりました。

CygwinのMailingListに、Cygwin 2.0.0-1のTESTリリースアナウンス が上がっていたり。いつ頃、正式にリリースされるかは不明。

2015/04/10

気持ち早めに帰着。

emacs-zlcが最近 アップデートされているのを知ったり。ディレクトリを選択したとき、 '/'を押すとそのディレクトリに潜れるというもの。 以前、外付けでそれに 近いことをやっていたのですが、それがzlc本体に実装されたと いう感じでしょうか。ただ、 zlc-select-next-verticalやzlc-select-previous-verticalを実行した 後に'/'を押しても何故かディレクトリを潜ってくれなかったので、 都合の良いようにちょろっと直してみたり。

*** zlc.el.orig 2015-03-22 12:28:11.000000000 +0900
--- zlc.el      2015-04-10 23:39:48.774960600 +0900
***************
*** 205,211 ****
    (interactive)
    (if (and (equal (string (char-before)) "/")
             (eq (point) (field-end)))
!       (zlc-minibuffer-complete)
      (progn (insert "/")
             (setq minibuffer-scroll-window nil))))

--- 205,213 ----
    (interactive)
    (if (and (equal (string (char-before)) "/")
             (eq (point) (field-end)))
!       (progn
!         (setq last-command nil)
!         (zlc-minibuffer-complete))
      (progn (insert "/")
             (setq minibuffer-scroll-window nil))))

御参考まで。

Emacs上からGoogle翻訳がまた出来なくなっていたり。 google-translateもtext-translatorもどちらもダメな感じに。 定期的に使えなくなるのなんとかならないかなぁ?と思ったりも。

2015/04/09

気持ち早めに帰着。

調べ事をして終了。

2015/04/08

早くも無く遅くも無く。

あまりの眠さに急速停止。

2015/04/07

気持ち早めに帰着。

先日の コミックボンボンのWikipedia を眺めていて、そういやこんな漫画もあったなぁと思ったり。 その中の一つに「おれのサーキット」 というポケットバイク(ポケバイ)のレースをテーマにした作品が ありました。作者の山口博史氏はその後どんな作品を描いていた のだろうと調べてみると、成人向け漫画を描いていたようです。 てか、作品としてはそういう感じの方が多い気が(^^; そして、息子さん(?)(額縁あいこ)も漫画描いたり同人誌作ったり しているようです(ミツメ書房)。 プロかどうかは良くわかりませんでした。

ここ数日、gdcがちょこちょこアップデートされてたり。DMD2.067の マージか?と思ったのですがそうでは無いみたい。

2015/04/06

本日休業。

「ONEPIECE(77)」。今巻はエピソードが山盛り過ぎて読むのに 時間がかかりました(^^; この展開でドフラミンゴと他との関係が どう着地するのか気になります。

そういや唐突に「The かぼちゃワイン」って漫画/アニメがあったなぁ?と 思い出したり。漫画はとても精細な筆致だった記憶があったので 画像検索してみたのですが、意外と解像度の高い絵が出てこなくて残念。 The かぼちゃワインのWikipedia によると2000年以降にも連載があったようです。 そういやコミックボンボンでも三浦みつる氏の連載漫画があったなぁ? と思い少し調べてみたところ、 コミックボンボンのWikipediaから、「星のピートン」 だという事まで思い出せたのですが、連載が半年ちょっと の為か単行本にはなっていない模様。こちらも 他の連載漫画に比べて遥かに線が細かったのが印象に 残っています。連載期間は1981/11〜1982/6とありますが、 もっと絵の分別が付く時に読んだ気がするんだけどなぁ? 因みにピートンの方はWeb検索しても全く画像が出てきませんでした。残念。

メガデモイベントのRevision2015 の結果がpouetに 上がっていたり。 120hzデモといういわゆる120fpsデモが新しく設けられたようです。 でも、普通のディスプレイ&動画ファイルでは 伝わらないだろうなぁ?と 思ったりも。実際も 120Hzのディスプレイを特別なブースに用意して 観る感じになっていたようです。

2015/04/05

プチ帰省から帰着。

あまりの眠さに急速停止。

2015/04/04

AM中に起床。

プチ帰省。

2015/04/03

気持ち早めに帰着。

あまりの眠さに急速停止。

2015/04/02

気持ち早めに帰着。

最後のhomeは人が沢山で全盛期のような賑わいでした。 なにやらhome運営の人(いわゆる中の人)が普通に交わってて 驚きました(^^;
PlayStationHomeのWikipedia の歴史の項目を見ていると、2011年から急激にイベントが 減っているように思います。震災による節電等の影響や、PSNサイバー攻撃 による一時サービス停止の影響などが、少なからずあったのかも知れません。 2012年はTANE自身、本物お仕事が忙しすぎて全然ゲームで遊べなかった のですが、何故かPS-Homeの歴史とリンクしてて不思議な気がします。 2012年はPS-homeに限らず全体的に下降気味だったようにも思いますが。

最終日の混雑具合を見ていると、以前にも書きましたが コミュニケーションアプリとしては成功していると改めて感じます。 ユーザー対応など、運営も大変だったんじゃなかろうかと思います。 GDCとかで舞台裏を色々とぶっちゃけてくれると面白そうかもと思ったりも。

PS Home 最後に撮った写真

ともあれ、長い期間の運営おつかれさま&ありがとう。 そういや最後にフレンドのパーソナルスペースに招待してもらうの トロフィーをゲットして、ぎりぎりでコンプリート成功しました(^^)v

2015/04/01

気持ち早めに帰着。

あまりの眠さに急速停止。


TOP PREV