いろんなtailユーティリティ。

Apacheとかその他のサーバ類でログを見ながら設定ファイルをいじったりするときに、重宝するのはやっぱりtail系のユーティリティです。

NetBSDでは標準のtailは '-f' オプションを付けると1つのファイルしか受け取りません。

Apacheではリクエストのログ (access_log) とエラーのログ (error_log) の2つのファイルを設定していますが、

  • まとめて1つのスクリーンで見たい
  • さらに特定のURLへのアクセスのみ見たい
  • あるいはgrep的にフィルタしたログのみを見たい
などという場合が多々あります。

そこでちょっとpkgsrcを覗いてみました。
locate tail | grep pkgsrc
などとするといくつかあるようです。

  • misc/colortail: 出力をカラー化してくれるtail。別途色設定ファイルも必要。複数のファイルには対応していないっぽい。C++で書かれている。
  • misc/mtail: 出力をカラー化してくれるtail。Python2で書かれている。http://matt.immute.net/src/mtail/
  • misc/multitail: 複数のファイルをスクリーンを分割して出力してくれるtail。
  • misc/xtail: 複数のファイルあるいはディレクトリ以下の全ファイルを同時にtailする。
  • sysutils/wtail: multitailと同様に複数のファイルをスクリーンを分割して出力してくれる。
