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)フォントをよろしくお願いします。

ブラックレター書体のデザイン・チートシート


project daisy bellのRuneAMN_Proシリーズフォントには、BlackletterおよびBlackletterPlowとして、ルーン文字のブラックレター書体をデザインして収録しています。
 (BlackletterPlowは次回リリースで収録予定。)

このルーン文字版ブラックレター体フォントをデザインするにあたり、既存のラテン・アルファベットフォントから、デザイン性の高い複数のブラックレター体を参考にして、ブラックレター書体の特徴を抽出する作業を行いました。
この記事のチートシートは、その際に観察結果を自分用にまとめたものです。

RuneAMN_Proのブラックレター体 書体見本

装飾性の高いブラックレター体の特徴を知り、使いこなすことで、作品タイトルやロゴに最適化された専用のブラックレター文字をデザインすることができます。
また、既存フォントのデザインをロゴ用に調整する際も、不自然になるのを避けることができるようになります。

いちおう注意点を。このチートシートはあくまで私製で、観察の結果をまとめたものです。
ブラックレター体のデザインについて、体系立った公式の解説が欲しい方は、カリグラフィーの教科書などに正確な情報が載っていると思われるので、それらをご参照ください。
(というか、そういったものがWeb上に見つからなかったので仕方なく作ったものです。もっと詳しい方からマサカリが飛んでくるのを待っています。)
















以上です。
slideshareにUpすればよかったのかもしれませんが、2000x1000で作ってしまったものは仕方ない。

上の項目をまとめたチートシートを下に置いておきます。


Pixiv(ユーザページ)にも同じものをUpしておきます。
本ページの内容が更新された際はTwitterアカウントで告知するかもしれません。


同人誌・ イラスト・デザイン向けダウンロード販売サイトの比較一覧


ダウンロード販売しているフォント製品の、購入方法の選択肢を増やそうと思い立ち、ダウンロード販売サービスを調査しました。
その防備録です。

拠点としてPixiv/BOOTHにdaisy bell 製品紹介ページを作っており、BOOTHアカウントを持っていないユーザのために、Gumroadでも同じフォント製品を取り扱っています。

https://daisy-bell.booth.pm/


"project daisy bell"はオリジナルのデザインフォントを販売しています。
これまでの販売履歴をチェックしてみたところ、代引き購入が多いことがわかりました。
これは、クレジットカードが多いだろうという私の予想に反していました。
また、Pixiv/BOOTHのアカウントを持ってない(アカウント作成もしたくない)ユーザのために用意したGumroadが、あまり有効ではないことがわかりました。
そこで、
・そのダウンロード販売サイトのアカウントを持っていなくても購入できる
・代引きによる支払いで購入できる
という条件で、ダウンロード販売サイトを検討することにしました。

フォント製品の主な想定ユーザ様は、個人のデザイナ・イラストレーターの方々です。
そのため、調査の対象は、イラストサイトや同人誌ダウンロード販売に関連したサイトが中心となっています。


現在、"project daisy bell"による有償フォント製品は、以下の2つです。


RuneAMN_Pro_Series_Fonts  1600円
RabbitMaluka  600円
(価格は2015/05時点でのものです)

RuneAMN_Pro_Series_Fontsは16種類のルーン文字書体を収録したデザインフォント集で、フォントとしてはともかく、同人関連のDLサイトで扱う製品としては、額がひとつ大きな区分に入ります。
 RabbitMalukaは、検討したサイトで扱っている同人誌などの商品と、同じくらいの値段になっています。

ダウンロード販売サイト一覧

チェックしなかった項目

・税別とか面倒なので無視した・購入側が代引き・口座振込を選んだ場合の手数料は無視した
・販売側へ売上を振込む際の手数料も無視した
・購入ページのSSL対応とかチェックしていません
・(特に同人誌をPDFなどで販売する場合)専用ブラウザの出来とかDRM付けたいとか付帯サービス(例:スキャン代行)などがあるかと思いますが省きました
・購入時支払い方法の多さもチェックしていません
  (代引き対応していないところは一覧に含まれて無いだろうと思う)
