Inkscapeのコードを読む 使用library一覧

現在、Inkscapeのコードを読もうと格闘中です。
今回は、ざっくりとInkscapeで使用しているライブラリの概要と一覧を作ったので、貼っておきます。



まず間違いなく使用ライブラリを網羅していないので、これがすべてではありませんが。
とりあえずInkscapeのソース中に直接取り込まれていて、目に付いたものを記載しています。
幾何学関連で実績のあるオープンソース・ライブラリの良い一覧くらいにはなるかと。

Inkscapeソースコードの取得

まずはInkscapeのコードを取得しましょう。
公式WikiのUsing a centralized (SVN-like) workflowを読みましょう。
http://wiki.inkscape.org/wiki/index.php/Working_with_Bazaar#SVN-style_checkout
ざっくり解説すると、Inkscapeはリポジトリにbazzer(bzr)を使っていて、ソースコードは以下のコマンドで取得できます。
bzr checkout lp:inkscape
bzr update



## libavoid

License:GPL
object-avoiding connector routing for use in interactive diagram editors.
http://www.adaptagrams.org/documentation/libavoid.html

## libcola

License:MIT
constraint graph layout(制約グラフ)
http://marvl.infotech.monash.edu/webcola/
を見るとjs版のサンプル画像が見れる。
https://github.com/mjwybrow/adaptagrams
によると、libavoidなどと同じチーム(?)の制作。

## libcroco

License:LGPL
Libcroco is a standalone css2 parsing and manipulation library.
https://github.com/GNOME/libcroco
http://lfsbookja.osdn.jp/BLFS/svn.ja/general/libcroco.html

## libdepixelize

License:不明
Inkscapeではピクセル画像をベクタ化する際に使っているとのこと。
http://research.microsoft.com/en-us/um/people/kopf/pixelart/
によると、どうやらMSのプロジェクトから来ているらしい。
ソース上のREADMEによると、リポジトリからコピーしたものだから更新する場合は本家リポジトリを更新した上でコピーせよ、とのこと。

## libgdl

License: LGPL?
dock layout widget.
GTK由来と思われるドッカー(ウィンドウ内で可変サイズの領域を取る内ウィンドウ的な)ウィジェット。

## libnrtype

License: (InkScape?)
typeface rendering(cross platform glue)
http://wiki.inkscape.org/wiki/index.php/Pangoification
によると、Sodipodi時代に書かれてPangoに置き換えられていくように読める。

## libuemf

License: GPL2
reading/writing Enhanced Metafile (EMF)
and Windows Metafile (WMF) files.
https://ja.wikipedia.org/wiki/Windows_Metafile
によると、EMFはWindowsのベクトル画像フォーマットとのこと。

## libvpsc

License: LGPL
? 何をやっているのか不明。
http://www.adaptagrams.org/documentation/libvpsc.html
によると、
solving for the Variable Placement with Separation Constraints problem.(分散制約問題)を解く、とある。


## libarot

License: (InkScape?)
rasterization and geometry library
http://libregraphicsworld.org/blog/entry/rock-around-0-48-interview-with-inkscape-team
によると、rasterizationはCairoに、geometoryは2geomに置き換えられていくように読める

## 2geom

License: LGPL
http://osdn.jp/projects/sfnet_lib2geom/
によると、幾何学計算のライブラリ。(抽象的な処理を受け持ち、レンダリング(ラスタライズ?)は担当しない?)


まとめ

adaptagrams.org という方(方々?)が作ったライブラリが多い。
・いくつかのライブラリは将来的に2geomにまとめられて置き換えられていくらしい。

libvorbisで.ogg音声ファイルをデコードする(memo)

vorbis形式の音声ファイルを再生するコードを書こうと思った際のメモです。
勿体なかったので公開。
書いたのは、vorbisをPCMデータに変換するまでです。
音を出していないので、正しさを確認していない&中途半端です。

PCM形式でメモリに置くまで試して、PCMデータのサウンド出力は実際に試さずに放置していました。

さらに、同じ内容で微妙に違う2記事を適当に統合したので、重複や間違いがあると思われます。


Gstreamer


libvorbisで、(ogg) vorbisファイルをデコードしてメモリ上にPCMデータを作るサンプル
Gstreamerで 、メモリ上のPCMデータを出力するサンプル
を組み合わせて、
Ogg VorbisファイルをPCMデータにしてからGStreamerに投げることを目指す

