uma3blog

なんか書きます。

Word Cloudで水樹奈々と田村ゆかりの曲の歌詞の単語の出現頻度を可視化してみた

「の」が4つ続いた。

Word Cloudって?

「Word Cloud」で画像検索すれば大量に出てきます。

水樹奈々って?

「アニソンの女王」

「声優アーティスト」を世間に定着させた人*1。愛称は「奈々様」「お奈々」「ヘッド」「奈々さん」など。

前人未到を突っ走り続け、声優初のオリコン週間1位、声優初の紅白歌合戦出場、声優初の東京ドーム公演など、「声優初」が多すぎる人。さらに今年1月には声優どころかアーティストとしても初の日本武道館7daysライブを成功させた。

また、今年の6/23から夏ツアー「NANA MIZUKI LIVE ISLAND 2018」が始まってます。

www.mizukinana.jp


私も3ヶ所行きます。

田村ゆかりって?

ゆかり王国のお姫様」

声優アーティストとして、さいたまスーパーアリーナ横浜アリーナなどアリーナ公演も多く成功させており、長年、水樹奈々堀江由衣とともにキングレコードの声優御三家と呼ばれていた。愛称は「ゆかりん

彼女のファンは「王国民」と呼ばれるピンクの集団。ライブでは比類の無い統率力を見せる。「You & Me」のライブ映像は王国民の統率力を垣間見ることが出来ることで特に有名。ちなみにこの曲は「入国審査」と呼ばれており、ラップを完璧に歌えないと王国民になることが出来ない*2。あとは「fancy baby doll」とかも有名。

現在はキングレコードとの契約を終了しており、事務所をアイムエンタープライズからアミュレートに移籍し、個人レーベル「Cana aria」を設立し活動中*3

今年の10/6,7には、詳細未発表だが「ゆかりっくFes」などというものが開催予定。私はもちろん両日参加です。

http://yukaricfes.com

\世界一かわいいよ!/

実装

実装しました。

URLを記載している箇所は都合上[URL]としています。

環境はWindows、Python3.6.5

歌詞を単語に分解するための形態素解析にはMeCabを使いました。

また、mask画像には、水樹奈々:青いハート、田村ゆかり:ピンクのハートを選びました。

# -*- coding: utf-8 -*-

import lxml.html
from selenium import webdriver
import pickle
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import re
import MeCab

pattern = re.compile('[!-~]')
#フォントを指定。下記はメイリオを指定
font_path = "C:/WINDOWS/Fonts/MEIRYO.TTC"
stop_words = [ u'てる', u'いる', u'なる', u'れる', u'する', u'ある', u'こと', u'これ', u'さん', u'して',
		u'くれる', u'やる', u'くださる', u'そう', u'せる', u'した', u'思う',
		u'それ', u'ここ', u'ちゃん', u'くん', u'', u'て',u'に',u'を',u'は',u'の', u'が', u'と', u'た', u'し', u'で',
		u'ない', u'も', u'な', u'い', u'か', u'ので', u'よう', u'']

def getUrls():
	target_url = "[URL]"
	driver = webdriver.PhantomJS()
	driver.get(target_url)
	root = lxml.html.fromstring(driver.page_source)
	links = root.cssselect("td.side.td1 a")

	#TOPのURL
	song_url = "[URL]"
	linkarr = []
	#該当箇所のhref要素だけ取り出したlinkをTOPのURLと結合してリストに突っ込む
	for link in links:
		linkarr.append(song_url + link.attrib["href"])

	return linkarr

def getLyrics(urls):
	driver = webdriver.PhantomJS()
	lyrics = []
	for url in urls:
		driver.get(url)
		root = lxml.html.fromstring(driver.page_source)
		#歌詞部分のみ抽出
		lyrics.append(root.cssselect("#kashi_area")[0].text_content())

	#ファイルに保存
	f = open("list.txt", 'wb')
	pickle.dump(lyrics, f)
	f.close()

def list_concat():
	readfile = open("list.txt", 'rb')
	writefile = open("lyrics.txt", 'a')
	list = pickle.load(readfile)
	for text in list:
		text.replace("\r\n", " ")
		writefile.writelines(text)
	readfile.close()
	writefile.close()

def text_parse(text):
	words = []
	mt = MeCab.Tagger('-Ochasen')
	res = mt.parseToNode(text)
	while res:
		if res.feature.split(",")[0] in ["形容詞", "動詞","名詞", "副詞"]:
			if res.surface != "" and (not pattern.match(res.surface)):
				words.append(res.surface)
		res = res.next

	return words