・初期費用・維持費をチェックしていない
  (かかるところは一覧に含まれて無いだろうと思う)

チェックした項目の概要

手数料:
 ・ダウンロード販売の手数料のみで、必須でなければ代引き手数料などは含めていません
 ・もちろん安いに越したことはありません。
購入時の会員登録有無:
 ・今回は、『購入の間口を広げる』という目的があるため、会員登録が必要なサービスは(私的な)比較評価点を下げました
引き落とし:
 ・「自動振込」であると好ましい(販売サイトの管理なんてしたくないので)
 ・保留繰越となる下限額が低いほど良い(LINEスタンプの下限1万円は、私には高かった)

チェックし忘れた項目

・売れ行きチェックのしやすさ
  (管理ページの使いやすさ)
・購入者への無償アップグレードサポートのしやすさ
  (購入者のメールアドレス程度がわかっていないと購入の確認が面倒になる)

一覧の最後に、参考URLと雑感を書いておきました。
お約束として:この一覧は、私がざっと読んだ範囲の要約です。また、2015/05時点のものです。正確な情報は各サイト様の公式な案内を参照してください。

一覧

#### Pixiv/BOOTH

手数料: 3.6%+10円 (販売価格から引く)
購入時の会員登録有無: 必要
引き落とし: 1000円まで保留繰越 (5000円で自動振込)
参考URL:
https://booth.pm/faq

販売者の商品一覧ページが作れる(作らなければならない)。
とりあえずここをメインで使っている。Analytics連携がある。
0円にするとダウンロード数の時間軸統計がもらえない(有料コンテンツの場合は売上一覧がある)。

#### Gumroad

手数料: $0.25+5% (販売価格から引く)
購入時の会員登録有無:
引き落とし: 保留繰越なし。自動振込。
参考URL:
https://help.gumroad.com/customer/portal/articles/1569605-what-are-gumroad-s-fees-
https://gumroad.com/features/pricing

販売側は、売上をPayPalで受け取ることもできる。
購入者側の支払い方法はカードとPayPal。代引き・振込による支払いはできない。
Analytics連携がある。

#### DLMarket

手数料: ~1,000円 14.3% / 1,001円~     9.6%+57円 (販売価格から引く)
購入時の会員登録有無: 必要(twitterなどへのアカウント連携でも購入可能)
引き落とし: 316円~50000円まで選択可能(初期設定は"3000円")。自動振込。
参考URL:
http://www.dlmarket.jp/consignors/
http://www.dlmarket.jp/user_data/commission.php
http://www.dlmarket.jp/user_data/kessai.php


#### DMM

こちらに大体書いてあります。
http://www.dmm.co.jp/dc/doujin/recruitment/index_html/=/ch_navi=circle_recruit/
購入者の決済方法が「クレジットカードのみ」と書いてある項目があり、範囲外なのかもしれませんが、調べるのをやめました。
http://www.dmm.co.jp/mono/top/guide/store_html/=/ch_navi=/#about01-ms


#### メロンブックス

手数料: (一律30% 1000円以上で振込手数料が微変化)
購入時の会員登録有無: 不要
引き落とし(額etc): 保留なし (1000円まで手数料なし) > 公式サイトに記述がなかったのでメールにて問い合わせ
参考URL:
http://www.melonbooks.com/index.php?main_page=static&page=help/entry
http://www.melonbooks.com/index.php?main_page=static&page=help/works#rgst_works
http://www.melonbooks.com/index.php?main_page=static&page=help/works#sales_site

#### とらのあな

手数料: 300/648 1000/1620 1450/2160
購入時の会員登録有無: 必要
引き落とし(額etc): 3000円まで保留繰越
参考URL:
http://www.toranoana.jp/mailorder/guide/map/index.html
https://www.toranoana.jp/dojin/dl.html

#### DLSite