こんなことをしなくても、
GStreamerにファイルを渡せばOggVorbisのデコードまでしてくれるが。

わざわざこんなことをする理由は、
・Ogg Vorbisファイルがデコードできていることを確認したい。
・ネットワーク音声転送するにあたって、GStreamerにメモリ上の音声データを直接渡す方法を知っておきたい。

ネットワークを通すということは、ストリームでありバイナリデータ。
GStreamerにも音声伝送用のサーバ・クライアントはあるが、暗号化をかけるのが面倒そう&画像と音声以外を送るためにできていない。





PCM形式が使われるらしい。
(libvorbisもデコード時にPCM変換を行っている)

メモリ上にPCMデータを用意する
Gstreamerにメモリを読ませる。
Gstreamer内部形式に変換させる
出力まではGstreamr

なお、GStreamerの出力デバイス自動指定(autoplay)を使うので、これを指定して音が出ることが前提です。




(とても成功とは思えない) libvorbisサンプルプログラム実行成功の様子

libvorbis(libogg)とサンプルのコンパイル

ソースを入手するには、公式サイト http://www.xiph.org/downloads/ から圧縮ファイルかリポジトリを探します。
今回はGitリポジトリを使用しました。
公式サイトには、さらにサンプルコードとその解説が用意されています。

どなたかが日本語訳してくださったFAQによると、libvorbisを使用するには、liboggが必要とのこと。

ライブラリソースのダウンロードページからリポジトリ一覧を探し、その中からliboggとlibvorbisをcloneして取得しました。
ダウンロードページの圧縮ファイルを解凍して使っても構いません。

作業用のディレクトリを作り、その中でgitコマンドを実行しました。

git clone  git://git.xiph.org/mirrors/ogg.git
git clone git://git.xiph.org/mirrors/vorbis.git

libvorbisはliboggを必要とするので、oggからコンパイルします。
また、今回はインストール場所をプロジェクトディレクトリ下にするため、prefixオプションを使用しています。

cd ogg
./autogen.sh --prefix=$(dirname $(pwd))
make install
cd ..


続いてlibvorbisをコンパイルします。
(インストール先にすでにliboggのバイナリがあるためか、オプションでlibogg指定する必要はありません。)

cd vorbis
./autogen.sh --prefix=$(dirname $(pwd))
make install
cd ..

公式サイトにあるlibvorbisのドキュメント内にサンプルソースがあるので、コピーして使用します。
ファイル名をexample.cとして保存します。


makefileを書きます(必要箇所をtabで置き換えてください)。

BIN=vorbis.exe
SRC=example.c
ARGS=$(shell export PKG_CONFIG_PATH=lib/pkgconfig/:${PKG_CONFIG_PATH}; \
    pkg-config --libs --cflags vorbis vorbisfile)

$(BIN): makefile $(SRC)
    gcc $(SRC) -o $(BIN) $(ARGS)

clean:
    rm $(BIN)




ここまでの準備が済むと、作業ディレクトリはこのような構成になっているはずです。

 vorbis/        (libvorbisのソースディレクトリ)
 ogg/            (liboggのソースディレクトリ)
 include/
 lib/
 share/
 example.c            (プログラムソース)
 makefile


コンパイルして実行します。
デコードするoggファイルは、標準入力から与えます。
make
./vorbis.exe < "~/07 - Automatic analyzer.ogg"

シェル上に文字化けした謎の出力が出るようになったら成功です。
PCMデータを変換せずに標準出力に出力しているため、このような出力になります。

GStreamer-SDK導入とサンプルのコンパイル

以前の記事を参照してください。
チュートリアルをコンパイルして実行できるところまで確認しておくと良いです。


ここから先は、メモリ上のPCMデータを実際に再生する、そして解説がここに。
GStreamerは標準でoggファイルの再生機能を持っていますが、ここで重要なのは、メモリ上の生データ(PCM形式の配列データ)をGStreamerに流し込む方法と、それによるPCMデータの再生です。

spk121様のburro-engineより、
メモリ上のPCMビープ音をGstreamerで出力するサンプルを取得します。
さらに、GStreamerおよびこのコードについての解説が、GStreamer Tutorial #1: How I Made a Beep! にあります(英語)。

