|

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ゲームなどでVLゴシックフォントを使用(同梱)する場合の扱い・ライセンスについてのメモ

この記事は 2009-05-24 時点で書かれたものです。 ライセンスは将来変更になる可能性もありますので、 最終的にはきちんと確認して各自の責任でご使用ください。

* 用語

*修正和田研フォント

一般的にこういう呼び方はされていませんが、以下では 修正した和田研フォントキットで生成したフォントを指して 便宜的にこの呼び方を使います。

オリジナルの和田研フォントのライセンスは 和田研ライセンス ですが、さざなみフォント、VLゴシックフォントで使われている 修正和田研フォントは後述のように修正BSDライセンスと思われます。

* フォントの構成、さざなみフォントとの関係

とりあえず図にまとめてみました。

* さざなみフォントの修正和田研フォント部分について

さざなみフォントの配布アーカイブに含まれるREADMEには 「さざなみフォントの修正和田研フォント部分は修正BSDライセンスである」 とは明記されていませんが、

  • 文言が修正BSDライセンスと同じである。
  • VLゴシックのLICENSEに 「さざなみゴシックフォント由来の部分 およびそれらの部品を元に改変した一部の文字については、 さざなみフォントと同様に修正BSDライセンスとします。」とある。

以上2点から、 「さざなみフォントの修正和田研フォント部分は修正BSDライセンスである」 として進めます。

* さざなみフォントの修正和田研フォント以外のフォントについて

  • VLゴシックの配布アーカイブには ayu, kappa, misaki, mplus(bitmap), shinonome, oradano についてのREADMEやLICENSEなどは同梱されていない。
  • ayu, kappa, misaki, mplus(bitmap), shinonome はビットマップフォントだが、 VLゴシックにはビットマップフォントは含まれていない。
  • oradano はアウトラインフォントだが、明朝体であり、 VLゴシックには含まれていないと思われる。

以上3点から、 ayu, kappa, misaki, mplus(bitmap), shinonome, oradano については、VLゴシックフォントには含まれておらず、 考慮しなくて良いと思われます。

* 結論

つまり、M+ と 修正和田研フォントのライセンスについてだけ 考慮すれば良さそうです。

* 実際ゲームに同梱する場合はどうすればいいか

VLゴシックフォントに同梱されているライセンス文は 英語ですが、内容は同じなのでここでは日本語訳で確認します。

修正BSDライセンス(日本語訳)


では落ちついて修正BSDライセンスの文を読んでみましょう。 先に後半部分をやっつけます。

本ソフトウェアは、著作権者およびコントリビューターによって
「現状のまま」提供されており、
明示黙示を問わず、商業的な使用可能性、
および特定の目的に対する適合性に関する暗黙の保証も含め、
またそれに限定されない、いかなる保証もありません。
著作権者もコントリビューターも、
事由のいかんを問わず、損害発生の原因いかんを問わず、
かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、
仮にそのような損害が発生する可能性を知らされていたとしても、
本ソフトウェアの使用によって発生した
(代替品または代用サービスの調達、使用の喪失、
  データの喪失、利益の喪失、業務の中断も含め、
  またそれに限定されない)
直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、
一切責任を負わないものとします。 
要するに無保証、何か起きても責任は取れませんよ、ということです。 「何か起きても」の部分については各自想像してみてください。
次に前半。
ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
以下の条件を満たす場合に限り、再頒布および使用が許可されます。

* ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
  および下記免責条項を含めること。

* バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、
  上記の著作権表示、本条件一覧、および下記免責条項を含めること。

* 書面による特別の許可なしに、
  本ソフトウェアから派生した製品の宣伝または販売促進に、
  <組織>の名前またはコントリビューターの名前を使用してはならない。 

「ソースコードの再頒布」ではないので 1つ目は関係ないと思われます。

