アイドルマスターシンデレラガールズ ドット絵 2017新年Ver

あけましておめでとうございます。
今年も当ブログをよろしくお願いいたします。

今年は2017年ということで、
昨年描いたデレマスドット絵をアレンジしてみました。
2017年にちなんで、17の形になっています。

【アイドルマスターシンデレラガールズ】「アイドルマスターシンデレラガールズ ドット絵 2017新年Ver」イラスト/yu3mars [pixiv]

デレマスのドット絵・ドット絵ができるまで

この記事は KMCお絵かき アドベントカレンダー 9日目の記事です。

www.adventar.org

8日目の記事は、id:kebusKMC さんの 【KMCお絵かきAdventCalendar】 楽園の守り手たる巫女 - kebusKMC’s diary でした。

kebuskmc.hatenablog.com

今日のテーマ

アイドルマスターシンデレラガールズドット絵を描きました。

【アイドルマスターシンデレラガールズ】「アイドルマスターシンデレラガールズ ドット絵」イラスト/yu3mars [pixiv]

例によってポケモンGBA風。
シンデレラプロジェクトのアイドル+木村夏樹です。
衣装はアニメ2nd OP「Shine!!」のクリスタルナイトパーティです。

これだけで終わってもよいのですが、せっかくなので、ドット絵ができるまでを紹介します。

制作環境

OS Windows 10
使用ツール(ドット絵制作) EDGE
使用ツール(ドット絵加工) ImageMagick

まず、EDGEというお絵かきソフトでキャラクターを一人一人描きます。
描き終わったら、ImageMagickという画像編集ソフトを使い、公開に適した形に整えます。

EDGE

ドット絵を描くのに便利なソフトです。

takabosoft.com

今回は、衣装と顔は全キャラで使いまわしました。
髪型と色(一部キャラは目と肌の色も)を変えることで、キャラクターの個性を表現しています。

1ドット変えるだけで、大きく印象が変わります。
そのため、試行錯誤して一番しっくりくる形を見つけます。

f:id:yu3mars:20161208090457p:plain

スクリーンショットです。

ImageMagick

画像の連結や拡大に便利なソフトです。

www.imagemagick.org

複数のドット絵をまとめて一枚の画像にすると、公開の時に取り扱いが楽になります。
小さいドット絵をそのままアップロードすると、ぼやけて拡大表示されてしまう場合があるので、 拡大してからアップロードしています。

今回ドット絵を加工する際に利用したコマンドを紹介します。
シェルあるいはコマンドプロンプトから利用できます。

縦に結合 (例は3つの画像を連結)

convert -append [入力ファイル1] [入力ファイル2] [入力ファイル3] [出力ファイル]
convert -append uzuki.gif rin.gif mio.gif newGenerations_tate.gif

f:id:yu3mars:20161208233426g:plain

横に結合 (例は3つの画像を連結)

convert +append [入力ファイル1] [入力ファイル2] [入力ファイル3] [出力ファイル]
convert +append uzuki.gif rin.gif mio.gif newGenerations_yoko.gif

f:id:yu3mars:20161208233952g:plain

ぼやけさせずに拡大する (例は2倍に拡大)

convert -filter box -resize [倍率]% [入力ファイル] [出力ファイル]
convert -filter box -resize 200% newGenerations.gif newGenerations_zoom.gif

f:id:yu3mars:20161208233957g:plain

ImageMagick 7 以降ではconvertコマンドはmagickに名称変更されているので注意してください。

ImageMagick に関する技術的情報として、以下のサイトが参考になるかもしれません。

ImageMagick - TeX Wiki

[Resolved] convert.exe missing from 7.0.1-Q16? - ImageMagick

終わりに

ImageMagickの利用はプログラマっぽい感じですが、慣れると怖くないです(エラーが出ると戸惑いますが…)。
イラスト制作方法は、人それぞれだと思いますが、何かの参考になれば幸いです。 皆さんも、ドット絵イラストレータを始めてはいかがでしょうか?

明日のKMCアドベントカレンダーは、KapTamBnS さんです。

アニメ系新番組や単発番組の情報をカレンダーにするプログラム「しょぼかるフィルター」を作った

この記事は KMC アドベントカレンダー 7日目の記事です。

www.adventar.org

6日目の記事は、id:dnek さんの 運ゲー排除マインスイーパーをiOSにも対応させた話とか - dnekblog でした。

dnek.hatenablog.com

今日のテーマ

