mirenn所感

お絵かきとプログラミング

最近YouTubeしか見てない

 就職活動が終わったような終わってないような、という状況です。

 そんなことより最近朝から晩まで加藤純一さんの動画を見ています。めちゃくちゃ面白いです。留年決まったときめちゃくちゃ私気分しんどかったんですが、そんななか加藤純一さんの動画を見ることで元気が出ました内定が出ました身長が伸びましたモテるようになりました。ニコ生☆音楽王オヌヌメ

 そんなこんなで加藤純一やオーイシマサヨシの写真の模写を最近してます。

f:id:mirenn:20180612001355j:plain

オトモダチフィルムのオーイシマサヨシ



f:id:mirenn:20180612001246p:plain

夏色

 なかなか似ないですが描いてて楽しいです。次はハナちゃんなどを描こうと思います。ネエハナチャン

就活日記

 就活のあれこれを適宜記録しようと思います。これを読む人にとって就活を始めるときの参考になれば良いと思ったのと、私自身が今現在の自分の状況を客観的に確認し直すために書き起こしています。

 ちなみに、私は院進予定でしたが最後の卒業試験的な単位を二月に落として留年を決めてしまったので、慌てて就活に切り替えて準備をしている人間です。インターンシップなどには一切参加したことがありません。

 

 選考解禁前のお話

 就職活動には選考解禁日というのがあって、2018年は3月1日でした。

 それまではマイナビリクナビといったサイトにプレエントリーというのを行います。このプレエントリ―というのは、企業によって仕組みが異なります。ある企業では、マイナビでプレエントリーしておくと選考解禁日の日に「選考解禁しましたうちの企業のWebページでエントリーしてください!」といった主旨のメールが届くだけ。ある企業では、プレエントリーした情報を元にエントリーしてくれる。といった感じでバラバラです。ちなみに、選考解禁後はもうほとんどマイナビリクナビは使いません。結局企業ごとにエントリーし直すので、プレエントリーって結局なんだったの?というのが実感です。

 マイナビリクナビどっち使ったらいいの? と疑問に思うかもしれません。研究室の先輩曰く、基本的にマイナビを使ってマイナビにない企業をリクナビでプレエントリーすればいいそうです。プレエントリーはプレエントリーでしかないので興味のある企業をポチポチたくさんプレエントリーしておいたらいいと思います。

 

 選考解禁!

 繰り返しになりますが、就職の選考解禁は2019年度卒では2018年3月1日でした。就活解禁になると何が変わるのかというと、エントリーの受付などが始まります。なので、三月一日になる瞬間、つまり午前零時になった瞬間我さきにとエントリー合戦が始まるようです。ですが、それをやらなければいけないというわけではなく普通に私はそのとき寝ていました。解禁日はそこまで焦らなくても順次エントリーしていけばオッケーです。エントリーというのは、自分の経歴や住所やメールアドレスといったものを企業ごとに登録することです。

 エントリーするときの注意として、メールアドレスは大学のものを登録するのがベター。私は知らなかったので自分の普段のアドレスを打ち込んでいましたが、大学のアドレスを用いていたらちゃんとどこの所属かわかるからです。

 選考解禁日のエントリー自体についてはそれほど焦らなくても良いのですが、選考解禁日がこの日ではない企業については事前によく調べておく必要があります。というのもこの就活の一斉解禁は、経団連に加盟している企業のみのお話であってこれに従っていない企業はこの時期より先にすでに学生の選考を始めているからです。例えば、外資系企業やベンチャー企業その他中小企業などがそれにあたります。私もよくよく調べたら志望している企業がとっくに選考始めていたりしていたので気を付けましょう。

 

3月22日

 とかのんびり書いてる場合じゃなくってきた。

  就活やばいぞ? エントリーシートが書けない。全く進まない。めちゃくちゃ遅い。他の人より段違いに遅い。どうやら私は文章を生み出すのが苦手らしい。最近自分の苦手な作業を自覚し始めているのだけど、就職活動に必要なスキルがことごとくなさそう。時間を守るとか、コミュニケーション能力とか。留年を機に自分について振り返ったとき、こういったことに気づき始めました。

 留年のきっかけは、最後の試験に集中ができなかったからでした。そこから、自分がASDADHDと言われるいわゆる大人の発達障害に分類される人間じゃないかと疑い始めました。ASDADHDを高確率で併発するらしいので、自分に当てはまると思ったそれら大人の発達障害の特徴をごっちゃにして並べると、

整理整頓ができない