次、2つめ。 書いてある通りですが、 「頒布物に付属のドキュメント等の資料に、 上記の著作権表示、本条件一覧、および下記免責条項を含め」 れば再頒布できる、ということです。

3つめ。 ゲームを宣伝したりする時に 「このゲームでは東京大学の和田研で作られたフォントを使用しています!」 などと言ったり書いたりしてはだめ、ということです。
たとえば18禁ゲームを作って売るときに 「このゲームでは東京大学の和田研で作られたフォントを使用しています!」 と言ったら、東京大学に迷惑がかかるかもしれませんので、 そういうことはやめましょう、ということでしょう。


という訳で、 ゲームを配布する際は、VLゴシックのアーカイブに入っている 以下のファイルを同梱しておけば大丈夫でしょう。

LICENSE
LICENSE.en
LICENSE.euc
LICENSE_E.mplus
LICENSE_J.mplus
README
README.euc
README.sazanami
README_J.mplus

「フォントのライセンスについて」「font_licenses」 などのフォルダを作り、そこにまとめて入れておいても良いかと思います。

* ライセンス文は必ず同梱しないとだめ?

VLゴシックフォントのライセンスには

なお、文書への埋め込みなど、フォントとしての再使用を目的としない用途においては、 以下で言う Redistribution には当たらず、制限なく行えるものとします。

とあり、 「フォントとしての再使用を目的としない用途においては」制限なく利用できる
(フォントとしての再使用を促す訳ではなく、ゲームで使うために フォントを同梱するだけなのだから、
→ ライセンス文にある制限に従わなくてもいい
→ ライセンス文を同梱しなくても良い)
と解釈できそうですが、 この点に関しては次のような事例があります。

[Efont-devel] Re: Fw: さざなみフォント(sazanami-gothic.ttf)の再配布について

これを踏まえると、 フォントファイル(.ttf)をそのままゲームに同梱する際は、 きちんとライセンスに従った方が無難と言えそうです。

参考(外部リンク)

スポンサーサイト

(solved) anything-rcodetools.el が動かない (Ubuntu Studio 8.04)

(1) load-path の通ったところに anything.el と anything-rcodetools.el を置いた。