def word_cloud():
	readfile = open("list.txt", 'rb')
	list = pickle.load(readfile)
	lyrics = ""
	for text in list:
		lyrics += text
	lyrics.replace(" ", "")
	#maskにする画像を指定
	heart_mask = np.array(Image.open("heart.png"))
	#MeCabで形態素解析
	words = text_parse(lyrics)
	#背景色指定、フォント指定、マスク指定、ストップワード指定
	wc = WordCloud(background_color="white", font_path=font_path,
			mask=heart_mask, stopwords=set(stop_words))
	wc.generate(" ".join(words))
	#色を付ける場合
	image_colors = ImageColorGenerator(heart_mask)
	plt.imshow(wc.recolor(color_func=image_colors), interpolation='bilinear')
	#色を付けない場合
	#plt.imshow(wc, interpolation='bilinear')
	plt.axis("off")
	plt.savefig('lyrics_wordcloud.png')

def main():
	#最初の1回のみ歌詞を取得しファイルに保存
	urls = getUrls()
	getLyrics(urls)
	#リストを連結
	list_concat()
	#word cloud作成
	word_cloud()

if __name__ == '__main__':
	main()

結果

田村ゆかり

f:id:uma3san:20180627002108p:plain

似てますね。

試しにゆかりんの方をAlice的なmaskにしてみたのが以下。

f:id:uma3san:20180627003949p:plain

いい感じ。

*1:声優アーティストとしては、以前に椎名へきる林原めぐみがいますが、一般に定着させたのは水樹奈々だと思います

*2:というのは冗談ですが、実際みんな歌えます

*3:キングレコードからアミュレートに移籍となっていたのを修正しました

Ångstrom CTF 2018 簡易Write up

angstromCTF

 

数時間だけやりました。

 

超久しぶりにチームで参加。初心者チームなのでなるべく簡単なものは他の人に任せて、私はBinary系中心に解きました。

高校生向けCTFなので、苦手なBinary, Pwnもすいすい解けて楽しかったです。

 

File Transfer
 pcapをWiresharkで開いて見てみると、JPGファイルをダウンロードしてる通信があったので、「オブジェクトをエクスポート」→「HTTP」からファイルをJPGとしてダウンロードして開いたら取れた。

 

Rev1
 バイナリをIDAで見ると、ジャンプ命令前に即値と比較してたのでそれを投げて終了


Rev2
 バイナリをIDAで見ると、ジャンプ命令前に即値と比較してたのでそれを投げて終了。2回目は3431の素因数分解で終了。


Accumulator
 適当にでかい文字入れたら取れた気がする

 

Cookie Jar
 適当にでかい文字入れたら取れた気がする

 

Number Guess
 Format String攻撃で行けた。
 Cソースを見ると、乱数を足し算してたので、名前を入力するところで適当に%iを複数入れて見てみると、その出力の3番目と9番目の出力を足した値が答えになることがわかったのでそれを投げて終了。

SECCON 2017 オンライン予選 write-up

動画見ながらやってたらいつの間にか動画に完全シフトしてたので、合計1時間くらいやりました。
解いたのは2問でした。
やっぱり千と千尋の神隠しは名作なんやなって。


f:id:uma3san:20171210194950p:plain

こんな感じ。

Run me! (Programming 100)

Run me!

----- RunMe.py
import sys
sys.setrecursionlimit(99999)
def f(n):
return n if n < 2 else f(n-2) + f(n-1)
print "SECCON{" + str(f(11011))[:32] + "}"
-----

普通に動かそうとすると一生終わらないので、とりあえずf(11011)の部分を変えて動かしてみると次のような感じに。
1->1
2->1
3->2
4->3
5->5
はい、フィボナッチ数列っぽいのでWolframAlphaさんにお願いして、11011番目のフィボナッチ数を計算してもらいました。
www.wolframalpha.com

fibonacci[11011]

11011番目のフィボナッチ数を出してくれるので、その上32桁をコピペするだけ。

SHA-1 is dead (Crypto 100)

SHA-1 is dead

http://sha1.pwn.seccon.jp/
Upload two files satisfy following conditions:

    file1 != file2
    SHA1(file1) == SHA1(file2)
    SHA256(file1) <> SHA256(file2)
    2017KiB < sizeof(file1) < 2018KiB
    2017KiB < sizeof(file2) < 2018KiB

