Illustratorで宛名印刷

差し込み自体はデータセット機能もあるしスクリプトもあるし、結構どうとでもなるんですが、レイアウトとか文字組とかが大変だったって話。

レイアウト

通常は名前をセンターに持ってきますが、連名があったら?名前が二行になったら?
データセットで頑張るなら行数に応じて表示状態を切り替えて、差し込む枠を切り替える感じでしょうか。。

住所はどうしましょうか。これも二行、下手したら三行も考えられます。
また「原則一行目より下に置きたいけど、入らなければ上にずらして頑張る」とか難しいです。後述する文字組みアキ量設定を使うか、あるいは。。

ただまあここはWordの差し込み印刷などでも調節しませんし、今回はあきらめることにしました。

番地

これはそもそもどう書くと見栄えいいのかよくわかっていないです。
漢数字より算用数字の方が読みやすいじゃないですかーということにして「縦組み中の欧文回転」を使ったので、そこの変換は書かずに済みました。

番地の区切りは横書きならハイフンないし全角マイナスを使えばいいんですが、

  • ハイフン:全角数字と並べると短い。欧文回転オンだと横棒になってしまう。
  • マイナス:文章方向とは関係ない記号なので、縦書きだろうと常に横棒。

でちょっと長い気はするんですが、ダッシュと縦罫で悩んで縦罫にしました。見た感じカーニングと太さがちょっと違うようです。

名前

長さがばらばらなんですよ。4〜5文字が多い気はしますが、3文字や6文字の人もいます。
これも言葉で書くなら「名字と名前は分けたい、短ければ間隔を広くしたり文字を大きくしたり、長ければ上から下まで詰める」みたいな。

今回は以下のように作りました。

  • エリア内文字、均等割り付けにしておく
  • 短い名前はデータセット変換時に姓名間のスペースを増やす
  • 文字組みアキ量設定で「段落先頭 -> 非約物」の最大値を増やす(字間より優先して広げてくれるので、長い時だけここを詰めてくれる)

ここまで来るともう宛名印刷専門の文字組やレイアウト処理を実装するしかないじゃないですかーってなりますね。年賀状ソフトは偉大だ。

おまけ:差し込み

変換はこんな感じに。

Func<string,string> convName = _ => _.Replace(" ", _.Length < 5 ? "  " : " ");
Func<string,string> convAddr = _ => _.Replace('-', '|');
var data = @"";
data.Split('\n')
.Select(_ => _.Split('\t'))
.Select(_ => new Dictionary<string, string>{
	{"name1", convName(_[0])},
	{"name2", convName(_[1])},
	{"post1", _[2].Substring(0, 3)},
	{"post2", _[2].Substring(3)},
	{"address1", convAddr(_[3])},
	{"address2", convAddr(_[4])}
})
.Select(_ => string.Format(
	"<v:sampleDataSet dataSetName=\"{0}\">{1}</v:sampleDataSet>",
	_["name1"],
	string.Join("", _.Select(__ => string.Format("<{0}><p>{1}</p></{0}>", __.Key, __.Value)))
	)
).Dump();

印刷の方法については、おそらくバッチ機能を使うのが一番簡単です。
印刷をするだけのアクションを記録しておいて、アクションパネルのメニューから「バッチ」、ソースをデータセットにすればいけます。同じようにしてPDFや画像として書き出せないかと思いましたが、どうもできない仕様のようです。
http://helpx.adobe.com/jp/illustrator/using/automation-actions.html#WS714a382cdf7d304e7e07d0100196cbc5f-62a7a
直接印刷はなんとなく心配だったので、VisualStudioでイラレのタイプライブラリを読み込み、こんなプログラムでPDFを一括出力しました。

    static void Main()
    {
        var app = new Application();
        var doc = app.ActiveDocument;
        var opts = new PDFSaveOptions();
        opts.PreserveEditability = false;

        foreach (DataSet ds in doc.DataSets)
        {
            ds.Display();
            doc.SaveAs(string.Format(@"R:\nenga\{0}.pdf", ds.Name), opts);
        }
    }

C#で書いてしまいましたが、JSで書けばイラレのメニューから呼び出せますよ。

近頃のDTV関連ツール