(2) ~/.emacs に以下を追記

  (require 'anything)
  (require 'anything-rcodetools)
  ;; Command to get all RI entries.
  (setq rct-get-all-methods-command "PAGER=cat fri -l")
  ;; See docs
  (define-key anything-map "\C-z" 'anything-execute-persistent-action)

(3) gem install rcodetools だとタイムアウトしてインストールできなかったので
gem を取ってきて
  $ gem install rcodetools-0.8.5.0.gem
でインストール(sudo ではなく一般ユーザ)。
~/.gem/ruby/1.8/ 以下にインストールされる。

(4) Emacs で Ruby スクリプトを開くと
  File error: Cannot open load file, rcodetools
というエラーメッセージが出る。
emacs --debug-init foo.rb で開くと
  Debugger entered--Lisp error: (file-error "Cannot open load file" "rcodetools")
というエラーメッセージが出る。

----

GEM_HOME は未設定

  $ echo GEM_HOME
  ## undefined
  $

----

load-path の通っているディレクトリに
~/.gem/ruby/1.8/gems/rcodetools-0.8.5.0/rcodetools.el
のシンボリックリンクを張ったら動いた。

  $ cd my-elisp-dir
  $ ln -s ~/.gem/ruby/1.8/gems/rcodetools-0.8.5.0/rcodetools.el .

例によって Emacs Lisp よく分かってないのでアレですが、
MuraTaka 速記メモ / 2008-12-11
を参考にして ~/.emacs に設定を追加したら補完できるようになりました。 便利そうです。感謝です。

参考(外部リンク)

Ren'Py: メニュー表示+表示位置指定

メモ。

# initブロックは省略

label start:
    "ui.vbox begin."
    
    # 初期化。このサンプルの場合はなくても動きます。
    $ choice = None
    
    python:
        ui.vbox(xpos=600, ypos=100)
        # xpos: 画面左端からのオフセット
        # ypos: 画面上端からのオフセット
        
        ui.textbutton("item1", clicked=ui.returns("ITEM1"))
        ui.textbutton("item2", clicked=ui.returns("ITEM2"))
        ui.textbutton("item3", clicked=ui.returns("ITEM3"))
        
        ui.close() # vbox を閉じる
        choice = ui.interact(suppress_overlay=True)

    "your choice is [%(choice)s]."


Ren'Py: 記事のもくじ

Ruby/Tk: command に渡すブロック内でインスタンス変数・インスタンスメソッドを使う

仕組みがよく分かっていないのですが、下記の @button2, @button4 のように ボタンのインスタンスを生成した後でブロックを登録すると期待通りの動作をしてくれました。


require "tk"

class MyApp
  def foo_method
    puts "instance method"
  end

  def initialize
    @foo = "instance variable"
    
    @button1 = TkButton.new {
      text "puts instance variable 1"
      command {
        puts @foo #=> nil
      }
      pack
    }
    
    @button2 = TkButton.new {
      text "puts instance variable 2"
      pack
    }
    @button2.command { # ★
      puts @foo #=> instance variable
    }
    
    @button3 = TkButton.new {
      text "call instance method 1"
      command proc{ 
        foo_method()
        #=> NoMethodError: undefined method `foo_method' for #<TkButton:0xb6f8f8ac @cmdtbl=["c00003"], @path=".w00002">
      }
      pack
    }
    
    @button4 = TkButton.new {
      text "call instance method 2"
      pack
    }
    @button4.command { # ★
      foo_method() #=> instance method
    }
  end
end

app = MyApp.new()

Tk.mainloop

現在表示しているページのすべての pre 要素に google-code-prettify を適用するブックマークレット(Firefox向け)

Firefox 3.0.10 で動作確認しました。

prettify.js, prettify.css の URL は(自分で用意したものなどに合わせて) 適宜書きかえてください。

ブックマークレットを 1回実行すると prettify.js の読み込みが完了する前に prettyPrint() を実行しようとして失敗するようなので、 その時はもう 1回ブックマークレットを実行してください。

改造などはご自由にどうぞ。

javascript:(function(){

var jsurl='http://XXXX/prettify.js';
var cssurl='http://XXXX/prettify.css';

var d=document;
var h=d.getElementsByTagName('head')[0];
var bd=d.getElementsByTagName('body')[0];

var s=d.createElement('script');
s.setAttribute('type','text/javascript');
s.src=jsurl;
h.appendChild(s);

pr=d.getElementsByTagName('pre');

for(var a=0;a<pr.length;a++){
  var cls='prettyprint';
  if(pr[a].getAttribute('class')!=undefined){
    var cls=pr[a].getAttribute('class');
    if(cls.indexOf('prettyprint')<0){
      cls+=' prettyprint';
    }
  }
  pr[a].setAttribute('class',cls);
}

var ss = d.createElement('link');
ss.setAttribute('rel','stylesheet');
ss.setAttribute('type','text/css');
ss.href=cssurl;
h.appendChild(ss);

prettyPrint();

})();

(solved) curl: (26) failed creating formpost data

この例のように '<' が入っているとこのエラーが出る。

curl http://www.tumblr.com/api/write  \
  -F email=XXXX  \
  -F password=XXXX  \
  -F private=1  \
  -F type=audio  \
  -F "caption=<b>bar</b>"  \
  -F "data=@test.mp3"

-F の代わりに --form-string を使えば大丈夫。

Use --form-string instead of -F.

curl http://www.tumblr.com/api/write  \
  -F email=XXXX  \
  -F password=XXXX  \
  -F private=1  \
  -F type=audio  \
  --form-string "caption=<b>bar</b>"  \
  -F "data=@test.mp3"

manpage によると、-F/--form を使った場合は '<' だけでなく '@'';type='(Content-Type の指定) を特殊な文字列として扱う一方、--form-string だと特別扱いせずベタな文字列として扱うそうです。

参考(外部リンク)

(solved) curl: Warning: You can only select one HTTP request!

次のようにオプション -d と -F を混ぜて使うとこのエラーが出る。

$ curl http://www.tumblr.com/api/write  \
  -d email=XXXXX  \
  -d password=XXXXX  \
  -d private=1  \
  -d type=audio  \
  -d caption="foo bar" \
  -F "data=@test.mp3"
#=> NG

-F を使いたい場合は、以下のように -F に揃える。

$ curl http://www.tumblr.com/api/write  \
  -F email=XXXXX  \
  -F password=XXXXX  \
  -F private=1  \
  -F type=audio  \
  -F caption="foo bar" \
  -F "data=@test.mp3"
#=> OK

-d/--data は --data-ascii と同じで "name=sonota&skill=lousy" みたいな post chunk を生成するとか、--data-binary や --data-urlencode もあるとか、 -F/--form は「フォームに入力して submit」をエミュレートしていて RFC1867 に沿った Content-Type multipart/form-data を使ってデータを POST するとか、 いろいろ書いてあるので manpage を見るのが良いと思います。

Read manpage for detail.

参考(外部リンク)

Ruby(Linux): パイプとプロセスの fork/exec を使い外部コマンドと入出力をやりとりする

※検索で携帯用のページに辿りついてしまった方はこちらのPC用のページをどうぞ

Rubyで外部コマンドと入出力のやりとりを行いたい、という需要は そこそこあると思うのですが、パイプやプロセスについて知っていないと ちんぷんかんぷんなので、サンプルと図を作ってみました。

自分もよく分からない状態から始めたので 間違いなどあるかもしれません。

スレッドについては割愛。


ソースだけ見ていてもイメージしにくいので 適当に図を描いてあーでもないこーでもないとやってみると だんだん分かってきます。


外部コマンドの例として mplayer を使いました。 mplayer は -slave オプションを付けていると 標準入力からのコマンドを受け取って動作するので、それを利用して 「4秒再生、4秒一時停止」を繰り返させています。

# 入出力を両方使いたいのでパイプが 2本必要
# 入力のみまたは出力のみでよければ 1本だけ作る
pin_1, pout_1 = IO.pipe # 外部コマンドからの読み取り用
pin_2, pout_2 = IO.pipe # 外部コマンドへの書き込み用

Thread.new {
  fork {
    pin_1.close  # ★
    pout_2.close # ★
    STDIN.reopen( pin_2 )
    STDOUT.reopen( pout_1 )
    
    cmd = "mplayer -slave foo.mp3"
    exec cmd
  }
}

pin_2.close  # ★
pout_1.close # ★

# 外部コマンドに出力を送る
# → pout_2 に書く
Thread.new {
  loop {
    sleep 4
    pout_2.write "pause\n"
    sleep 4
    pout_2.write "pause\n"
  }
}

# 外部コマンドの出力を読む
# → pin_1 から読む
loop{
  line = pin_1.gets( "\r" ) # "\r" で区切って読む。これはmplayerの出力に合わせた措置。
  puts "read from ext cmd: #{line}"
}


ちなみに、パイプの使い方については青木さんの「ふつうのLinuxプログラミング」を参考にしました。 この本に載っている解説は Ruby ではなく C言語で書かれていますが仕組みは同じです。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ソフトバンククリエイティブ 2005-07-27
売り上げランキング : 18422

おすすめ平均 star
star初心者にはちょうど良い。でもストリームという造語には納得できない
star良書だと思います
starLinuxを学ぶ為の読本、Cプログラムミングを学ぶなら別の本で

Amazonで詳しく見る
by G-Tools

参考(外部リンク)



** ホームに戻る

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。