* 1KiB = 1024 bytes

有名なSHA-1衝突。
SHAttered
ここからファイルも落とせる。

よくわからないので、光成さんのスライドを参考に。

www.slideshare.net
どうも重要な部分は序盤の一部だけで、ファイルの後ろのほうはどうでもいいみたいなので、上記URL先で落としたファイルの後ろに適当に追記。
Stirlingで延々とAAをくっつけました。
2ファイルとも2017KiBを少し超えたところで保存して、ファイル投げたらFlagが降ってきました。

最初、2017KB(2017000byte)かと思って延々とファイル投げて何で通らないんだろってなってSHA-256出したりしてたので、ちょっと時間かかりました。

conda install出来ないからpipでscapy-python3インストールしようとしたらTypeError: parse() got an unexpected keyword argument 'transport_encoding'が出た

解決

ここに書いてたこと試したら一発だった。

stackoverflow.com

 

conda install -c anaconda html5lib

pip install scapy-python3

 

おわり

10/15 情報処理技術者試験

情報処理技術者試験とかいうものを受けてきました。NWです。

前回セスペ取ってから3年間何も取ってないので久しぶりに午前1から。

 

午前1:公式から拾ってきた問題を2回分解いて2回とも7割超えてたので、特に勉強無しで行ったら結構むずくてヤバいと思ってたけど普通に通ってました。 23/30

午前2:消化試合 22/25

午後1:解答用紙見た時点で問1に暗号アルゴリズムとか書かれてたので「お、セキュリティ寄りか?これ解いたろ」とか思って解いてみたらむずかったです。あとは問3解きました。問1がクソみたいな出来なので多分ダメ。

午後2:問1まさかの丸ごとSDN問題で、テーマが新し目のやつだから現代文的に読めば分かるやつかなと思ってたけど、問2の無線LAN解きました。出来は微妙。

 

高度受ける人にとっては、午前2は消化試合以外の何物でもないので免除してほしいですね。

MD, CD, グライコ◯◯の違いメモ

3つの炭水化物サプリの違いがよくわからなかったので調べてみた。

あまり意識して使い分ける必要は無さそう。

 

MD

マルトデキストリン

消化吸収が早いため、トレーニング中、後に適す。

血糖値は急に上がる。トレ中後以外の摂取はなるべく避けたほうがいいかも。

バルクスポーツ MD 2kg ノンフレーバー

バルクスポーツ MD 2kg ノンフレーバー

 

 

 CD

クラスタデキストリン、CCDとも←この2つはグリコの商標っぽい。

消化吸収が緩やかなため、有酸素運動とか長時間運動の際の摂取に適す。

血糖値はゆるやかに上がる。基本はトレ前の摂取かな。

MDと一緒に摂取することもあり。

バルクスポーツ CD 2kg ノンフレーバー

バルクスポーツ CD 2kg ノンフレーバー

 

  

グライコ◯◯

グライコフューズ、グライコSRなどの商品がある。商標上の理由だけでCDと同じ?

消化吸収が緩やかなため、有酸素運動とか長時間運動の際の摂取に適す。

血糖値はゆるやかに上がる。基本はトレ前の摂取かな。

MDと一緒に摂取することも。

グライコSR 2000g

グライコSR 2000g

 

 

VMwareのゲストOS(Kali2 64bit)にVMware Toolsをインストールする(open-vm-tools-desktop)

ちょっとはまったのでアバウトにメモしておく。

 

最近はapt-get installでインストールできるらしい。

 

open-vm-toolsopen-vm-tools-desktopの2つがあるが、

画面を伸ばしたり、ファイルをドラッグアンドドロップ出来るようにするには後者をインストールする必要がある。

 

Kali2では単純にapt-getしようとしても出来なかったので手順を以下に記す。

 

まず以下のとおりに/etc/apt/sources.list

deb http://ftp.debian.org/debian/ jessie main contrib

の1文を追加し、apt-get updateを行えばopen-vm-toolsはインストールできるようになるはず。

partnerweb.vmware.com

その後、apt-get install open-vm-tools-desktopを行うと、「壊れた変更禁止パッケージがあります」などと表示される。

 

そこで、表示されているlib何とかをいくつかapt-get install lib何とかでインストールすると、いつの間にかopen-vm-tools-desktopをインストールできるようになる。なってた。