物忘れがある。人の名前が覚えられない

予定を立てるのが下手

興味のあることしかやらない、それ以外はとことんしないしできない

うつっぽい

コミュニケーションが下手

などがあります。上記の性質は、自分に当てはまりすぎてびっくりしました。もちろんこういった症状は程度の問題で酷さの違いも千差万別ではありますが、私の場合ASDADHDを持っていると考えたらすごいしっくりくるんですよ。

 物忘れにしろ人とのコミュニケーション下手にしろ私は練習したりちゃんと気を付ければそのうちなんとかなると今まで思っていたんですが、成長しきった現在からよくよく振り返ってみるとそれらはずっと苦手なままで改善はあまりしていないみたいで、一生ものの性質のようなのです……あっそうかーこれがASDADHDかーとなりました。色々苦手なことを思い返しては、努力でなんとかできるもんじゃなかったんやな……と思うと納得はしにくいですがストンと理解できました。苦手なものは苦手。

 そして、エントリーシートが書けないという絶賛今悩んでいることも、幼少時に日記が全然書けなかった体験とリンクして、ああこれも練習しても改善されない苦手なままのタイプの技能なのか、と辛い気持ちになっていきます。

 このままずるずる行くと、エントリーシートいっぱいだそうと思ったのにギリギリを攻めていくスタイルになりそうで、この日記は就活の良い手本にはできなさそう。悪い見本にはなりそう。エントリーシート提出数は結局6個くらいになりそうで、普通は十以上は出すのにとか考えてしまう……。

 まあ自分がASDADHDっぽいぞっていうことを発見したところで、就活に努力をし続けなければいけない点に変わりないし、うつっぽい思考に走ってもいいことないし、なので気楽にいこうと思っています。

大学の卒業に失敗した

 四回生の冬、2月8日。

 卒業試験の再試に落ち最後の単位を取り損ねて、留年が決まってしまった。大学院に進学する予定で、夏に院試に合格していたのだけれど関係なくなってしまいました。両親に謝りました。

 一浪一留

 今後どうするかと考えた時真っ先に思い浮かんでいたのが就職だったので、就職活動を始めました。就職の選考解禁が三月解禁というのはつい二、三日前のことです。

 卒業試験を落ちた後になってようやく卒業失敗後の大変さを思い知ったわけですが、そういった自分の想像力の無さを思うにつけ私は愚かです。

 どうして落ちてしまったんだと思わずにはいられません。しかしまた同時に、私が落ちたのは偶然のアクシデントではないことも嫌々ながら承知してしまいます。

 

 落ちた理由として私が考える最も大きなものの1つは、卒業試験の近くでも趣味の絵を描いていたことです。私は卒業試験の勉強にそれなりに時間を費やした気になっていました。しかし、やってもやっても卒業試験の問題集の答えが頭に入ってこなかったのは次の漫画や次の絵に早くとりかかりたいという気持ちが強かったからだと思っています。もちろん、試験勉強に単純に費やした時間も少なかったのだとは思います。

 

 どうしてそんな阿保なことをしていたんだと、今の私なら言えます。漫画家になる夢を捨てた今の私なら。

 私はいつも自分にストレスを感じていました。この歳になってこんな絵を描いているようじゃ漫画家にはなれない、もっとうまくもっと面白く描けなきゃ……。私は一片の曇りもなく漫画のことが大好きでした、これは子供の頃からずっとでもはや趣味とかそんな生易しいものじゃなくて呪いです。ちょっと先のことが見えなくなるくらい好きでした。冷静に考えれば絵を描きながら大学院で研究を続けるというのが最善であり、そのために絶対試験に受かるということを考えるべきで一旦筆を置いて卒業試験の勉強をすればちょうど良かったのですが――。

 卒業試験に落ちて、そして私はここで漫画家になる夢を捨てました。漫画関係のものをしまいこみ別れを告げました。

  アイデアをメモしていた落書き帳や描きかけの原稿や鉛筆や好きな漫画や背景集やデッサン人形。それらをしまいました。量としてはたいした量ではなかったんですが、いつもいつも私の頭の片隅にあった漫画関連のものたちをごっそりなくすと部屋が寂しくなりました。

 そして肩の荷がおりた気がしました。少しだけ楽になった気がします。こういうときにふっと夢を捨てれるのでしょう。(といいつつ諦めるという表現の代わりに捨てるという表現を使ってしまうのは、いつかまた拾う気がしてならないからなのですが、それは絶対に遠い遠い遠い先)

 

 卒業試験は精神的にしんどかったです。ひるがえってそれと比べると、研究はぼちぼちこなせていたと思います。小さなポカとその軌道修正はそれなりに覚えはありますが、卒業失敗!というほどの大ポカはやっていなかったと思います。それはやっていた研究が画像処理だったので結果が目で見てわかる形として出力される部分が絵描きの性にあっていたのと、やらせた頂いた課題が私の関心のある領域だったこと、そしてまがりなりにもパソコンサークルに所属していてプログラミング自体好きだったからです。色々工夫して出した結果画像を共同研究先の方に褒めていただいたときは、よっしゃ!と思いましたね。もちろん試行錯誤してるときはとても辛かった……。

 

 卒業失敗して迷惑をかけたりして、反省することばかりです。

 一浪一留になったし、良い区切りだと思って夢も捨てました。

 就職活動でベストを尽くしたいと思っています。

 