新番組や単発番組の情報をカレンダーにするプログラムを書きました。
しょぼかるフィルター」と呼んでいます。

ソースコードGitHubで公開しています。
手元で試してみたい、自分の地域の情報を出力したい、という方は、readmeを参考にして動かしてみてください。 github.com

こちらで、KMCの所在地である京都向けの.icsファイルを試験公開中です。
当面は運用を続ける予定ですが、予告なく終了する可能性があります。
あらかじめご了承ください。

以下、何をやったのかを簡単に紹介します。

しょぼいカレンダーとは

cal.syoboi.jp

アニメ関連番組の番組表。
「しょぼい」という名前とは裏腹に高機能。

例えば、rssbuilder機能というものがあり、.icsファイルを生成できます。
今回はこの機能を利用します。

http://cal.syoboi.jp/util/rssbuilder

しょぼいカレンダーの不満点

デフォルトで出力される.icsでは、番組数が多すぎるため、欲しい情報が埋没します。
私は、録画予約を失敗しないように、新番組や単発番組の情報が欲しいと考えました。
継続して毎週放送されている番組の情報はいらないので、出てこないようにしたいです。

f:id:yu3mars:20161207013209p:plain デフォルトの.icsをGoogleカレンダーに読み込ませたときの様子です。
情報が多すぎます……。

作ったプログラムでやっていること

しょぼいカレンダーが発行する.icsを読み込んでフィルタリングします。
"【新】"、"【注】"、"【!】"が含まれるものだけを含んだ.icsを出力します。
新番組や単発番組の情報を失うことなく、不要な情報の大部分を除去することができます。
放送時間が変更された番組も引っかかってしまいますが、数が少ないので目を瞑ることにします。
実装が軽いことはよいことです。

f:id:yu3mars:20161207013225p:plain フィルタリングした後の.icsをGoogleカレンダーに読み込ませたときの様子です。
だいぶスッキリしました。

実運用では、Linuxサーバー上でcronを使って定期実行しています。
webサーバの公開ディレクトリに.icsを出力することで、カレンダーの配信を実現しています。

終わりに

自分でプログラムを書くことで、新番組や単発番組の情報をカレンダーにすることができました。
もし、これよりいい方法があるという方は、ぜひお知らせください。
プルリクも歓迎です。

明日のKMCアドベントカレンダーは、id:asRagiさんです。

はてなブログ5周年ありがとうキャンペーンお題第1弾「はてなブロガーに5つの質問」

はてなブログ5周年ありがとうキャンペーンお題第1弾「はてなブロガーに5つの質問」

1.はてなブログを始めたきっかけは何ですか?

自分のやってきたことを簡単に見せられる場が欲しかった。

2.ブログ名の由来を教えて!

デフォルトを英語の文法的に正しくした。

3.自分のブログで一番オススメの記事

yu3mars.hatenablog.com

4.はてなブログを書いていて良かったこと・気づいたこと

アクセスログを見ると読者さんの関心を知ることができて面白い。

5.はてなブログに一言

Markdown最高!

http://blog.hatena.ne.jp/-/campaign/hatenablog-5th-anniversary

AOJ 2717 Where is the Boundary

問題

Where is the Boundary | Aizu Online Judge

直線状にn個の県が並んだ国がある。
m種類の分類法があり、これによって各県は、'E'または'W'に分類することができる。
今、この国を'E'と'W'に分ける境界を決める。
m種類の分類法に対する誤差が最小になるような境界位置を求めよ。

解法

全探索する。
境界線を決めたとき、境界の左側にあるEの数と、境界の右側にあるWの数の和を求める。
この和が最小になる境界線が答えとなる。

ソースコード(C#)

using System;
using System.Collections.Generic;
using System.Linq;

namespace _2717
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] nm = Console.ReadLine().Split().Select(int.Parse).ToArray();
            int n = nm[0];
            int m = nm[1];
            string[] d = new string[m];
            for (int i = 0; i < m; i++)
            {
                d[i] = Console.ReadLine();
            }

            int[,] e = new int[m, n + 1];
            int[,] w = new int[m, n + 1];
            for (int y = 0; y < m; y++)
            {
                for (int x = 0; x < n; x++)
                {
                    e[y, x + 1] = e[y, x];
                    if (d[y][x] == 'E') e[y, x + 1]++;
                }
            }
            for (int y = 0; y < m; y++)
            {
                for (int x = n - 1; x >= 0; x--)
                {
                    w[y, x] = w[y, x + 1];
                    if (d[y][x] == 'W') w[y, x]++;
                }
            }
            int ans = int.MaxValue;
            int bound = 0;

            for (int x = 0; x < n + 1; x++)
            {
                int tmp = 0;
                for (int y = 0; y < m; y++)
                {
                    tmp += e[y, x] + w[y, x];
                }
                if (tmp < ans)
                {
                    ans = tmp;
                    bound = x;
                }
            }

            Console.WriteLine("{0} {1}", bound, bound + 1);
        }
    }
}