ビルド方法も、ソース付属のビルドスクリプトに準じます。



要するに、audio/x-raw-intを使って、PCMデータをGStreamerに流し込めば音が再生できるようです。




オープンソース・ソフトウェアプロジェクトの寄付先リスト(2013年版)

2013年あたりに作ったメモ。
捨てるのも勿体なかったので公開。
今では歴史的価値すら無いかもしれませんが。

もっと高額を寄付している人はいくらでもいますし。
あくまで少額寄付のススメとして。
もろもろの葛藤は「やらない善よりやる偽善」ということで。
とりあえず最大合計1万円を目安に、割り振っていきました。

選考基準

このソフトウェアに値段を付けるとこれくらい、という意味ではありません。日頃の利用率とも比例していません。

とはいえ。これが2015年現在であったなら、FontForgeに寄付しないではいなかったはずです。(とても使っているので)

注意

リンク先URLは参考程度に。いつURLが変わるとも限りませんし、リンク先が本物だと保証もできないからです。
「寄付のページがあるんだな」と確認するにとどめて、公式ページから寄付先を探してください。

2013/07/10にGoogleで見たら、1USD100.5円でした。
なので、1ドル100円換算とします。


Linux

500円
「カードorPayPal」で可能。
linuxfoundation.orgのDonateページ

まずはLinux。one time(一回きり)の方。割合としても少額ですが。
カーネルに重点を置いて寄付したいのですが、LinuxFoundationに入れておけばよいのかちょっと悩みます。
この寄付ページは検索で簡単に見つかります。

PayPalアカウントが使えなかったので、
Don't have a PayPal account?
Use your credit card or bank account (where available). Continue
の方へ。いろいろ入力しました。

GIMP

2000円くらい
PayPal、Bitcoinほかで可能。
Donateページ

2.8になって手ブレ補正がつき、イラストが描きやすくなりました。
Linuxデスクトップを使っていて画像編集したい場合に、オールインワンかつ必須のソフトウェアだと思います。

GNOME Foundationへの寄付になるようなので、コメントに(下手な英語で)「可能ならGIMP、またはGNOMEのソフトウェアプロジェクトへお願いします」と書いておきました。あくまで、他のプロジェクトへ回ってもOKという気持ちで。
間違って500円入れてしまったので、残り1500円をもう一度入金。
二度目は「Donate to gimp@gnome.org」って書いておきました。迷惑でなければよいのですが。



WINE

2000円くらい
「カードorPayPal」、Googleチェックアウト、メール で可能
Donateページ

WineHQから飛べます。
codeweaversからの資金援助もあるようです。とても良いことだと思います。
大学時代、WINEの仕組みを知った時には思わず胸が鳴りました。ソフトウェアがこんなにも面白いと知ったきっかけのひとつです。



ReactOS

2000円くらい
PayPal、Bitcoin、WebMoney ほかで可能。
Donateページ

WINEのコメントを書くまで忘れていたのですが、大学時代にドキドキさせてくれたプロジェクトです。プログラマを本気で志した理由のひとつでした。
ReactOSとOSASKには思い入れがあります。

ReactOSのクレジット決済ページだけなんで生年月日を訊かれるのかと思ったら、PayPal登録を兼ねたページなのだそうです。当然ながら「JPからは送金できない云々」。
支払方法のうち、WebMoney(ウェブマネー)は、日本のコンビニで売っている固有名詞のWebMoneyではありません。注意。間違って買ってしまいました。

MyPaint

2000円くらい寄付したかった。
寄付先がないため無理なようです。
「ありがとう。でも寄付はいらないよ」的なことがWeb上に書いてあったので良しとします。(そのページはセキュリティ証明書が切れていたので、本物かどうかちょっと怪しいですが)
 

Liferea

500円くらい
「カードorPayPal」で可能。
OpenHatchのDonateページ
Lifereaフィードリーダーを使っていたので、2013年のGoogle Reader終了騒ぎに巻き込まれずに済みました。
ところで寄付先は本当にここ(OpenHatch)でいいのでしょうか。
公式ページのリンクをたどると、上のリンクページにたどり着くのですが。


