2021 第二回メンバー集会 らん☆ぷろ #traPmtg

一番かっこいいデフォルトアイコンに会いに行く

by d_etteiu8383

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

自己紹介

  • 名前:d_etteiu8383(でっていう)
  • 生命理工学院生命理工学系 3 年
  • グラフィック班 モデリング
  • ゲーム班

アイコン画像

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

デフォルトアイコン

こういうの

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg
by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

目標

かっこいいデフォルトアイコンを生む traP ID を見つける

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

どうやって生成しているのか

go-qidenticon (https://github.com/jakobvarmose/go-qidenticon) を使っている

  1. ユーザー作成時の名前(traP ID)から SHA-512 ハッシュを生成して(末尾 8byte=64bit を)整数に変換
// Code derives a code for use with Render.
func Code(str string) uint64 {
 buf := sha512.Sum512([]byte(str))
 return binary.BigEndian.Uint64(buf[56:])
}

ユーザー名traPの場合
SHA-512 ハッシュの後ろの方:4ca5c14fe12d6f585523033066864209752

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

どうやって生成しているのか

  1. 整数から図形と色を決定
middleType := int(code & 0x03)      // 0        中心は正方形
middleInvert := code>>2&0x01 == 1   // false    中心は反転させない
cornerType := int(code >> 3 & 0x0f) // 11       四隅は三角形
cornerInvert := code>>7&0x01 == 1   // false    四隅は反転させない
cornerTurn := int(code >> 8 & 0x03) // 3        四隅を3π/2回転させる
sideType := int(code >> 10 & 0x0f)  // 11       サイドは三角形
sideInvert := code>>14&0x01 == 1    // true     サイドは反転させる
sideTurn := int(code >> 15 & 0x03)  // 2        サイドをπ回転させる
blue := code >> 17 & 0x1f           // 22       サイドの色の青成分は 176
green := code >> 22 & 0x1f          // 4        サイドの色の緑成分は  32
red := code >> 27 & 0x1f            // 28       サイドの色の赤成分は 224
secondRed := code >> 32 & 0x1f      // 15       角の色の赤成分は     120
secondGreen := code >> 37 & 0x1f    // 10       角の色の緑成分は      80
secondBlue := code >> 42 & 0x1f     // 16       角の色の青成分は     128
swapCross := code>>47&0x01 == 1     // true     中心の色はサイドに合わせる
by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

どうやって生成しているのか

  1. 完成

traPから生まれるアイコン、ダサい...

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

逆に画像から ID を求めたい

図形と色を決めれば数字が決まる
→ 数字が決まればハッシュの後ろの方が決まる
→ ハッシュから元の文字列に戻せれば†かっこいいデフォルトアイコン†になれる traP ID が判明する...?

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

無理

実はハッシュから元の文字列を探索してくれるサービスはある
(https://hashtoolkit.com/decrypt-sha512-hash/ は 既に 207 億種の文字列のハッシュを計算して保存しており、この中から検索してくれる)

でもアイコン生成に使っているのは末尾数バイトのみなので、前方を適切に埋めて正しいハッシュ値を得ないといけない

僕の知識では無理

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

デフォルトアイコンメーカー

せっかく作ったけど画像から ID に戻せないのでボツ
Vue の勉強になったので良し

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

全探索しかない

とりあえず@0さんから@9999さんまで見てみる

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg
by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

@7086さんのデフォルトアイコン

@5601さんのデフォルトアイコン

@5018さんのデフォルトアイコン

@874@4283@4659@5173@5562@5797@6884@8915@9044さんは
デフォルトアイコンが完全に透明になってしまうので注意

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

英単語でも探してみる

ANC 単語頻度準拠 英和辞典の出現頻度上位 10000 単語 ×3 パターン(大文字, 小文字, パスカルケース)のデフォルトアイコンたちも見てみる

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

英単語でも探してみる

by @d_etteiu8383
2021 第二回メンバー集会 らん☆ぷろ #traPmtg

@pants おすすめです

by @d_etteiu8383