追記

 このとき落ちた理由を絵の面に強く関連付けて書きなぐりましたが、また後々指摘されたり自分でさらに考え直してみると、単純に性格的に切り替えがうまくないことやメンタル面での弱さなどが主因という気もしています。

子供の秘密[漫画]

漫画:子供の秘密

 

 

 

f:id:mirenn:20180129021018j:plain

f:id:mirenn:20180129021022j:plain

f:id:mirenn:20180129021031j:plain

f:id:mirenn:20180129021036j:plain

f:id:mirenn:20180129021041j:plain

 

 

 画力を現在進行系で高めているものの全然足りないですね。努力は人を裏切らない、そう私の場合、如実に努力不足の虚無が画面を埋めています。精進します。

 

 さて、もうすぐ学部卒業です。そこで少しだけ今までのことを振り返ってみます。私の所属しているサークルについて。

 私はパソコンサークルに所属しています(今期の会費をうっかり払いそこねたけどお布施継続するつもり……)。そこには、面白い人たちがいました。

 私はまあ社会不適合な人間でコミュ力に難ありなんですが、サークルでは楽しくやってました。楽しくやっていけたのはみんなが優しかったから、と書くとなんともウェイっぽいし嘘っぽさもある。サークルで楽しくやっていけた理由は、一芸に秀でた人たちが集まっていたからでしょうか。見ているだけでも楽しい人たちがいたから。

 あの環境に感謝しています。

 このまま書いていくとサークルのプロパガンダになってしまうので、ここらでやめときましょう。感傷に浸るのはまだ早い。私の中ではまだ何かが終わったわけでもなく、道の途中ですからね。

 

 最後に、私がなにかネットに上げたときに反応をくれるすべての人に感謝。すべてっていってもいいねとかの総数は多分指で数えれるくらいなので、いいねしたこと一度でもあるわって心当たりのある人は私が猛烈に感謝していると思って間違いない多分。さらに複数作品いいねしていたら、……感謝……今度家に突撃したいね!酒飲みに行って良い!?酒買っていくから!?!?

 ……。

 今後ももろもろ頑張っていきたい……ホントに心から

六畳間の話[漫画]

六畳間の話[漫画]

 

f:id:mirenn:20171221214527j:plain

f:id:mirenn:20171221214531j:plain

f:id:mirenn:20171221214532j:plain

f:id:mirenn:20171221214534j:plain

 最近世の中に面白い漫画が増えすぎていませんか。

 私は週に一回は確実に何かの漫画に感動しています。それは一読者としては嬉しいことでもあり、腹立たしいことでもあります。

 世の中の漫画家のレベル高すぎませんか? 気が狂いそうなんですけど!!! 画力高すぎィ!

 

 今日はクリスマス三日前だか四日前なのでクリスマスの漫画もこれから描こうと思っているのだけれど、その前に卒論を書かなければいけない。……にゃーん。ところで卒論って書かなきゃいけないんですか!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?

放課後リング[漫画]

放課後リング[漫画]

 

 

 

f:id:mirenn:20171123125245j:plain

f:id:mirenn:20171123125255j:plain

f:id:mirenn:20171123125307j:plain

f:id:mirenn:20171123125318j:plain

