世紀末の墓

お気持ち.log

IT系寄りの雑記

Akatsukiのインターンに行ってきた話

タイトル通り,Akatsukiのサマーインターンに参加してきました. その所感等を書いていき.

行った理由とかはこっちで

silmin.hatenablog.com

期間

2019/09/02-20
3週間 14営業日(途中祝日があったため)

選考フェーズ

下のページから応募できた(今はもう募集終了してるけど)

aktsk.jp

応募→コーディングテスト→人事面談→エンジニア面談
というフローだった気がする.

それなりにプログラミングできる人なら難なく突破できそうな感じだった.(詳細は覚えてない)

選考通過後,どんなことやりたいかなどのヒアリングを兼ねたエンジニアの方との面談があった.
そこでは僕は「なんでもやりたいです!」みたいなことを言った記憶がある.

その後,必要技術やオススメ書籍などがエンジニアの方から送られてきたのだが,
人事の方が「必要書籍があるなら送りますよ^^」っていって送ってくれたのありがたかった.

職種

ソーシャルゲームのクライアントエンジニア

開発環境

言語: C++11 ライブラリ: Cocos2d-x エディタ: Xcode

やったこと

現在運用中のゲームの新機能の一部の実装

初のC++で大規模開発

C++は今まで競技プログラミングと小さめツールを作るくらいでしか書いていなかったので新鮮だった.

結構長いプロダクトだったので,コード量がとても多くて最初のキャッチアップが死ぬほど大変だったし,
ソースコードとアセットをcloneしてくるだけで時間が溶けたり,Xcodeくんが無限にindexingしていたりと大変だった.

GitHubを用いた開発

普段は一人で利用していて,チームで使うことは全然なかった.

PRによって自分のコードがレビューされもっと良い感じになっていくのが楽しかったし,
自分の書いたコードが本番コードにmergeされると嬉しかった.

他職種や他エンジニアと話す

自分の実装箇所が他との接続部分かつ仕様がある場所だったので,プランナーの方に確認したりデザイナーさんのPRを参照したりと,
結構他と関わることが多かった.

僕は今までのインターンはエンジニアとしか話したことがなかったので新鮮だった.

得られたこと

既存のコードを疑うこと

元々あるコードや設計が正しいとは限らない

大きなプロダクトで多くの人が関与するようになると,同じようなことをやっているように見えるのに色々な方法が見受けられる. それらを模倣したら良い,ではなく自分の担当箇所に置き換えて考える必要がある.あくまで前のコードは参考程度で. それにコードや設計はどんどん陳腐化していくので,当時は最善だったかもしれないが,今ではより良い方法があるといったようなことは起こりうる.

大規模開発に関する知見

GitHub

コードの管理はGitHubでされていて,新機能を実装したらPRを出してレビューしてもらい取り込まれる. 自分の書いたコードがレビューにかけられて本番に取り込まれるのは良い経験になった.

ブランチ整理周りのTipsも得られてよかった.

チケットベース開発

なにかタスクが発生したらチケットを切って担当者をアサインする. PRもこのチケットに基づいて作り,実装が終わったら検証フェーズに移っていく.

Jenkins等でのビルド自動化

PRが出たときやデイリーでビルドが走っていて,常にやばくないかなどの検証がされている.

ロジックの簡潔さ(人間に優しいコード設計)

色々な人が関わるプロダクトなので,コードを誰がみてもわかりやすく書く必要がある. そのためには,綺麗にクラス構造を設計したり適切な関数切り出しが大切.

自分の特性に合わせた方法を模索すること

僕もこれを読んでるあなたもおそらく人間なので,欠点となりうる特性を持っているはず. 運動が苦手だったり人と話すのが苦手だったり.

ただ,集団で仕事をする以上,一人の時とは違った条件や制限がある.
その欠点をそのままにするのではなく,どうしたらそれを克服(カバー?)できるのかをみつけたい.

そのためにはトライ&エラーを繰り返し,自分に合った方法を常に模索し続ける必要がある.

僕は,このインターン

  • 夜型なので朝に弱く,夕方ごろにエンジンがかかる
  • 思考のキャッシュが残り続ける

の2つが業務をする上で障壁になった.