「Lifereaが好きです、ありがとう」(英語)とメッセージを書いておきました。
ここでPayPalから受領メールが来なくなる。不安。
カードの明細には該当する取引が記載されていたので、どうやらメールアドレスを記入ミスしたようです。

InkScape

1000円くらい
「カードorPayPal」、Googleウォレット で可能。
Donateページ
ベクタ系のイラストツール。まだまだ発展途上に感じるのは、私があのUIに慣れていないだけかもしれません。

こちらもPayPalからメールが来ませんが、やはりカードの明細には記入されていたので、メールアドレスの記入ミスだったようです。


Wikipedia

500円くらいクレジットカード、PayPalで可能。
寄付ページ
オープンソースプロジェクトとは違いますが。
いつもジミー・ウェールズ氏のバナーが表示されている印象があります。わたしがメインページを見たときは穏やかなものでしたが。

これまでのサイトとは違い、クレジット決済をPayPalのフォームを通さずにやれるようです(内部で使っていないかどうかはわかりませんが)
しかも、通貨単位がUSDではなく日本円です。
最初に2回クレジット決済に失敗したのですが、どうやらNoScriptがいけなかったようです。2つほど許可したら送金にクレジット決済に成功しました。

Little Witch Academia 2  ( by Studio TRIGGER )

500円くらい
Amazon経由(Kickstarterプラットフォーム)
プロジェクトのKickstarterページ
オープンソースプロジェクトでないものその2。既にまったく関係ない。
以前、はてブに上がっていたリンクで一話を見ました。
最近、はてブにこの話題が上がっていました。
偶然のタイミングでした。それだけです。

これを送金するためだけに、Kickstarterと米Amazonにアカウントを登録することになりました。




備考:今回は漏れましたがいつもお世話になっております高品質なソフトウェア様がたは、今度機会があれば、また検討します。

PayPalアカウントの作成方法

PayPalで日本から送金できない
PayPalで日本から送金できない


「PayPalでは、現在JPの買い手からの寄付支払いはサポートされません。」と出て使えません...。
 PayPal経由で寄付しようとしたのですが。

PayPalへアクセスして、アカウント作成のページで「パーソナル」を選択。
個人情報を入力
(パスワードのコピー&ペーストは禁止だそうです。不便。)
しばらくするとメールが来ますので、メール上からリンクをクリックして、秘密の質問を答えればアカウント登録は終了です。

寄付の手順
PayPalって書いてあるリンクをクリック
寄付先が対象プロジェクトなのか、GNOMEなどのグループなのか(グループなら希望を出せるのか(叶わなくてもOKというのが前提ですが))
PaylPalのダメな方だったらカード(VISAまたはMasterCardほか。JCBは使えない)のほうを選択。


PayPal カード決済
PayPalアカウントではなく、画像のリンクからクレジットカード決済 (WINE)


PayPal クレジットカード決済画面 GIMP
PayPal クレジットカード決済画面 (GIMP)


以上です。

RSSフィードをPHPで書かせた際のメモ

書きかけの汚いメモです。捨てるのも、もったいなかったので。

firefoxでダウンロードされる不具合。
.rdfではなく.xmlにするとダウンロードされない。

.rdfをxmlとしてApacheに設定すればよい(ダウンロードされない?)のだけれど、基本設定は変えられるとは限らないので、できるだけいじらない方針。(レンタルサーバへUpしたことがないので予防検疫的にコーディング。)

PHPでheader()を吐けば良いらしいけれど、RSSのURLが呼び出されるたびにPHPでRSSを生成させたり、生成済みファイルにheader()を付与するためだけのPHPファイルを追加したくなかった。