手数料: 300/600 1100/1600 1400/1900
購入時の会員登録有無: 不要
引き落とし(額etc): 3000円まで保留繰越
参考URL:
http://www.dlsite.com/home/circle/invite#gi4
http://www.dlsite.com/home/welcome#


おわりに

で、どのサービスを使うかですが...これから検討します。
販売サイトは多ければいいというわけではなく、管理が大変ですし、ユーザにとっても選ぶのが苦痛になりますので、あまり増やさないように気をつけるつもりです。

一方で、この一覧はまだ十分とは言えないと思うので、これを元に誰かがより良い一覧を作ってくださると嬉しいです。

CodeIgniter3で、GETパラメタによるページネーション

CodeIgniter3で、GETパラメタによるページネーション

paginateの出力(デフォルト設定1/2ページ)

ドキュメントは以下。
http://www.codeigniter.com/userguide3/libraries/pagination.html

でも、結局はCodeIgniterのソース(system/librarys/pagination.php)を読みました。
最初からソースを読んだほうが早かったと思われます。
今回はCodeIgniterが持つレイヤの薄さに助けられました。

要求としては、ごくありきたりなGETを使ったページ指定により、
" http://{PAGE_URL}?page=2 "
のようなURLでページネートを実現することです。

基本の方法

最終的に以下のように設定しました。

application/controllers/任意のコントローラ.php
$count_image_files = $this->Image_file_model->get_count_image_files();

$per_page = 10;
$config = array();
$config['base_url'] = current_url();
$config['total_rows'] = $count_image_files;
$config['per_page'] = $per_page;
$config['use_page_numbers'] = true;
$config['page_query_string'] = true;
$config['query_string_segment'] = "page";
$config['full_tag_open'] = '<span class="pagination">';
$config['full_tag_close'] = '</span>';
$this->pagination->initialize($config);

$params = array();
$params['page'] = $this->input->get('page');
$params['par_page'] = $per_page;
$image_files = $this->Image_file_model->get_image_files($params);

・base_urlはCodeIgniterに取得させます。
・total_rowsが全コンテンツ数で、par_pageが1ページごとのコンテンツ数です。
・use_page_numbersとpage_query_stringが、GETでページネーションする際のキモのようです。
・query_string_segmentにてGETキー文字列を変更します。
  なお、デフォルトのキーはなぜか'per_page'だったりします。
・full_tag_* はドキュメント参照。あまり関係ありません。
・ ページ番号はpagination自身が自分の設定から判断してGETなどから取得するようです。

モデル Image_file_model のメソッドは、それぞれ総数(int)と詳細(array配列)を返すものです。このあたりは解説しなくてもpagination機能との関連を読めば想像がつくと思います。

デフォルト設定ファイルの使用

CodeIgniterアプリケーション(Webサイト)内で共通で使うpagination設定を、設定ファイルに切り出すことができます。
以下のコードの動作を確認しました。

application/config/pagination.php
$per_page = 10;
$config = array();
// $config['base_url'] = current_url();
// $config['total_rows'] = $count_image_files;
$config['per_page'] = $per_page;
$config['use_page_numbers'] = true;
$config['page_query_string'] = true;
$config['query_string_segment'] = "page";
$config['full_tag_open'] = '<span class="pagination">';
$config['full_tag_close'] = '</span>';


デフォルト値を設定したことにより、上で書いたコントローラのコードは、以下のようになりました。
application/controllers/任意のコントローラ.php
$config = array();
$config['base_url'] = current_url();
$config['total_rows'] = $count_image_files;
$this->pagination->initialize($config);

$params = array();
$params['page'] = $this->input->get('page');
$params['page'] = (empty($params['page']) ? 1 : $params['page']);
$params['par_page'] = $this->pagination->per_page;
$image_files = $this->Image_file_model->get_image_files($params);


以上、参考になれば幸いです。

FontForgeでフォントに「文脈依存の置換(conditional features)」を設定する