そのままにするわけにも行かないので,

  • 夜型なので朝に弱く,夕方ごろにエンジンがかかる
    • 朝来た段階でその日のミニスケジュールみたいなものを立てて,それ通りに開発する
  • 思考のいらないキャッシュが残り続ける
    • 考えたことや知り得たこと等をメモに起こして,自分のキャッシュを疑うようにする

の2つを実践していた.

この2つは意外と自分に合っていて良かったため,今後個人の開発でも続けていきたいと思った.

C++の知見

C++を業務で使うのは初めてだったので,それなりに学べた気がする.
一人で書いているだけだと知らなかった仕様や書き方に触れられたのはよかった.

ただ,2週目くらいの頃に,自分のC++の仕様理解が曖昧だったせいでハマって泣けた.

感想

技術的には上記の通りなのでそれ以外について.

まずオフィス内が裸足!

これは僕にとって最高にマッチしている.最高.

それになんかたくさん設備がある!

本読むスペースとかラウンジとか休憩スペースとかソファがいっぱいあるところとか...挙げ句の果てにはバリスタが常駐している!?

なんてこった.....

結構みんなラフに話していて,雰囲気的に自分にあってそうだなーっていう感じがした.

基本毎日楽しくて,3週間がとても短く感じた.

交通費や宿泊の提供もあるし,お賃金もかなりもらえるし,おすすめやぞ(言わされているわけではない)

おわりに

この3週間は自分の中で結構濃い3週間になったと思う.

当初の目的だった「クライアントエンジニアの肌感を掴む」はそれなりに達成できたと思う.

僕はまだB2だが,好きな分野が多すぎるため今から全部体験しようと思ってインターンに行っている.
実際に3社いってみて共通点や違いが見えたり,体験してみないとわからなかったことは多くある.

これを読んで,「ちょっと行ってみようかな...」と思った人は,Akatsukiに限らずインターンに応募してみてはいかがだろうか.

まだ「B3以上〜」「n年卒限定」のような制約があるところも多いが,年齢問わずのところも増えてきているので,早いうちから経験しておくのは良いことだと思う.

東京の一人暮らしはお金が溶けるなぁ...(遠い目)

mixi 2Days Challenge に参加してきた話

2Days Challengeとは

mixi-recruit.snar.jp mixiが主催する技術イベント

TDD ChallengeBug Shooting Challengeの2つで構成される
(TDD: Test Driven Development)

どちらも1チーム2人で行われる.

11:00~19:00くらいで行われ,交通費と宿泊支給,お昼ご飯と最終日は懇親会があった.
謎の待遇の良さである.

参加した経緯

そもそもこのイベントの存在は最初知らなかった. mixiのサマーインターンに応募した流れで人事の人から案内があって,じゃあイキマスとなった.インターンは落ちた.

TDD Challenge

テスト駆動開発で色々な課題を解こうみたいなやつ.

言語はRubyで,テストはMinitestって奴をつかった.

課題はいくつかあって,先に出来るだけテストしやすい設計をしてテストを書くことを推奨された.

所感

普段の開発でテストらしいテストを書くことがほとんどなく,新鮮な感覚だった.
よくテストテストって言ってるのはこれのことか...みたいな感じ.

僕はよく自前で確認スクリプトを書くのだが,これをいい感じにクラスで定義してくれている奴を使う感じ.

テストがあるとそこに書いたようなケースは保証されるので結構安心できる.
社員さんのLTにもあったが,テストはドキュメントにもなるし書けるなら書いた方がいい.

ただ,テストの出力結果はちょっと見づらかったのは険しめだった.

Bug Shooting Challenge

最初にバグが埋め込まれたWebアプリを渡される.
そのアプリの利用者から不具合報告が届くので,それを元に修正するという感じ.
業種としてはCRE(Customer Reliability Engineer)が該当するらしい.
見るのはコードだけじゃなくてHadoop(hive)に溜まったアプリとリクエストのログやユーザーデータ等もみる必要がある.
環境はruby on railsとHadoopとmysql.

これはコンテスト形式で修正部分をPRすることで採点される.
コード修正だけでなく,PRやissue文も評価される.

所感

railsなんもわからんマンだったが,ペアがわかる人で助かった.

不具合報告を受けて調査→原因特定→修正→報告みたいなのが結構楽しかった.
コード側の原因特定は結構早めにできたが,その不具合の再現や修正の方向性や選択肢等,PRやissueに書く内容を考える方が大変だった.

