昔の最近の出来事(2019.09)

2019/09/30

早めに帰着。

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

2019/09/29

AM中に起床。

掃除したり洗濯したり。

ちょろっと作業。そういや、今日SAI2を立ち上げたらライセンスが不整合だと いうメッセージが出たり。システムIDが変わってるようだったのですが、 そんな事あるんだっけ?そんな訳でユーザーライセンス証明書をダウンロードし直したり。

図案を考えたり。

2019/09/28

起きたら午後もいい時間。寝すぎ。

もそもそと作業したり。

2019/09/27

早めに帰着。

Web巡回して終了。

2019/09/26

早くも無く遅くも無く。

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

2019/09/25

気持ち早めに帰着。

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

2019/09/24

早めに帰着。

ちょろり調べ事。

2019/09/23

AM中に起床。

以前、サイトを引っ越す必要が ありそうと書いたのですが、具体的な案内が通知されてきたり。 移行サービス付きとなっているようですが、移行できるファイルの文字コードが 指定されてたり、一時的な置き場に置くから後は都合の良い位置に動かしてくれ とか、一体何を以って移行と言っているのかよく判らんなぁ?という感じ だったり。あと、旧サイトと新サイトのオーバーラップ期間が無いようで、 旧サイトに引っ越し案内を出す事ができないんじゃないか?という気も。