ISUCON6本戦で昨年来の夢を叶えた #isucon

ISUCON6本戦で昨年来の夢が叶いました。
これです。

かっこいいですからね。

ISUCONとは

いい感じスピードアップコンテスト。 webサービスが与えられるので頑張って高速化します。 詳しくは公式サイトを読んでください。

isucon.net

今回のお題は、pixiv Sketch。

チーム

チーム「:innocent:」として参加しました。
順位表での表示は😇になっていました。まさか本当に置換されるとは思っていませんでした。
運営の方がわざわざ対応してくださいました。ありがとうございました。
画像は1位を獲得した瞬間です。

f:id:yu3mars:20161027131152p:plain

私を本選に連れて行ってくれた素敵なチームメイトの記事はこちら。

utgwkk.hateblo.jp

www.wass80.xyz

やったこと

  • rack-lineprofileを使うもログが残らず失敗
  • Azureでポートを開く
  • nginxでHTTP2対応
  • nginxで静的ファイル配信を試みるも失敗
  • Redisでキャッシュを試みるも型エラーを起こし失敗
  • DBの構成をSlackに張り付けて眺める
  • N+1問題を解消するためクエリを改造する

結果

23位 3177点
当初の目標である正の点数を取ることに成功しました。
初期点数 3907点 を一度も超えることができなくて残念……

前日の様子

  • nginx実践入門を購入
  • ヒカリエ侵入訓練
  • 当日集合時間決定ミーティング
  • 例によってruby実装をベースに頑張ることを確認

当日の様子

  • 8:50に到着。名札を獲得。会場は半分くらい席が埋まっていた。
  • 会場のレゴを撮影する。
  • 持参したルービックキューブで遊ぶ。
  • 競技開始。PVにざわつく。
  • 参加チームがことごとくデプロイに失敗する。4コア*5台でAzureの制限に引っかかった?
  • 2コア*5台に構成が変更される。
  • 高速にデプロイ。ベンチを回し暫定1位を獲得(最初にベンチを回したので自明)。
  • nginxの設定をする。
  • アプリをDockerから出すことを検討するも、Docker爆破コストを考え、そのままにする判断をする(結果的には引き摺り下ろしたほうが良かった)。
  • rack-lineprofileを使うもログが残らず、眼力でボトルネックを調査し始める。
  • 方針が立たなさ過ぎてDBの構成をSlackに張り付けて眺める。
  • get_ほげほげ がN+1問題を引き起こしていることが分かっていたので、改善に取り組む。点数が初期実装を超えられなくて謎。
  • nginxで静的ファイル配信を試みるもfail。原因究明に失敗したため、切り戻し。
  • Redisでキャッシュを試みるも、キャッシュが返す型がキャッシュでないものと変わっており、型エラーを起こしfail。終了直前まで粘るも解決できず。
  • 絶対に正の点数を取りたかったので終了10分前に切り戻し。再起動実験は時間がないのでしなかった。
  • 😇 ←この顔になった。
  • 懇親会で他チームの方針を聞いて知見を深め、交流した。

感想

自分の実力不足を改めて痛感しました。
次回があれば、本選で名札を獲得して、有意な貢献ができるようになりたい。
Webサービスに関して、ある程度全体の雰囲気が分かるようになった(気がする)のは収穫。
運営の皆様、参加者の皆様、そしてチームメイトの2人に感謝です。

おまけ

Iikanji Syokuba-sagasU CONtest 個人的に開催中です。 いい感じの職場情報があればお知らせください。

シンフォギア、ラブライブ、ごちうさのドット絵

シンフォギア、ラブライブごちうさドット絵を描いてpixivに上げました。
いずれもポケモンGBA風です。

【戦姫絶唱シンフォギア】「戦姫絶唱シンフォギア ドット絵」イラスト/yu3mars [pixiv]

【ラブライブ!】「ラブライブ! ドット絵」イラスト/yu3mars [pixiv]

【ご注文はうさぎですか?】「ご注文はうさぎですか? ドット絵」イラスト/yu3mars [pixiv]