etc

昼食

1日目は紐を引っ張って温めるタイプのお弁当だった

2日目は題材のWebアプリにちなんで(?)釜飯だった

懇親会

いろいろな人と話せて楽しかった.

宿泊

Airbnbでmixiがとってくれた民宿におたく5人で泊まった

ちなみにここでは僕が部屋の鍵を紛失し大騒ぎした(僕のスーツケースからでてきた)

余談

1日目の朝,11:20開始だったのにも関わらず10:40ごろ起床し,30分ほど遅刻をかました.

summer intern 2019 応募と参加企業

この夏,たくさんインターンに応募して2社行くことになったので,各企業どんな感じだったかみたいなことを書いておく.

インターン行こうと思った理由

大学の夏休みは長い.2ヶ月弱あるし自分の開発だけだと飽きちゃう可能性があるしなんか予定を入れたかった.

就職はできればしたくないが,そんなことも言ってられないので界隈に触れにいく必要を感じた. IT界隈なのは確定だと思うが,ジャンルが広くどのジャンルも好きなので,それをある程度絞る目的もある.

応募したところ

  • Akatsuki
  • Pixiv
  • Yahoo!
  • DeNa
  • コロプラ
  • LINE
  • teamlab
  • mixi
  • cookpad

あとは覚えてない

選考結果と所感

Akatsuki

実際にいくところ(9/2-20) クライアントサイドをやりに行きます.

選考は,コーディングテスト→人事面談→エンジニア面談というフローだった気がします. コーディングテストや面談の内容は伏せますが,個人的には雑談しただけみたいな感じでした. 楽しくお話できたと思います.

選考結果が出た後に「この夏圧倒的な成長につながるインターンにしましょうね!!!」みたいなメールがきたのは面白かったです. あと,電話口とメールのやりとりが超絶丁寧というか,こっちがどうしていいかわからなくなっちゃうくらい丁寧で驚きました.好きです.

参加決定後,エンジニアの方とインターンの内容についてお話して,おわりという感じです. その後にで当日までにやってきてほしいこととか必要な技術とかお勧め書籍/ページ等をもらったのですが, 「mac book proを使いますが,使用経験がないようでしたら事前貸出しますよ!」とか「書籍持ってなければこちらで買って送りますよ!」とか言われてこれマジ!?状態でした. mbpについては持っているので大丈夫でしたが,書籍は買っていただきました...ありがてぇ...

この夏,一番楽しみなインターンです!

Pixiv

Web開発コースで応募. エントリーシートを書くのが面倒だったのでGitHub選考を使った. お祈りされた.ちゃんとGitHub使おう.オワオワリ.

Yahoo!

インフラコースで応募. コーディングテスト→面接だった気がする. コーディングテストは通ったが,面接の日程が遅くその前に決まってしまったので辞退した.

DeNA

プロダクト開発コースで応募. 書類選考→面接2,3回. 最後の面接でダメでした.

コロプラ

サーバサイドで応募. コーディングテスト→人事面接→エンジニア面接 人事面接まで通ったが,日程が遅くその前に決まったやつがあったので辞退した.

LINE

ネットワークで応募. コーディングテストと選択式/記述式問題があった.(選択式/記述式問題は問題文が英語でした) コーディングテストと選択問題は多分大丈夫だった. ただ,何を血迷ったのか記述式問題で回答も英語で書こうとしてしまうとかいうムーブをしてしまい,英語力のNASAから間に合わずボロボロになった. もちろん落ちた.

teamlab

実際に行くところ(8/19-30) サーバサイドで応募, コーディング→エンジニア面接 という流れだった気がする. 面談はこれも個人的には雑談で終わったように感じた.

通った後に事前課題を出されたのだが,先延ばし癖のせいで全部実装しきれなくて「ごめんなさい...」って言って提出した. ごめんなさい.

その後,自己紹介スライドを参加者みんなが1枚ずつ作るのがあった. みんな強すぎて当日すみっこで禿げてる自分が見える見える.

mixi

サーバサイドで応募. 人事面談でダメだった. が,実力的にはOKだかなんとかで,8/31-9/1の2日間でやる2DaysChallengeに誘ってもらえてそちらに参加することになった. ありがてぇ...

これはrailsとGitらしいのでrailsをやらないといけない.