バナー画像を弄ったり。これまでバナーはPOV-Rayでレンダリングしていて、 文字オブジェクトはheight_fieldを使用して生成していたのですが、大画像で レンダリングすると側面がガビガビなのが気になったので、 Inkscape→(PostScript)→Wings3D→(POV形式) という経路でポリゴン化してみたり。問題はベースとなるPOV座標が あまりにも見た目で調節しすぎてて、Wingsの文字モデルとPOVネイティブの オブジェクトの位置関係をどうやって合わせたものか困ったり。 結論としては、Wings3Dの方でカメラ位置と注目点を値指定する事が できるのを見つけた(View→Numeric Camera Position)ので、これで カメラ位置をPOV-Rayカメラと合わせてた状態でオブジェクトを位置合わせ する事で、元のPOVファイルに含まれるCSGのオブジェクトとWingsでExportした ポリゴンオブジェクトとをうまくマージする事ができました。 いや、バナーサイズにすると潰れてしまうので全くどうでも 良い感じなのですが(^^;

2019/09/22

AM中に起床。

そういや追加したフォントがInkscapeで認識されないなぁ? と思い調べてみたら、Windows10の1809から フォントのインストール先が 変わってたらしい。対応策の一つはフォントインストール時に 「すべてのユーザーに対してインストール」とすれば、これまで通り 「C:\Windows\Fonts\」にインストールされるようですが、まぁまぁな数の フォントを入れてる場合、もう一回作業するとかあり得ないので、 こちら のTipsを参考にフォント検索パスを追加する方法を使ってみる事に。 参考にしたTipsは、元々インストールしていないフォントファイルを Inkscapeで認識させる方法のようですが、期せずしてWin10のフォント インストール先変更への応用ができるという感じのようです。 インストールされたフォントのパスは 「C:\Users\[ユーザー名]\AppData\Local\Microsoft\Windows\Fonts\」 になっているようなのでこのパスを追加。結果、Inkscapeで 追加したフォントを認識するようになりました。てか、御新規様は 「フォント認識されてなくね?」と思った瞬間に使えないツール認証 してしまう恐れがありますので、早急に対応した方が良いんじゃないか とは思わなくもありません。

2019/09/21

AM中に起床。

ちょろりお出かけ。涼しい~。

激レアさんを連れてきた。のレギュラー回、ジャイアン声優の人。 声優交代って もう14年も前の話になるのか。中学生がノリで応募して受かってしまう とか恐すぎる。TANEが新声優陣のドラえもんを観たのは初回放送から 大分経った頃でしたが、 この時には違和感は感じてなかったかも。最終オーディションで 5人揃った状態で違和感があったらオーディションをやり直す予定だった というのを今日初めて知ったのですが、その条件を通過した事を考えると 当然の結果だったのかも。

先日のD2形式の演算子オーバーロードの件、ダメだった原因判明。 こちらのドキュメント を参考に書いたのですが、opAssign()ではなくてopOpAssign()が正解。 そして、アサイン演算子の場合は戻りは無くてvoidにしなくてはなりませんでした。 最初、2.088.0の変更点リストに含まれる 対応ルール の通りopOpAssign()と書いてエラーしていたのですが、戻り値無し(void)に しなくてはならないというのに気づいていませんでした。 続いてドキュメントの方ではopAssign()と記されていたので、書き換えたら エラーしなくなった訳ですが、恐らくopAssign()だとそういう名前の メソッドが定義されただけでオーバーロードとは解釈されないのでしょう。 この為、「vec3D構造体用のSubAssign('-=')は定義されていない為、スカラ型 にしか使えませんよ?」というのがエラーメッセージの意図だったのだろう と思われます。という訳で、正解は以下の通り。

struct vec3D  {
  :
  void opOpAssign(string op)(vec3D d){
    static if( op=="-" ){
      this.x -= d.x ;
      this.y -= d.y ;
      this.z -= d.z ;
    }
  }

  void opOpAssign(string op)(double d){
    static if( op=="-" ){
      this.x -= d ;
      this.y -= d ;
      this.z -= d ;
    }
  }
}

それにしても、なんとなくこの演算子オーバーロード記述の方法は イマイチにも思えます。一つは、今回ハマった通り、「typoした場合でも 言語文法的には間違いではないと解釈できる」点。 演算子オーバーロードを行おうとしているという意思がコンパイラに 伝わるように、例えば「opoverload void opAssign(string op)() ...」 のように前置き宣言をすれば、続く定義「op何とか」にコンパイラの 知らないものが指定されるとエラーと認識できるのにとは思ったりも。 もう一つ、「opOpAssign()」はなんか冗長。ドキュメントも間違えてる くらいだから、まぁイマイチなんだろうという気がします。

うーむ、なんか勘違いしてた模様。 opOpAssign()とopAssign()は違うもので、opAssign()の方は代入(だたの'=') をオーバーロードするものみたい。だとすれば、opAssign()の

  vec3D opAssign(string op)(vec3D d){
    static if( op=="-" ){
      this.x -= d.x ;
      this.y -= d.y ;
      this.z -= d.z ;
    }
  }

という書き方自体が全然間違えてる訳で、むしろそのまま通るのを なんとかして欲しい気も。

2019/09/20

気持ち早めに帰着。

そういやCPUが32bitアーキテクチャの場合、EmacsLISPでは扱える整数の範囲は 30bit長だったりするのですが、なんだかそれよりも大きな数を浮動小数点数を 介して扱えている気がしたり。

(+ #xffffffff 1)               ;Ctrl+j
4294967296.0

(format "%x" (+ #xffffffff 1)) ;Ctrl+j
"100000000"

でも、論理演算はダメ。

(logior #xffff0000 #x0000ffff) ;Ctrl+j
  ↓エラー
Debugger entered--Lisp error: (wrong-type-argument integer-or-marker-p 4294901760.0)
  logior(4294901760.0 65535)
  eval((logior 4294901760.0 65535) nil)

64bitのコンパイラでビルドしたEmacsでは大丈夫。

(logior #xffff0000 #x0000ffff)               ;Ctrl+j
4294967295

(format "%x" (logior #xffff0000 #x0000ffff)) ;Ctrl+j
"ffffffff"

簡単な32bitのbit演算をスクラッチバッファで行おうとしたら エラーになったので、あぁそうだったと思い出しました。
現在TANEは Cygwin32をメインで使用しているのですが、 これを機に64bitに乗り換えるのも良いかもなぁ?と思い始めたり。 Cygwin32がメインなのはCygwin64には無いパッケージが存在していたり、 64bitコンパイラでビルドしようとするとビルドに失敗するアプリや ライブラリがあったりしたからなのですが、今はそういう感じでも 無くなっているような気もするので検討に値するかもなぁとは 思ったりも。

ちょろりコーディング。D言語の2.088.0で非奨励となる D1の演算子オーバーロードをD2の文法に書き換えているのですが (ただしチェックに使っているコンパイラはdmd v2.085.0と ldc2 1.13.0 なのですが)、どうも同じように書けない感じが。3Dベクタ構造体の演算子として 以下の減算アサインを定義していたのですが、

struct vec3D  {
  :
  void opSubAssign(vec3D d){
    this.x -= d.x ;
    this.y -= d.y ;
    this.z -= d.z ;
  }

  void opSubAssign(double d){
    this.x -= d ;
    this.y -= d ;
    this.z -= d ;
  }
}

これを以下のように書き換えたところ、

struct vec3D  {
  :
  vec3D opAssign(string op)(vec3D d){
    static if( op=="-" ){
      this.x -= d.x ;
      this.y -= d.y ;
      this.z -= d.z ;
    }
  }

  vec3D opAssign(string op)(double d){
    static if( op=="-" ){
      this.x -= d ;
      this.y -= d ;
      this.z -= d ;
    }
  }
}

何故か以下のような演算がエラーするようになりました。

  bool LPcross( vec3D eyepos, vec3D ray, vec3D fp0, vec3D fn) {
    :
    fp0-=eyepos ;
    :
  }

エラーメッセージ
Vec3D.d(284): Error: `fp0` is not a scalar, it is a `vec3D`

「うん、知ってる。で?何?」という感じで何がマズいのか判らず。 「fp0=fp0-eyepos ;」とすればOKなのですが、 opBinaryでは戻り値向けのインスタンス生成が必要となるので実行速度が 落ちます。opAssignだとopBinaryに比べて実行速度の向上が見込める 訳ですが、エラーしないように書き直すとその意図が台無しに。

2019/09/19

早めに帰着。

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

2019/09/18

遅めに帰着。

肩が痛くて死亡。

2019/09/17

早めに帰着。

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

2019/09/16

AM中に起床。

掃除したり。

全然関係無い流れで「こんべぇの あいむそ~り~」なる ゲームの存在を知ったり(YouTube動画)。 コアランドテクノロジー株式会社(後のバンプレスト)の開発で セガからリリースされたアーケードゲームらしいのですが、 初めて知りました(参考Wikipedia)。

2019/09/15

AM中に起床。

何気に過去に自作したOpenGL描画を使用するアプリを実行してみた ところ、60fpsになるように調節していたにも関わらず何故か30fps になっていたり。垂直同期の周期に関係無く、1フレームの描画に かかる時間を計測して、「1/60秒 - 描画にかかった時間」を Sleep()で待つ事で大体 60fpsになるというつもりで、それで動いて いたコードだったのですが。
NVIDAのコントロールパネルを使って「垂直同期」を「3Dアプリケーション設定を使用する」 から「オフ」にしても状況変わらず。どうもSleep()関数が 指定の2倍の時間を待っているようにも思えたり?また、 「垂直同期」を「オフ」のままSleep()による自前待ち合わせを 行わないと、2600fpsくらいになる事から一応自前待ち合わせが効いている のか?と思ったのですが、 「垂直同期」を「3Dアプリケーション設定を使用する」に戻して 且つSleep()による自前待ち合わせを行わなくても60fpsに固定 されたのが「んんん???」と思う所だったり。

  垂直同期   | Sleep待ち  | fps
  -----------+------------+--------------------------------------
  アプリ設定 | 有り(16ms) | 30fps
  オフ       | 有り(16ms) | 30fps  ★なんで?↓
  オフ       | 有り(8ms)  | 60fps  ★Sleep()が2倍の時間待ってる?
  アプリ設定 | 無し       | 60fps  ★なんで?
  オフ       | 無し       | 1900fps~2600fps

SwapBuffers()で勝手に同期待ちする仕組みがあるんだっけか?

2019/09/14

昼過ぎ起床。寝すぎ。

Function2019で 256Byteイントロを作成するセミナーが行われてたのを ちょろっと見られたり。英語なのでほぼ判りませんでしたが、 命令列を1バイト削る為のテクニックだとかが示されてたりして、 256Byteだとこういう感じで削っていかないと無理なのかと思ったりも。 現在のCPUの命令セットアーキテクチャはほとんどがRISCベースの為、 命令語長は固定のものがほとんどです(ARMのThumb命令セットとかはありますけど)。 256Byteイントロを作って楽しめるのは今や可変長命令アーキテクチャの x86しかないかもなぁ?とは思ったりも。

そういやTGS2019やってるんだよなぁ?と思ってWebを眺めていて知った 「ラクガキキングダム」。 ほぅ....

Function2019。GameDevとGraphicsを観られたり。日本語表示のゲームがエントリ されていたのですが、日本人の参加なのかしら?

2019/09/13

気持ち早めに帰着。

千葉県の大規模停電。復旧できてないエリアが広すぎない?

そういやメガデモイベントであるところの Function 2019が 始まります。ちょっと遅くまで起きてる所で思い出したのですが、 丁度オープニングセレモニーが始まる所だったり。CESTなのでJSTとの 時差は-7時間です。デモコンポ時間はJSTではまぁまぁな早朝になりそうです。

2019/09/12

早くも無く遅くも無く。

ちょろりコーディング。D言語で opCmp()をオーバーライドするのに、

  override int opCmp(mpf b){
    int n = mpf_cmp(&v, &b.v);
    return n;
  }

てな感じで書いたのですが、

gmpp.d(101): Error: function `int gmpp.mpf.opCmp(mpf b)` does not override any function, did you mean to override `int object.Object.opCmp(Object o)`?

ってエラーしてなんのこっちゃ?という感じ。 こちらのドキュメント のような事だと思った訳ですが、本当に文字通り 「opCmp(Object b)」って書くと、今度は「vってプロパティなど無い」 って当たり前のエラーになります。どうすりゃいいんだ?

結局、

  override int opCmp(Object o){
    mpf b=cast(mpf)(o) ;
    int n = mpf_cmp(&v, &b.v);
    return n;
  }

って書けばイケた気がするのですが、なんだこれ? 全ての クラスは Objectクラスから派生するんじゃないんだっけ? そうならば、わざわざキャストさせる意味が分からないし、 こうしてしまうと違うクラスや変数型との比較を適切に処理させる事はできないし、 不適切なクラスが渡された場合もコンパイル時にチェックできないように思います。

2019/09/11

早くも無く遅くも無く。

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

2019/09/10

遅めに帰着。

鉄拳7のアップデート(Ver3.00)が来てたり。eスポーツ ブームの おかげか結構息が長い感じになっているような気も。

2019/09/09

遅めに帰着。

台風の影響で、何やら千葉県内で大規模な停電になっているらしい。 正直「そんなに?」とは思ったりも。

2019/09/08

AM中に起床。

掃除したり洗濯したり。

GTS。やっとこGTリーグを全てゴールドで埋められたり。長かった。

台風。日中はあまり来ている感が無かったのですが、夜遅くになって 少し来てる感が出てきたりも。深夜がピークという感じか。 台風の位置に関係無く 月曜の朝は電車が止まるようなので、 そこで混乱気味になるくらいか。徒歩通勤可能な範囲なので 通り過ぎてれば関係ありませんが(^^;

2019/09/07

AM中に起床。

GTS。まだ取れない。

Emacsの雑記を 26.3ベースに更新してみました。ご参考まで。

そういや以前、 Google翻訳だとなんだか意味が違う訳になる英文があったのですが、 その後ニューラルネット機械翻訳になった所で 意味的には正しくなってました。ただし、「車」が省略されていたのですが、 今ではどうなっているのだろう?と試してみたり。

                原文 : I only sold ten cars, not fifteen.
2014年 5月Google翻訳 : 私は10の車ではなく、15を販売した。
2016年11月Google翻訳 : 私は15台ではなく、10台しか販売していませんでした。
2019年09月Google翻訳 : 私は15台ではなく10台しか売っていません。

ちょっとフランクになった気がしなくもありませんが、「車」は省略 されたままのようです。

因みに最近知った「みらい翻訳」 というサイト。お試し翻訳が可能なのですが、同文を翻訳してみたところ 以下のような感じに。

                原文 : I only sold ten cars, not fifteen.
2019年09月みらい翻訳 : 私は15台ではなく10台しか売れなかった。

ニュアンスはGoogle翻訳と同じ。こちらも「車」は省略されてます。 似た感じになる理由はよく判りませんが、アルゴリズム的に同じ感じだと 結果も同じ感じになるという事なのかしら?

そういや以前知った、 「Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.」 という英文。どうなる?

                原文 : Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.
2019年09月Google翻訳 : バッファローバッファローバッファローバッファローバッファローバッファローバッファローバッファロー。
2019年09月みらい翻訳 : バッファローバッファローバッファローバッファローバッファローバッファローバッファロー。

本来の意味に翻訳できるとは思っていませんでしたが、みらい翻訳は数が1つ足りません(^^;

2019/09/06

気持ち早めに帰着。

ちょろりGTS。あと少し。

2019/09/05

早めに帰着。

GTS。アップデートが来ててダウンロード&インストールに時間がかかる罠。

2019/09/04

早めに帰着。

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

2019/09/03

早めに帰着。

RISC-V。 オープンな命令セットアーキテクチャですが、よっぽどの理由が 無ければ既存のソフトウェア資産が利用できない新たなアーキテクチャの CPUを使おうって事にはならないだろうなぁと思ってました。 ところがARMがHuaweiとの取引を停止する話から、急にRISC-Vに 日が当たってきた感じも。ただの気のせいかも知れませんが。

2019/09/02

早くも無く遅くも無く。

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

2019/09/01

AM中に起床。

掃除したり洗濯したり。

随分前Linksというテキストベース のWebブラウザがある事を知ったのですが、すっかり忘れてたのを思い出したので 今どうなっているか見てみたり。現在はテキストベースを基本としながらも、 グラフィックウインドウへのレンダリングもできるようになっている みたいです。Cygwinでビルドしてみると特にエラーする事も無くビルドに 成功。UTF8対応されているとの事だったので、以前はダメそうだった 日本語文字もイケるか?と思ったのですがダメでした。 日本語ページでWeb検索を絞ってみるもほとんど出てこないのと、 元祖とも言えるテキストベースブラウザのLynx とも名前が似ている為か、 Lynxに関連するページの方が強めに出てくる感じです。

「宇宙兄弟(36)」。オリガのネタ回収。 ガガーリンのWikipedia によると、「地球は青かった」は大分意訳されているようで、 原文は「Небо очень и очень темное , а Земля голубоватая . (空は非常に暗かった。一方、地球は青みがかっていた)」 だったそうな。ただ、実際には一言で述べた訳ではないという話 もあるみたい。本巻での「地球は青いヴェールをまとった花嫁のようだった」 は、そのような言い方もしていたのか、本作のフィクションの部分なのかは 判らず。


TOP PREV