RSS自体の書き方。
RSS2.0で画像・リンク有り概要を実現する「<content:encoded>」を使う
そのまま使うとRSSリーダ(Liferea)がエラー。リンクからRSSを開くとFirefoxもエラーを吐く。
検索で上手く見つからず、考えた結果、自己解決。
RSS拡張するだけではダメ。(<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">の追記だけではダメということ。)
結論:CDATAセクションで囲む。
<description>もこれで囲んであった。

以上。

ルーン文字フリーフォント集 手書き風の新フォントを追加


ルーン文字フリーフォント集のRuneAMN_SeriesFonts に、新書体として KnifeAフォント および KnifeArフォント を追加しました。
楔文字(くさび文字)を起点にして、手書き文字をイメージした字形になっています。



RuneAMN_Series_Fontsは、デザイン・イラスト向けのルーン文字フォント集です。
複数のルーン文字フォントを収録した、daisy bellのフリーなフォント製品です。

RuneAMN_Freeシリーズフォント


RuneAMN_KnifeA(r)のねらい

RuneAMN_Serif

これまでRuneAMN_Freeに収録されていたフォントは、正確な直線を基本として成る、ベーシックなセリフ・サンセリフ書体としてデザインされました。
その字形は、端正で美しいものです。反面、産業革命以降の印刷物に使われた金属活字・写植技術の流れを汲む、どこか人工的な文字の形でもあります。
ルーン文字が役立つ場面の多くは、魔法をコアとする、古代〜中世ヨーロッパ的なイラストです。

もちろん、セリフ・サンセリフ書体が魔法世界と反発するということはありません。むしろセリフ書体は時計の時刻を示すローマ数字を連想させて、魔法と非常に相性が良い字形です。実際に私が100個のルーン魔法陣をデザインした際には、サンセリフ書体と共に大活躍しました。
一方で、産業革命以前の、手書きあるいはナイフで木版や石版に描いたようなルーン文字フォントを作れば、RuneAMNユーザが描けるデザインの幅が広がるのではないかと考えました。

そこでデザインされたのが、RuneAMN_KnifeA~Dフォントです。
2015/07現在、全7種類が存在します。4個より多いのは、"r"(Reverse/反転)と"Bold"(太字)を含むからです。
これらを総称して、 RuneAMN_Kinfe's あるいは、
プログラマの慣習に従って RuneAMN_Knife*フォント と呼称します。

今回は、この中からRuneAMN_KnifeAおよびKnifeArを、フリーフォントとしてリリースしました。
KnifeA(r)があれば、ルーン文字による自然物への手書きデザインが簡単になります。

## RuneAMN Free Series Fonts アップデートについて
今回のRuneAMN Free Series Fontsのアップデートには、上記のKnifeA(r)フォント2つを、新フォントとして追加しました。


また、試験的に10点添付していたルーン魔法陣素材も、30点に増やしました。
魔法陣素材は、AI/SVGによる、透過ベクター形式です。
透過素材なので、簡単に貼り付けて使えます。ベクター画像なのでどれだけ拡大してもボケないので、ピクセル数の大きい画像や印刷物でも、大きなサイズで使うことができます。


(英語版記事 / For english of this article)

ダウンロード

RuneAMN_Freeのダウンロードは、
daisy bellのPixiv/BOOTH
または、
daisy bellの配布ページ[OSDN]
からどうぞ。

フォント開発に使っているFontForgeスクリプト他をオープンソースで公開しています。
RuneAMN_Pro_Series_Fonts[github]

RuneAMN_Proについて


RuneAMN_Proは、RuneAMN_Freeには無い、意図して特定用途に絞り、個性的なコンセプトで作成されたフォントたちを収録したフォント製品です。
RuneAMN_Proに、KnifeフォントのB~D(一部さらに"r"および"Blod")までが収録されています。手書き風に崩したKnifeDと、これをさらに太字化したKnifeDBlodが含まれます。
KnifeB以降のフォントは、すべてKnifeAの派生デザインです。そのため、実のところ基本のデザインにはKnifeA(r)だけあれば十分です。
KnifeB以降は、デザインのディティールを、より繊細にコントロールしたいユーザ向けのオプションとして用意しました。

なお、RuneAMN_Proでは、RuneAMN_Freeに収録済みの魔法陣に追加をおこない、合計100点の魔法陣素材を添付しています。


今後の予定

RuneAMN_Freeに、さらなる新フォントを増やす予定です。(約束することはできませんが。)
画像が、新フォント KnifeE の候補です。
(こちらのほうがより楔文字らしい?)



というわけで、RuneAMN_FreeシリーズフォントおよびKnifeA(r)フォントをよろしくお願いします。

Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換する

 Linuxコマンドライン上でSVGベクタ画像をJPG等へラスタライズ変換することができるが、上手く変換されない場合がある。   以前作った魔法陣イラスト素材をイラスト素材ストックサイトへ登録しようと思い立ち、改めて素材用にラスタライズ変換をかけようとした。   ラスタライズ変換...