cookpad

サーバサイドで応募. コーディングテスト→エンジニア面接 という流れだった. エンジニア面談で落ちた.

まとめ

面談で自分がちゃんと話せていたか微妙だったが,なんとか2社通ってよかった. 応募する前は面談とか最高に緊張していたが,意外と雑談チックに話せたので気は楽になった. 僕は今B2で,B3以上しか応募できないところが多かったので,来年も頑張っていきたい.

実際行くのは

  • teamlab(8/19-30) インターン サーバサイド
  • mixi(8/31,9/1) 2DaysChallenge
  • Akatsuki(9/2-20) インターン クライアントサイド

それぞれ終わり次第感想書く.

成長して時間が短く感じる話

これは楽しい時間はすぐに過ぎて,つまらない時間は長く感じると言った類いのものではない. 人を待っている時間や暇な時間も小さい頃に比べて短くなったように感じるという話だ. 人間は年齢を重ねる毎に体感時間が短くなるというものがあるが,それはちょっと他所に置いて考える.

人間というのは成長するものだ. 成長というのは知識が増えたり考える力がついたりできることが広がったりすることだと思っている. これをすると様々な視点から物事を見ることができるようになる. 例えば,ただ単に空を見るだけでも,気象の知識がついていたり感受性が養われていたりすれば,それらが無い頃とは受け取ることができる情報量がまるで違ってくる.

これは世の中の全てに当てはまることだと思う. 小さい頃は視野が狭く知見が少ないため,自分と知人,知っているもの以外のオブジェクトは全て”背景”としてみられる. ただ,成長するとそれら一つ一つについて考えることができるようになる. 例えば,「あの看板はどういう風に塗装しているのか」や「あの電光掲示板の内部ではどのようなプログラムが走っていそうか」など. それに知っているもの以外も,知っているものから類推することができるようになる.

僕は考えるのが好きだ. 小さい頃からものをあれこれ考えるのが好きで,哲学書を読んでみたりその辺の機械やからくりを触り倒していた記憶がある. これに知見が合わさることにより,視野が広がり,今まで”背景”だったものから現物として認識でき,考えることができるようになった.

ただ,いくら考えることが好きでも知見がなく視野が狭ければ,考えられる幅は非常に狭いものになってしまう.

僕の中ではそう言った意味で知見を得ることや学ぶということは大切なことだ.

話がそれてしまったが,この”時間が短く感じる”というのは,自分や知人以外は背景となり細かく認識できなった世界が 成長することによって多くを認識し考えることができるようになったおかげで,”短く感じた”ということだ. そういう意味では,楽しい時間がすぐに過ぎるというのと同じかもしれない. 小さい頃は知見が少なくこの楽しみを味わいようがなかったため,ただつまらない時間として消費されていたのだ.

情報をいんたーねっとに上げるときに思うこと

Twitterでおたくが技術書を書こうみたいな話があり、そこで思い出した僕がいつもネットに情報を上げるときに思うことを書いていく。

そもそも自分の上がいるのでは

それはそう

これはあたりまえで、公式ドキュメントが最強!みたいな部分があるので、ネットに転がってる情報なんてほとんどがその下位互換であることが多い。

そういう状態で自分が情報をブログなり技術書なりにする意味や価値ってあるんか??と考えてしまいがち。ここで同じような情報がたくさん出ることによって、今の悪しきGoogle検索が出来上がってしまっているんじゃないのか?もっと深い情報が欲しい人の邪魔にならないか?とか考える。

ただ自分が出す情報が丁度いいレベル感の人もいるかもしれないというお気持ちもあり、大変難しい。

自明になる

自分ができなかったことをできるようになると、急に自明になってしまうことが往々にしてある。むしろなぜ自分はできなかったのかわからなくなる。

僕は自転車が乗れなかった時の気持ちは覚えていないし、自転車のコツとか聞かれても「いい感じにスピード出して全力で漕いでみる」くらいのアドバイスしかできない。

ただ、僕が今自転車を絶賛練習中だったらどうだろう。何か学ぶ度、感じる度にアウトプットしていけば、最終的にはいい感じの出力になるような気がする。「スピードだすと遠心力的なのが働いてよさげ」「補助輪なかったら生きていけない」「おめぇ絶対その手を離すなよ」とか、それを感じたときじゃないとかけないようなものも多そう。