f:id:mirenn:20171123125326j:plain

 NFに間に合わせようと思って2p目の途中から爆速で描き始めた漫画になります。この漫画の1ページの1コマ目にはとても時間をかけていて、本当は1コマ目と同じくらいすべてのコマに時間を注いであげたかったのですが現実的に時間が足りなかったので途中から背景が消えてなくなってしまいました。後半は特に時間をかけれなかったけれど、どのコマも同等に情熱を注ぎました。少しでも面白いと思っていただけたならこれ幸いです。

 この漫画を描き終わって気づいたのですがこれ5ページなので1枚絵を展示している人の場合の5倍スペース取るし、よく考えたら今回なにも手伝っていないのに出品だけするのはあまりに図々しすぎる~と思い直してネットの海に放流することにしました。

 今回のお話は岸虎次郎の「オトメの帝国」リスペクト、……百合ですかね。オトメの帝国はべらぼうに絵がうまく、あんな圧倒的画力欲しい。

 

 

Bing Image Search API v7で画像をちょっと保存する方法

f:id:mirenn:20171111205408p:plain
やりたいことがあってけものフレンズの画像を収集することに決めて、それにBing Image Searchを用いることにしました。しかしいざ使おうとすると古いバージョン(v5)がなくてv7しか見当たらずしょうがないからあまり情報がない最新バージョンをやることに。
v5だったら巷にコードがいっぱい落ちていてそのまま使えたんですが、v7は最近も最近だから記事がない。のでv7で、指定した検索ワードで検索された画像を手元に保存するコードを書きました。
 以下全コード。実行環境はpython3.6、windowsです。

# -*- coding: utf-8 -*-
import http.client
import urllib.parse
import requests
import json
import os

# Replace the subscriptionKey string value with your valid subscription key.
subscriptionKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Verify the endpoint URI.  At this writing, only one endpoint is used for Bing
# search APIs.  In the future, regional endpoints may be available.  If you
# encounter unexpected authorization errors, double-check this value against
# the endpoint for your Bing search instance in your Azure dashboard.
host = "api.cognitive.microsoft.com"
path = "/bing/v7.0/images/search"

term = "クラピカ"
save_dir_path = "./hunterxhunter"
count = 0


def make_dir(path):
    if not os.path.isdir(path):
        os.mkdir(path)


def BingImageSearch(search):
    "Performs a Bing image search and returns the results."
    headers = {'Ocp-Apim-Subscription-Key': subscriptionKey}
    conn = http.client.HTTPSConnection(host)
    query = urllib.parse.quote(search)
    conn.request("GET", path + "?q=" + query, headers=headers)
    response = conn.getresponse()
    headers = [k + ": " + v for (k, v) in response.getheaders()
                   if k.startswith("BingAPIs-") or k.startswith("X-MSEdge-")]
    data = response.read()
    conn.close()
    return headers, data.decode("utf8")


def make_img_path(save_dir_path, url, term):
    save_img_path = os.path.join(save_dir_path, term)
    make_dir(save_img_path)
    global count
    count += 1

    file_extension = os.path.splitext(url)[-1]
    if file_extension.lower() in ('.jpg', '.jpeg', '.gif', '.png', '.bmp'):
        full_path = os.path.join(save_img_path, str(count)+file_extension)
        return full_path
    else:
        raise ValueError('Not applicable file extension')


def download_image(url, timeout=10):
    response = requests.get(url, allow_redirects=True, timeout=timeout)
    if response.status_code != 200:
        error = Exception("HTTP status: " + response.status_code)
        raise error

    content_type = response.headers["content-type"]
    if 'image' not in content_type:
        error = Exception("Content-Type: " + content_type)
        raise error

    return response.content


def save_image(filename, image):
    with open(filename, "wb") as fout:
        fout.write(image)


def main():
    if len(subscriptionKey) == 32:
        try:
            make_dir(save_dir_path)
            url_list = []

            print('Searching images for: ', term)
            headers, result = BingImageSearch(term)
        except Exception as err:
            print("[Errno {0}] {1}".format(err.errno, err.strerror))
        else:
            data = json.loads(result)

            for values in data['value']:
                    unquoted_url = urllib.parse.unquote(
                            values['contentUrl'])
                    url_list.append(unquoted_url)

        for url in url_list:
            try:
                img_path = make_img_path(save_dir_path, url, term)
                image = download_image(url)
                save_image(img_path, image)
                print('saved image... {}'.format(url))
            except KeyboardInterrupt:
                break
            except Exception as err:
                print("%s" % (err))
    else:
        print("Invalid Bing Search API subscription key!")
        print("Please paste yours into the source code.")


if __name__ == '__main__':
    main()

 基本的に以下のURLのbing image search v5でのコードを参考にしています。
Bingの画像検索APIを使って画像を大量に収集する - Qiita