ちょっと使ってみたんですが…。
  • colortail: 複数ファイルに対応しているけれど、そのファイルを出力する際にファイル名を別途出力するのでけっこう見づらい。カラー化自体は好みかも。
  • mtail: colortail同様、ファイル名は別途出力されるので、どのファイルの出力家を見るのが辛い。
    ちなみにファイル名はこんな感じで表示される。
    ==> /var/log/httpd/access_log <==
  • multitail: RLoginで表示しているときにマウスでスクリーンをクリックすると、なぜかバッファが動いてしまう場合があるけど、オプションも豊富で、正規表現でのパターン指定('-e'オプション)ができるし、排除パターンの指定('-ev'オプション)もできるので便利。
  • xtail: pkgsrcで利用しているソースのREADMEには、"1989年7月にcomp.sources.miscに投稿された"とあって、めちゃくちゃ古い。平成元年。"XコンソーシアムとかSGIとかが "xtail" という名前を盗もうとした、騙されるな、オリジナルはこっちだ"とも書いてある。
    '-f' オプションはないので、xtail起動以降にファイルに追加された部分を随時表示していくけど、パターン指定ができないのでそういう用途には不向き。
    あと、終了時はESCや'q'ではなく、CTR+CやCTRL+DですらないCTRL+'\'という変則的なものなので、知らずに起動すると別のコンソールからkillしなくてはならない。
  • wtail: オプションはないらしく、 xtail /var/log/httpd/*log したらログを全部表示してから '-f' オプション相当の動きになって、大変なことに。
どうやらいちばん良さそうなのは multitail あたりでしょうか。カラー化含めて設定ファイルをいじってみるといいかと思います。

BlenderからFreeCADのファイルを読み込む。

objフォーマットとかstlフォーマットとか、受け渡しに使えるファイル形式はあるんだけれど。

もうちょっとなんとかならんかいなと思ったらこんなのを見つけました。

Blender FreeCAD importer updated

ずばり、BlenderからFreeCADのFCStd形式のファイルを読み込むためのアドオン…なんですが…。

詳細はこちら。yorikvanhavre/io_import_fcstd.py

なんでいきなりシオシオなのかというと、これを使うためには "Python3でコンパイルされたFreeCAD" が必要だからです。

# WARNING

# This addon requires FreeCAD to be installed on your system.
# The default versions of FreeCAD that you can download from the FreeCAD
# website or from your distribution's repositories is usually compiled
# with Python2. However, Blender supporting only Python3, this addon
# requires a version of FreeCAD that is compiled with Python3. This might
# require you to compile FreeCAD yourself at the moment, or find a kind
# soul (maybe on the FreeCAD forum above...) who will be willing to
# compile a Python3 version for your system.

なんてことがファイルの中に書かれてまして。
確かに、BlenderはPython3 (しかもいささか古いPython 3.5.3…)でコンパイルされており、一方のFreeCADはPython2 (Python 2.7.14)でコンパイルされています。
Python2とPython3の間にはふかーい溝があるので使えないんですよ、使いたければFreeCADを自分でコンパイルしてね、ということです。

ところで、FreeCADをPython3でコンパイルする方法は、FreeCAD WikiのPython 3のページに書いてあります…Ubuntu用ですが。

そしてさらにPivyとPySideのPython3.5版が必要になります。が、pivyはプロジェクトのページが応答しないし、PySide (Qt for Python)はpipでインストールしようとするとPython3.4までしかサポートしてないのよ、といわれます。
Pivy自体はcoin3d.orgから外に出て https://github.com/FreeCAD/pivy にリポジトリがあるようですが。Coin3D自体も https://github.com/Alexpux/Coin3D にあるようです。


これは茨の道ですね。茨の道なので後回しです。

FreeCADでレイトレーシング。

今のところちゃんと動いていないため、とりあえず状況の整理を。

OS: Windows10 Pro
FreeCAD 0.17.13541 (2018.8.16)

FreeCADから利用できると書かれているOSSのレイトレーシングソフトは、POV-rayとLuxRenderとなっていますが、LuxRenderは2017年末に再起動し、2018年4月にLuxCoreRender V2.0beta2として最初の公式リリースを出しています。

レイトレーシングは正直これまでアプリのデモ程度でしか触ったことがないため、よくわからないわけですが…。

ちょっと調べてみたところ、POV-rayはGPUを使用せずにCPUのみでゴリゴリやるため、たいへん時間がかかるようです。

LuxCoreRenderはOpenCLを使ってGPUを利用し、さらにCPUも使い倒しているようです。
ためしにLuxCoreRenderのダウンロードページから壁紙をダウンロードし、描画させながらタスクマネージャーのパフォーマンスグラフを見ると、内蔵GPUを5割ほど使用している様子がわかります。



また、GTX960mを組み込んだCore i7のノートPCでは、GTXも内蔵GPUも両方使い、さらにCPUも使って計算しているようです。

実際のところ、本気の映像クリエイターでもない限りは可能な限り計算時間は短いほうがいいでしょうから、LuxCoreRenderを使用することにしようと思います。
ちなみに現在使用しているCPUは第4世代Core i7プロセッサーの4790K(オーバークロックなし)です。2014年のCPUなのですが、これ以降では劇的に性能が上がっているとかいうことはないので、まあこれでいいやという感じになっています。そうは言っても近いうちに8700Kにしたいなぁなどとは思っているんですが。

ともあれ、LuxCoreRenderのダウンロードページを見ると "BlendLuxCore v2.0" というのが目に入ります。これはLuxCoreRenderをBlenderのアドオンにするためのビルドのようです。その下には "Standalone release v2.0" と、 "LuxCore API SDK release v2.0" というのがあります。3種類もあってどれを使えばいいのか、FreeCADのところにも書いてません。

わからないときはソースを読めという格言の通り、関係ありそうなソースを探してみます。
幸い、FreeCADのgitリポジトリにそれらしきものがありました。

https://github.com/FreeCAD/FreeCAD-render/blob/master/renderers/Luxrender.py

def render(project,external=True):

    if not project.PageResult:
        return
    p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Render")
    if external:
        rpath = p.GetString("LuxRenderPath","")
        args = ""
    else:
        rpath = p.GetString("LuxConsolePath","")
        args = p.GetString("LuxParameters","")

render()関数の引数で external にTrue (デフォルト)がセットされると LuxRenderを呼び出し、Falseなら LuxConsoleが呼び出される、ということらしいです。

余談ですがこのgitリポジトリにはAppleseed.pyなんてのもあって、これはAppleseedというレンダラを使うためのファイルのようですね。たぶんFreeCAD 0.18? いずれにしろこちらはメニューには出てこないようです。

閑話休題、上記の3つのダウンロードのうち、FreeCADから呼び出して使うのは "luxcoreui.exe" のようです。なので "Standalone" を使うことにします。


とりあえず部品作成はFreeCADで、シーン合成などはBlenderを使って、レイトレーシングをLuxCoreRenderで進めてみようかなと考えていますが、とりあえず使えるかどうかの確認です。


FreeCADでワイングラスを作ってみました。

これをレンダリングしてみますと…。


なんか違う感がハンパない…。

Windowsでシンボリックリンクを試してみる。

きっかけは、1つのファイルを別の名前で起動したら違う動きになるようなスクリプトを書く、でした。  busybox なんかでは、同じ実行形式ファイルの名前を、lsにすればlsと同じ、cpとすればcpと同じ動作をするようにしてますが、Pythonスクリプトでそれと同じように argv...