「自分もわからなかったからわからない人の気持ちがわかる」とか言ってる人はマジですげぇと思う。僕はやるまではわからないけど、やれるようになっちまったらそんな気持ち消し飛ぶから。そういう人は随時メモとか取ってわからなかったことを覚えていたり、コンプレックスになっていたりするんだろうなぁ。

対策

恥を捨てて、学びながら出力する。

これに尽きる気がする。その出力みればそのころの気持ちが蘇るかもしれないし。


追記

この対策にたどり着いた過程の詳細は既に忘れてしまっているので、つまりはそういうこと。もうなにもわからない。

VTuberのゲーム部プロジェクト、中の人4人が垢バレして企業に対する愚痴が露見した話

ゲーム部プロジェクトの中の人であろうTwitterアカウントで、企業側とのいざこざに関する愚痴のようなものが度々観測されるので、まとめてみる。これは@silmin_個人がまとめているものなので、この情報そのものやこれが原因で起きたことすべてに対する責任は一切取れませんのでご了承ください。

この記事は僕が書いたHackMDの内容を使ってます。
ゲーム部中の人の話 - HackMD

公式発表に関しては動向に追記として書いていきます。

youtube_channel

www.youtube.com

official_site

gameclubproject.jp

company

Unlimited Inc. 元 株式会社バーチャルユーチューバー

member

特定するにあたり、twitterでの絡みやnana等の投稿サイトの音声を比較した。

あおぎりもしくは関係者...?

このいざこざが始まったあたりに当事者たちがフォローしたアカウント なおかつ声関係の人 詳細はまだわかってないけど関係ありそう

tweets

たなか(夢咲楓の中の人と思われる人物)さんの当該ツイートのアーカイブ
うさきち(風見涼の中の人と思われる人物)さん当該ツイートのアーカイブ
九重なゆ(桜木みりあの中の人と思われる人物)さんの当該ツイートのアーカイブ
はなつぐ(道明寺晴翔の中の人と思われる人物)さんの当該ツイートのアーカイブ

一部抜粋

f:id:silmin:20190406023412p:plainf:id:silmin:20190406023415p:plainf:id:silmin:20190406023532p:plainf:id:silmin:20190406023419p:plain

企業側への不満等が見て取れる
これを見る限りだと、結構不当な扱いを受けてたっぽい 飛び火してからのアーカイブは取っていない

etc

コレコレchの生放送

道明寺ここあの中の人と思われる人物が出演した回

youtu.be

株式会社バーチャルユーチューバーから連絡がきたらしい
(株式会社バーチャルユーチューバーはUnlimited Inc.の旧名)
夢咲楓や道明寺晴翔の画像ががっつり出てるので確定だと思われる

動画を見てもらえればわかると思うが、結構怪しいっぽい
時給1500円でMMDのバイト探してたみたいだし、運営がひどかったとしても不思議じゃない

動向

2019/04/06 00:12:10.86 5chに書き込みがなされる
ココの28
ここから各板に飛び火
本人垢のフォロワーが増える

元々これらを特定していた人は結構いたみたいだが、この書きこみを境に飛び火していってしまったので、僕もこれを公開することにしました

板の勢いが30000を超えてるのでおそらく即まとめサイト行だろう

追記:これは声優のリークにより運営による声優への不当な扱いが露見したという話であり、声優を叩く趣旨の記事ではありません。

2019/04/06 09:30追記:Twitter等で演者が全員未成年だったみたいな情報が流れていますが、まず間違いなくデマなので流されないようにお願いします。 未成年搾取といえば聞こえがいいので誰かが広めた、もしくはゲーム部の設定情報を空目したかのどっちかでしょう。 あと、ゲーム部解散といわれていますが今のところそんな発表もでていません。

2019/04/08 11:15追記:Unlimited Inc.の公式Twitterアカウントができ、公式声明が発表されました。ついでに公式Twitterアカウントも作られていました。

2019/04/11 15:20追記:今後の方針が決定したみたいです。
マネジメント職がいなかったことが今回の原因と捉え、マネジメント職を新たに設置しマネージャが付けられるようです。 文面的には処分は無しのようですね。 周りの人間(上の人間?)は実態把握を通してこの問題に気付いたらしい。

unlimited-ent.co.jp

考察