なんか作りたいなーと思って、知らなかったものを中心にメモ。

TvRock
公式閉鎖。
タイニー番組ナビゲータ
Java。一般のWeb番組表を参照して、レグザ、DIGA、EDCB、TvRockなどに録画予約。
EDCB
GUIだけWPF、残りはC++。BonDriverを使ったEPG取得〜予約録画までカバー。DLNA鯖にも・・・?
Foltia
PHPOSSの方は更新が止まっているが商用版あり、こっちはがしがしメンテされてる。しょぼカルベース。
Chinachu
Node。色々いまどきな感じですね。Foltiaとの比較してる記事を見つけた(http://unsui.hatenablog.com/entry/2014/08/29/123556)。
epgrec
PHP。epgrecUNAというフォークがあり、epgdumpやrec**と併せてメンテされてる。
TVTest
C++。最近も更新されてるみたい。サイトにあった論文も面白そうです。
Spinel
Linux版誰か作りそうなのにと思ったら、解析結果の公開はダメって明記されてた。
HandBrake
エンコーダ。IntelQSV・OpenCLに対応。x265も吐ける。
L-SMASH
Cで書かれた、MP4コンテナを扱うライブラリ

タイナビの対応機種を見ながら、ソニーのBDレコーダー(たぶんnasneも)はテレビ王国経由で予約できるみたいだから云々とか考えた。

Atlassian Summit 2014を見た

Web上で。
https://summit.atlassian.com/archives/2014/keynotes
日本語のレポートがあまりにないので*1、個人的に興味を持ったものだけでも書いときます。

Bitbucket

https://summit.atlassian.com/archives/2014/keynotes/developer-tools-keynote

レビュー依頼→メールやHipchatで通知

http://youtu.be/tOEjOvItDwE?t=18m37s
Hipchat通知は新しいHipchat Integrationで通知を有効にしてると使える?ユーザーのマッチングはメールアドレス?
この辺はそのうち試してみる。

プルリクタスク

http://youtu.be/tOEjOvItDwE?t=19m27s
プルリクエストについたコメントに対して、タスクというかチェックリストを作れるように。
個人的にはGithubみたいにプルリクの説明文にチェックボックスほしい。

Branch Permission・マージ条件の設定

http://youtu.be/tOEjOvItDwE?t=20m17s
見た感じBBにはこれまで同様pushユーザーの制限等しかないので、Stash限定?

JIRA

https://summit.atlassian.com/archives/2014/keynotes/jira-keynote

バージョンにProgress画面追加

http://youtu.be/HauJFidMxuQ?t=18m11s
そのバージョンで修正されるチケットを、ステータスごとにまとめた画面。
日本語だと「リリース」って名前になってますね。
レビュー通ってないコミットとか、完了してないチケットとかあると警告も。

JIRAファミリーにJIRA Portfolio追加

http://youtu.be/HauJFidMxuQ?t=25m57s
誰がどれだけ稼働できるかと予想工数等を入れると、自動でスケジュールを立ててくれる。
PV http://www.youtube.com/watch?v=MwAXiL74l1A
Webinar http://www.youtube.com/watch?v=849rNIXYx74

AtlassianはJIRAで何でもやってますレポート

http://youtu.be/HauJFidMxuQ?t=41m12s
財務、営業、採用・・・結構汎用してますね。

それを踏まえたプロトタイプの紹介

http://youtu.be/HauJFidMxuQ?t=45m5s
開発・デスク・汎用・HR(採用)・リスク管理といった各分野にプロジェクトタイプ
それぞれ画面構成が違う(今は画面構成やメニューは変えられない)
全てをJIRA上で扱えるように

Hipchat

https://summit.atlassian.com/archives/2014/keynotes/confluence-and-hipchat-keynote

今年の更新:ビデオチャット、HipChat Server、価格体系の変更

http://youtu.be/mz0MY3V58J8?t=9m12s
無料プランの人数制限がなくなったのはへーしゃには朗報でした。
過去ログに制限があるけども、まあそんなに後まで残したいなら別の形でまとめるほうがいいかなー。

最近の更新:外部サービスとの連携

http://youtu.be/mz0MY3V58J8?t=11m49s
BitbucketやConfluenceとの連携が刷新されたようで、とりあえずBitbucket連携は試してみた。
http://qiita.com/unarist/items/52234767a43736de31f1
自作アドインはOAuthで簡単に実装できそうなのでそのうち云々。

Mac版クライアントのデザイン変更

http://youtu.be/mz0MY3V58J8?t=13m33s
http://japan.blogs.atlassian.com/2014/09/get-know-new-hipchat/
まあWindowsユーザーなので・・・。

Hipchat loves iOS8

http://youtu.be/mz0MY3V58J8?t=16m25s
起動の高速化、共有エクステンション、通知センターウィジェット、通知にその場で返信。
後ろ二つはiPadだとわからない・・・。
tre!due!uno!.....bang!!!

Confluence

http://youtu.be/mz0MY3V58J8?t=22m33s

  • インラインコメント
  • 画像挿入の改良(自動リサイズ、ビューワー強化、任意の点へのコメント)
  • ロードマップ図の作成・挿入
  • リアルタイム共同編集→来年?

その他

Becoming a Git Master(Tips集)
https://summit.atlassian.com/archives/2014/software-teams/becoming-a-git-master
Do Agile Right
https://summit.atlassian.com/archives/2014/collaboration-teams/do-agile-right-lessons-learned-from-an-atlassian-product-manager

他にも面白そうなセッションがあるけれど、まだ読めてない。というかDo Agile Rightが結構ボリュームあって途中でやめた。。

*1:公式ブログのキーノート紹介ぐらい? http://japan.blogs.atlassian.com/2014/09/summit-2014-announcements-keynote/

sysprepとかHCKとか調べた

いやまあ最初はskiprearmとか調べてたんですけどね。。

Windows 7 の再初期化数について | SE の雑記
http://engineermemo.wordpress.com/2010/12/31/windows-7-%E3%81%AE%E5%86%8D%E5%88%9D%E6%9C%9F%E5%8C%96%E6%95%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
Windows TIPS:sysprepで環境複製用のマスタ・イメージを作成する(Windows 7/8編) - @IT
http://www.atmarkit.co.jp/ait/articles/1307/12/news062.html
OEM Windows の展開およびイメージングのチュートリアル
http://technet.microsoft.com/ja-jp/library/dn621895.aspx
Windows Hardware Certification Kit User's Guide
http://msdn.microsoft.com/library/windows/hardware/jj124227.aspx

一通りチュートリアル読んで、流れはつかめたかなというところ。VMで遊んでみようかな。

ことあるごとにWindowsを再インストールしていた時期があって、SP+メーカーを愛用していたのが懐かしいですね。そうでなくとも集中管理とかカスタムイメージ作って展開とかにはどこか憧れがあって、そういうお手伝いとかしたいものですが、今のところそんな予定もなく。
  
そんなことより、このページにOEMライセンス認証ガイド?へのリンクがあるんですが、
http://technet.microsoft.com/ja-jp/library/dn621894.aspx
OEMパートナー向けのログイン方法の中に、社員・パートナー向けのMSドメインアカウントというのがありまして。
黒基調だしスマートカード対応だしで、関係者以外立ち入り禁止みたいなカッコよさを感じました。

UbuntuServerでBINDを立てた

見よう見まねでやっただけでこれといって変わったことしてないので参考リンクだけ。
https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-ubuntu-14-04
http://www.eis.co.jp/engineers-notes/bind9_src_build_2
http://www.atmarkit.co.jp/ait/articles/0101/12/news003.html

HATEOSおもしろそう

単純なRESTfulだと、どこに何があって、何をするにはどこを見るべきかをクライアントが知っている必要がある。
だけどネットサーフィンなら、何があるか何ができるかは行けばわかるよね。というのをAPIで再現した感じ。

この項目は書きかけの項目です。加筆、訂正などをする時間を求めています。

link

リソース間の関係をサーバー側から示す。ある状態でのみ有効な遷移なんかも表せる。

<link href="http://..." method="get/post/..." rel="元リソースとの関係" type="hrefが示すリソースのMediaType" />

今何ができるかを示すという点ではOPTIONSメソッドも重要。編集不可フラグが立ったらGET以外禁止するとか。

MediaType

そのリソースが何を表すのかを示せるように。application/vnd.xxxが自由に使える。
使いどころはリクエストのAccept、レスポンスのContent-Type、linkのtype、など。

<link href="http://..." rel="Father" type="application/vnd.hogehoge.user" />
<link href="http://..." rel="Mother" type="application/vnd.hogehoge.user" />
<link href="http://..." rel="Family" type="application/vnd.hogehoge.family" />

Tips

  • APIのバージョニングはどうするの?
    • リソースのURIを分散させたくないから、/v1/user/みたいにURIに含めるのはないよねー。
    • MediaTypeに含める(application/vnd.hogehoge.user-v1)とか、MediaTypeの属性にする(application/vnd.hogehoge.user; v=1)とか。

LESSでサイト全体のCSS書いてる今の私

仕事でサイト全体のCSS組むことが二回ほどあったので、今の私の状況をメモっておく。っていうかこの記事に触発されて。
不特定多数の人が更新する大規模サイトに必要な CSS 設計の思想
これもQiitaに書いたほうが注目されるのでは・・・って一瞬考えたものの、よくわからない文章になってきたからもうこっちでいいや。

LESS

疑似セレクタとか書くのがすごく楽になりました。たぶん可読性も上がってる。
全体で使うmixinは定型デザインとか画像置換とかで少しだけ。ただ「CSSで○○するときの定型句」みたいなのをmixinにしてしまうと、使う側で上書きしようとした時にどの方法の定型句だっけ・・・となるので実は面倒だったり。カスタム部分だけ書けばいいってこと自体は悪くないのだけど。
それよりも、あるclassの中で定義してすぐ使うみたいなのが便利です。グローバルスコープ汚さないし、すぐそこに実装あるから読むのも簡単だし。変数でもこれができるので、複数のプロパティに同じ値を設定したい時とか便利です。
色違いを作るときなど、class定義するmixinも便利です。ループと配列関数と組み合わせたらなかなか楽しいことになりましたが、あまりやると他の人から苦情が来そうです。再帰とガードでforを書くってのがそもそも難解かもしれない。

LESSの話はおしまい。

せまんてぃくす

HTML5の豊富なタグは楽しそうですが、未だによくわかっていません。世の中そんなにわかりやすい構造のサイトばかりでもないし。
それよりulを使いすぎかなと思う今日この頃。

idかclassかタグか

classにはそれをどう表示するかというより、それが何であるかを書きたい人です。そういうわけでBootstrapはあまり好きじゃない。
そういえばパフォーマンス気にする割にdata属性大好きです。
以下戦歴。

1戦目

ページ内に複数現れないものはほぼ全てid振る。スタイルはcssで決めるものだという意識が強かったので、class組み合わせたりとかほとんど考えなかった。
欠点:idが長い。

2戦目

classとタグが半々?長いid考えるの面倒になったりせまんてぃっくに興味を持ち始めたりしてたので。といってもHTML5のあれこれは未だによくわかってないので使ってない。
欠点:classの命名が適当でつらかった。セレクタが深くなって「パフォーマンス気になる病」が発症してた。

ページ別CSS

共通classと個別classがあると混乱するからって、なんたら-かんたらの-ほげほげみたいな長い名前付けてましたが、ちょっとつらい。主にHTML側がつらい。
共通と個別をわけるならむしろprefix付けるのがいいかなーって考えてます。g-hogehogeとか。

ベンダープレフィックス

なまじ、提供者が泥臭いハックで対応してしまうがために、利用者と、利用者を食い物にしている不自由コンピューターの売人がつけあがるのだ。つけあがらせてはならぬ。断じて妥協の姿勢を見せてはならない。

http://cpplover.blogspot.jp/2014/04/3_30.html

とは言えないので。ただターゲット環境を絞れればだいぶプレフィックスなしでいけます。いい時代ですね。
あとはAutoprefixerでも使うといいと思います。mixinで対応していたBootstrapも、v3.2.0からはこっちを推奨するようになってました。

pxかemかremか

今のところemを使うことが多いです。ただmarginとかをemで指定していると、font-size変えたことでその周りのmarginが他とずれてぐぬぬ、というケースがあったのでremに手を出そうか考え中。