FontForgeでフォントに「文脈依存の置換(conditional features)」を設定する手順を解説します。
文脈依存の置換は、前の文字によって次の文字を異字体に置き換える機能です。
筆記体(Script)書体にはぜひ必要な機能です。文字間の線を滑らかに繋げるために、前の文字に合わせて字形を変えなければならないからです。
Conditional Feature in my font.
caltにより設定された条件により、aaltによる置換を呼び出すものと思われます。 わたしも本設定を試している途中なので詳細はまだ不明です。
 
なお、本手順中でLookupとSubtableの名称は、FontForgeが自動生成するデフォルトのものを使用しました。
FontForgeは、日本語環境では日本語の設定名を生成します。
今回は、LANG=Cを頭に付けたコマンドライン呼び出しにより、英語ロケールとUIで作業を行いました。
英語のリファレンスを検索しやすい、などの利点もあるので、英語ロケールで作業することをおすすめします。


References:
『チュートリアル (その 7)』による条件付き機能による置換を使用します。英語版『Tutorial #7 (Conditional Features )』も、日本語版が少し古くなっているので、必要に応じて参考にしました。
しかし、この英語版も説明が丁寧ではないので(あるいは英語版も古くなっているので) 、既存の条件付き置換を使用したフォントをFontForgeで開いて設定を読んだりしました。

This sample setting:
letter "b" を前の文字によって "b.high" に置き換えます。
"b.high"には適当なコードポイントを割り当てました。これがテストであるためです。本当はフォント固有の異字体を置くためのコードポイントが定義されているので、その領域を使うべきです。

## Create "b.high" letter




適当なコードポイントに"b.high"を作成します。
デフォルト設定では、一部の文字を覗いてユニコードコードポイントによる"uniXXXX"といった名前が付いています。エディタ上部の名前入力欄か、MenuのElement>GlyphInfo(グリフ情報)から、グリフの名称を"b.high"に変更します。

Setting lookup aalt(Access All Alternates)

Lookup aalt

Menu "Element" > "Font Info"
エレメント > フォント情報

"Lookup"/"GSUB" tab > "Add Lookup" button
 Lookups タブの "add lookup"

Type: "Single Substitution" > Feature: "Access All Alternates" (aalt)
種類:単純置換 > 機能:すべての異字体へのアクセス

どれがaaltなのかわからない場合は、種類:単純置換 > 機能:必須の機能 で出てくる RQDを指定してから、直接"aalt"とタイプして書き換えることができます。

Select GSUB Lookup features.

# Subtable aalt

Selected target aalt lookup.
"Add Subtable" button
Base Glyph Name: "b" / Replacement Glyph Name: "b.high"



aalt setting.

## Setting lookup calt(Contextual Alternates)

# Lookup calt

"Lookup"/"GSUB" tab > "Add Lookup" button
Type: "Contextual Chaining Substitution" > Feature: "Contextual Alternates" (calt)
種類:文脈連鎖依存の置換 > 機能:文脈依存の異字体

GSUB add lookup.

注意:この時、Type: "Contextual Substitution"を選んでもcaltを作成することができますが、
こちらは同じcaltでも、目的である文脈連鎖による異字体の設定ができません。
必ず、Type: "Contextual Chaining Substitution" を選択してください。



# Subtable calt

Edit Cahining Substitution "By Classes" / Dialog Type:"simple"
"クラスで指定" / Dialog Type:"シンプル"

以下は日本語環境でも同じ
Match Classes(1) Name:"hight-after" Glyphs in the class:"v"
Match Classes(2) Name:"letters" Glyphs in the class:"a b c d e f g"
Matching rules based on a list of classes:
"high-after | letters @<'aalt' Access All Alternates in Latin lookup 0> |"


select match type and dialog type.


edit calt features.

# Check setting conditional features.

Menu: Window > New Metric Window
Menu:ウィンドウ > メトリックウィンドウを開く
write: "abvb"

Conditional Feature (Metric Window).

この記事は「FontForge conditional features (calt/aalt)」の日本語版です。