KMNZ関係者とはなつぐさんとの間に交流があるため、ゲーム部のまま移転する可能性ありか?

2019/04/11 15:20追記:処分なしでマネージャ付けて続投が決定。周りの人間はこの実態調査で初めて問題を認識。ただリア垢もnanaも監視されててそんな状況がありえるか?というお気持ちです。 マネージャ職がそれなりの力をもって、なおかつ優秀であれば今後平和に進んでいくんでしょうが、処分がない以上危害を加えた人間は残り続けるわけです。 声優側はどんな条件でも辞めるべきだったと思いますが、他の何か(弱みなど)を持ち出されて半強制的に続けさせられた可能性も否定できないので怖いですね。(処分がない時点で察しろ)

2019/07/08 20:20追記:既にみりあの中の人は変わっていて、ついには道明寺も変わったみたいですね。だからまあ察しろというのは正しかったわけです。これおそらく全員替わるんでしょうね。 一気に替えると露骨にバレるからなのか、炎上狙いで燃料を定期投下したいのか、真意はわからないですが。

2019/07/18 1:45追記:下記記事が公式で出されました。ゲーム部4人の声優は全交代するみたいですね。 元声優たちはお疲れ様。新声優たちは待遇変わらんと思うけど頑張れ。という感じですかね。これは燃やした甲斐があったといっていいののでしょうか。 僕にはわかりません。

gameclubproject.jp

「学ぶ」ってなんじゃろ

はじめに

僕は、「学ぶ」ってことは「色付け」ってことだと思うんだよ。

既存の世界の仕様

そもそも、この世界には新しい要素が追加されることはない。

人間ベースで考えると知っているものと知らないものがあるだけであり、世界の仕組みが変わっているわけではない。

人間の技術で仕組みに関与できるようになったとしても、それは世界の仕様上可能であるということを人間が見つけただけだ。

世界の仕様そのものを変更できたわけではない。既知の物質を組み合わせて新たな物質を作り出すことなどは、その良い例かもしれない。

無色の世界

世界の仕様ははじめは無色の状態。これに各々が色付けしていくのが「学び」。

一つの事柄への捉え方は人それぞれだし、印象や解像度も人それぞれ違う。

新しいことに意識的/無意識的関係なく触れた時、受けた印象の大きさや種類によって色が付けられていく。

産まれたときからその積み重ねをして、色が濃くなった部分が自分の得意だったり好きだったりすることになるんだろうと考える。

感性とかその辺もたぶん塗り具合に影響を受ける、気がする。知らんけど。

f:id:silmin:20190225003036p:plain

「浅く広く」はここでいう「薄く広く」になり、「深く狭く」は「濃く狭く」に対応する。


学びの場と広さや解像度

学校

「学び」と聞いて一番に思い浮かぶのはやはり学校だろうか。学校ではカリキュラムに則り、ある程度の解像度を持った体系的な情報を得ることができる。

それに社会の縮図と呼ばれるくらい、周りとの人間関係とかの学びも得られる。その守備範囲は結構広くて汎用的。

日本には義務教育が9年あるので、そこで学ぶものが「常識」として共通認識になっているのだろう。共通認識ということは、だれもが同じような色で同じような範囲を塗られているということだ。

それが悪いことだとは思わないし、むしろある程度の民度を保つためには大切っぽい。

本は学術的専門書から子供向けの絵本に至るまで、実にいろいろな種類がある。同じ分野で同じような事柄についても、たくさん数が存在する。

それは、著者によって見方や説明の仕方、その人のバックグラウンドや得意分野に違いがあるため、得られる情報の広さや解像度に違いがあるからだ。

本は読者が自分の色塗り具合に応じて選ぶことができるのが、いい点。

同じ本でも読者によって塗り具合は変わるし、内容と読者の塗り具合との相性がある。



ただこれらの学びは、世界の仕様のなかで人間が既に知っている仕様について知るものである。一般人は先駆者が広げたカンバスを塗っているに過ぎない。

ただ、その世界の仕様を人間が塗ることができる状態にすることが、研究なんじゃなかろうか。

つまり、研究者は先駆者が広げた世界の既知か否かの境界線をさらに広げていくんだ。

この研究は、研究者が同時に色塗りもしているので本人の学びも同時に成している。

今までの話をまとめるとこんな感じ f:id:silmin:20190225002837p:plain