使い方

 まず、subscriptionKeyのところにAzureで作成したBing Image API v7のkeyを代入してください。keyはダッシュボードで確認できます。ここは上記参考URLに詳しいです。
 次に集めたい画像の検索ワードをtermに代入して、保存したいディレクトリをsave_dir_pathに代入してください。今だとデフォルトで次のようになっています。

term = "クラピカ"
save_dir_path = "./hunterxhunter"

 だから上のコードを実行すると、コードが置いてある同じ階層にhunterxhunterというフォルダができて、さらにその下にクラピカというフォルダが生成されてその中に画像が連番で保存されていきます。
 hunterxhunter/クラピカフォルダはこんな感じ。「命をかける」
f:id:mirenn:20171111220342p:plain

ちょっとコードの解説

 今回作成したコードは上記参考サイトのようにひとつの検索ワードで1000件保存するといったものとは違い本当に単純なもので、検索したい画像を35個だけ保存するというものです(取得したURLの画像が指定した画像形式でない場合などには35個以下になります)。35個保存というのはv7のAPIがデフォルトでは検索1回に35個のURLを返してくれて、今回まさに何もいじらずに素直にデフォルトの35個だけ利用しているからです。
 今回のコードでは、APIを呼び出している関数はBingImageSearchという関数だけになります。これは以下のv7の公式ドキュメントから引っ張ってきたものになります。
docs.microsoft.com

def BingImageSearch(search):
    "Performs a Bing image search and returns the results."
    headers = {'Ocp-Apim-Subscription-Key': subscriptionKey}
    conn = http.client.HTTPSConnection(host)
    query = urllib.parse.quote(search)
    conn.request("GET", path + "?q=" + query, headers=headers)
    response = conn.getresponse()
    headers = [k + ": " + v for (k, v) in response.getheaders()
                   if k.startswith("BingAPIs-") or k.startswith("X-MSEdge-")]
    data = response.read()
    conn.close()
    return headers, data.decode("utf8")

 この関数はとりあえず検索したURLが入ったデータを返すものという程度の理解でいいです。とりあえず欲しいデータを返してくれて、それはJSONというデータ形式で渡してくるということが重要です。検索した画像を保存するために私達は、そこから欲しいURLの情報だけ抜き出す必要があります。
 URLの抜き出しの話をする前に、JSONがどういう形で帰ってきているかを見てみましょう。JSONとは以下のようなもので、{}でくくられているデータ形式です。
f:id:mirenn:20171111224239p:plain
 これは、json.load( )に入力してしまえばpythonの辞書配列として扱えるように簡単に変換できます。欲しいURLはvalueの中のcontentUrlというkeyの値なので以下のようなコードになっています。

            for values in data['value']:
                    unquoted_url = urllib.parse.unquote(
                            values['contentUrl'])
                    url_list.append(unquoted_url)

 こうしてurlがurl_listに格納されていきます。欲しい画像のurlが分かっていたらあとは実はpythonではあっという間で、以上が今回書いたコードの大雑把な流れです。

最後に私的反省

私がやったのはAPIを叩く部分を最新のバージョンに合わせたくらいがせいぜいで、他の部分は参考URLのコードをお手本にしています。他にももっと便利な関数がそちらではついていてもっと長いコードだったんですが、こちらではシンプルにBing Image Search API v7をまわしてみる取っ掛かりとして最低限必要なだけに絞ってみました。まぁこれは自分のタスク上1つのけものフレンズにつき1000件も集めることはないしそれぞれとりあえず35件でいいやという妥協がもとです。実際私はこのコードをもとに、最初にけものフレンズの動物名のリストを作ってfor文で回してけものフレンズの画像を収集しました。案の定それぞれ35件まるまる使えそうな画像ばかりというわけではないんですがそれは当たり前ですしまぁまぁ満足しています。
本当はgoogleの画像検索APIがいいな~なんて思っていて、けどそれは使い勝手が悪いらしいということでしょうがなくAzure登録してBing Image Search APIを使うことにしたのですが不都合なところはありませんでした。1ヶ月無料で使えるようだし良いですね。APIころころ変わってなければもっとやりやすかったと思います。まあ十二分に簡単でしたしpythonの勉強にもなって良かったと思います。
どうせそのうちまたAPIが変わってAPIの叩き方も変わるんでしょうが、JSONでデータが返ってくるという形式は変わらないだろうと思うのでそこさえちゃんと分かっていればあとの残りのコードは過去のものが参考になると思います。
でも私の場合画像集めはネットで集めるより動画から切り出したほうが良いよなとか思い始めているのでもう二度とBing Image Search APIについて調べることはないかもしれません……。