by MichinariNukazawa(ja) @ Project daisy bell(product freefont/font)

ffmpegフォークで、動画から静止画を連続キャプチャ (Ubuntu 15.04)

ソルジャーレギオンのデザインが知りたくなったので、「ガメラ2 レギオン襲来」を静止画キャプチャして観察することにしました。
最初は、VLCのキャプチャ機能で、シーンを前後しつつ撮っていたのですが、フレームを指定して移動する機能がVLCに見つからず、映りの良い静止画を撮るのが難しかったため、ffmpegで一括取得した静止画から良さそうなフレームを抜き出すことにしました。
ソース動画はBD由来、ただし北米版です。
作業環境はUbuntu15.04。

キャプチャした静止画像
(『ガメラ2 レギオン襲来』(1996)より)


簡易まとめ:
・ffmpegフォークのavconvを使う
・'-ss'オプションを先にしても高速化は望めない?
・'-qscale'は必須
・'-qscale'は0でも1でも結果は同じ

avconvを使う

Ubuntuは15.04の時点で、ffmpegフォークでコマンド互換のavconvを採用しています。
手間をかけて外部からffmpegを持ってくるよりも、avconvを使うべきです。

静止画取得のオプション指定

今回のコマンドは以下のようにしました。
 avconv -ss 2250 -t 22 -qscale 1 -f image2 %06d.jpg -i

'-ss'は抜き出し開始位置を指定します。
『'-ss'オプションを'-i'より先に指定すると、開始位置から動画を読むので高速化する』というTIPSがあるとされていますが、今回作業した環境ではその効果が見られませんでした。
(オプション位置を逆にした版を試していないので、もしかしたら効果があったのかもしれませんが。効果がなくても目的は果たせるので確認していません。)

'-t' は抜き出し終点とされていますが、これは抜き出し開始時点からの相対的な経過秒です。
絶対時間ではありません。

'-qscale'は静止画のクオリティを指定するオプションです。指定しないと明らかに品質が落ちます。
指定値の最高レベル1を指定しておきます。今回の環境では、指定値は0でも1でも結果は同じでした。

'-r' はfps固定で動画を抜き出すオプションです。今回は、gif動画を作るわけではないので、固定フレーム24fpsにする必要はありません。よって'-r'オプションは不要です。


備考

・同一ディレクトリ内に多量の画像を置くと、nautilusファイルマネージャの反応が明らかに悪くなるので、一度に静止画キャプチャする時間は短いほうが良い。
・大量のBD(フルHDサイズ)静止画をUbuntuデフォルトの画像ビューアで閲覧するのは辛いので、別途ビューアを用意するべき。 参考:『Ubuntu14.04で使える画像ビューア一覧 』

・今回の動画(平成ガメラ)はBD由来といっても、BD登場前の作品であり、動画はリマスターか何かなので画質には限界がある。
・しかも北米版(G1/G2は同一ディスク内に収録)なので、日本語版よりたぶん少し画質が落ちている。
・後半のソルジャーレギオンの戦闘シーン、紫のフラッシュが炊かれる2~3フレームの箇所が顔アップなので観察しやすそう。
・やっぱり平成ガメラは良い。

なお、スクリーンショットに使った画像の一部は、
「『ガメラ2 レギオン襲来』(1996) 監督:金子修介」
より。

主な参考URL
基本オプション:
http://qiita.com/matoken/items/664e7a7e8f31e8a46a60
qscale:
https://trac.ffmpeg.org/wiki/Encode/MPEG-4
画像ビューア:
Ubuntu14.04で使える画像ビューア一覧 

ComfyUIでXYZ-PlotするワークフローのサンプルとTips(ComfyUI-XYZ-Stitch)

 ComfyUIでAutomatic1111的なXY-Plotをしたいのだが、ComfyUIデフォルト機能には用意されていない。     カスタムノードが必要となるのだが、Webには古いとか何故か動かないとかなXY-Plotパッケージの使ってみた系記事か、githubに上げられた...