年齢による差

歳を重ねるごとにどんどん学んで色が落とされていくわけだけど、年齢によって感動が減るとか体感時間が短くなるとかそういうのは、日常での学びが少ないからだと思う。

学びがあったとしても何かと関連付けられて飲み込める、色濃くなるだけ。

f:id:silmin:20190225154248p:plain

ただ、大人も自分が全く知らなかった分野に触れた時には、子供と同じくらいの学びがありそう。

neta-ru[.]comを含むツイート主をブロックする

はじめに

Twitterあるじゃん?パクツイあるじゃん?neta-ru[.]comのページが良くぶら下げられてることあるじゃん?目触りじゃん?

ブロックしちゃうか^^

とはいえ、手動でやるなんてそんなクソ面倒なことしてらんないじゃん?ということでコードを書きました。

準備

python3の動くコンピュータがあればOK
自動定期実行するならファイルを置くサーバ(ラズパイでもなんでも常に起動してるコンピュータ)
僕はVPS(amazon lightsail)/centOS7を使います。

関連モジュールを入れる

$ pip3 install requests requests-oauthlib

僕の環境ではpython2系と3系が共存しているので、pip3ですが、3系しか入ってないのであればpipでも動くはず。

コード

## main.py ##
import json
from requests_oauthlib import OAuth1Session

import keys
from search_word import searchWord
from get_userid import getUserids
from block_user import blockUsers

import datetime

# from keys.py
CK = keys.CONSUMER_KEY
CS = keys.CONSUMER_SECRET
AT = keys.ACCESS_TOKEN
ATS = keys.ACCESS_TOKEN_SECRET

# 認証
twitter = OAuth1Session(CK, CS, AT, ATS)

# 検索
result = searchWord(twitter, "url:neta+ru.com exclude:retweets", 100)

if result != [] :
    # userid(@hogehogeみたいなやつ)をtweetデータから取り出す
    user_ids = getUserids(result)
    # ↑で取り出したuseridを指定してブロック
    blockUsers(twitter, user_ids)

    # log用出力
    print("-----------------------------")
    print(datetime.date.today())
    print(user_ids)
else :
    print("-----------------------------")
    print(datetime.date.today())
    print("error")
## search_word.py ##
import json

def searchWord(twitter, word, cnt) :
    url = "https://api.twitter.com/1.1/search/tweets.json"

    params = {'q': word, 'count':cnt, 'result_type':'recent'}

    req = twitter.get(url, params = params)

    if req.status_code == 200 :
        searchResults = json.loads(req.text)
        return searchResults['statuses']
    else :
        print("ERROR: %d" % req.status_code)
        return []
## get_userid.py ##
def getUserids(result) :
    id_list = []
    for tweet in result :
        user_id = tweet['user']['screen_name']
        if not(user_id in id_list) :
            id_list.append(user_id)

    return id_list
## block_users.py ##
def blockUsers(twitter, user_ids) :
    url = "https://api.twitter.com/1.1/blocks/create.json"

    for user_id in user_ids:
        params = {'screen_name': user_id}
        twitter.post(url, params = params)

main.pyではkeys.pyからtoken情報を持ってきています。
適宜変えてください。

ツイートデータにはURLはt[.]co形式の短縮URLになって組み込まれているため検索が難しいのですが、url:を指定することで、元のURLで検索できます。exclude:retweetsでRTを除外しています。

定期実行

これは実行時に100件検索してきてブロックするものなので、定期的に実行する必要があります。twitterAPIでは指定したtweetIDから検索することが可能なので、ページング処理して以前のツイートすべてを調べることが可能です。ただ、面倒だったし結局最初以外は定期的に処理していくしかないので、以前のは諦めてこれからのやつを適宜調べていくことにしました。

いまcentOS7を使っているのでcronを使って毎日0時に実行されるようにしました。 cronの設定方法については記事が豊富なので書かないですが、1日ごとの実行であれば、/etc/cron.daily/の下にスクリプトを登録すればOKです。

暗号化とハッシュ化の違い

はじめに

このツイートにそれなりに反応がありました。 でも誤記やいくつか指摘もあったので、しっかりまとめようと思った次第です。
しかし、ただまとめるだけではあれなので、レインボーテーブルやsalt等の話も少しします。

ちなみに、暗号化もハッシュ化もなされていない元の文を平文と呼びます。

暗号化

概要

デジタル大辞泉の解説
あんごう‐か〔アンガウクワ〕【暗号化】
《encryption》文章や電子データの情報を一定の規則に従って組み替え、通信途中に第三者に利用されないようにすること。受信者は暗号化された情報に逆の手続きを施して解読する。エンクリプション。→暗号 →復号 →共通鍵暗号 →公開鍵暗号

つまり、情報を他の人に知られないように隠す操作のこと。
平文を暗号化したものを暗号文と呼ぶ。

用途

主に、通信の盗聴対策や、情報の漏洩対策に使われる。
暗号化していないと、第三者に盗聴された場合、メールの中身を見られたりWebサイトとのやりとりを見られてしまう可能性がある。

可逆的

暗号化は第三者から知られないようにするためのものなので、メールなら受信側は正しく読めなければならない。
そこで、暗号文は復号して元の平文にすることができる。
この復号は暗号化の逆の操作になるため、暗号化は可逆的であるといえる。

代表的な暗号

  • シーザー暗号/カエサル暗号(Caesar cipher):アルファベット等を辞書順で任意文字数分シフトするというもの
  • RSA暗号:大きい桁の合成数の素因数分解が難しいことを利用した公開鍵暗号
  • AES:指定された操作を鍵長に対応した回数分行う 共通鍵暗号

ハッシュ化

概要

ハッシュ関数という特定のアルゴリズムを用いて、平文をハッシュ値に置き換える操作のこと。 平文が同じであれば同じハッシュ値になり、平文が異なれば基本的にハッシュ値も異なる(衝突する場合もある)。

用途

主に、パスワードの保存や改ざん対策に用いられる。
パスワードは平文がわからなくても、ハッシュ値が同じであれば認証できる。
改ざん対策では、まず「平文」と「暗号化されたハッシュ値」をセットで送る。 ここのハッシュ値は「平文」をハッシュ化したものだ。 受信側は、まず「平文」をハッシュ化する。これをハッシュ値Aとする。
そして「暗号化されたハッシュ値」を復号する。これをハッシュ値Bとする。
ハッシュ値Aとハッシュ値Bが同値であれば、改ざんはされていないと証明できる。

非可逆(不可逆)的

ハッシュ値は暗号文のように復号して平文にすることはできない。
逆の操作が不可能なので非可逆(不可逆)的だといえる。

レインボーテーブルと対策

平文とハッシュ値は1対1で対応しているが、それを逆手に取ったレインボーテーブルというものがある。 これは、予め平文とハッシュ値の対応表を作っておいて、実質的にハッシュ値から平文に復号できるというもの。 f:id:silmin:20190131041956p:plain それに、ある程度の文字数までなら全パターン網羅することが可能。

これは、saltというランダム文字列を前後に付加してハッシュ化したり、複数(数千~数万)回ハッシュ化したりすることで、平文を予測しづらくすることができる。 また、ハッシュ値を付加して更にハッシュ化するような手法もある。

2019年の抱負

akomktyr

ちゃんと進捗したい

2018年適当に生きすぎた感がとてもあるので、今年はちょっとは計画とかしてみようという風潮が自分の中で生えている。

やりたいことが多い

最近やりたいこと/やってみたいことがたくさんある。

IT分野では

  • プログラミング(なんか作っていたい)
  • ネットワーク
  • CTF(NW, Binary)
  • キーボード自作(IT?)
  • 自宅NAS構築

などなど、たぶんやりたいことは湧いてくるだろう。
IT分野以外では

  • イラスト
  • アニメ
  • UE4
  • ピアノ

あたりをやっていきしたい。

同時進行がキツイ

とりあえずやっていきをしたいけど、優先順位がつけられなくて泣いてる。
でも複数平行で進めていくと、どれも中途半端になっちまいそうだ...。

そこで僕は、やりたいことを一つメインに据えてある程度の期間はそれだけやる、他の事は息抜きでみたいな感じでやっていこうと思った。
そしてやってみて楽しければ続けて、そんなに響かなければやめる。みたいな。

優先順位がつけられない

正直これが一番きっつい。
これはその計画を作るときのモチベの高ぶり具合で雑に決めていいと思う。楽しければそれなりに続くだろうし。というかそうするしかない。

やっていき!