「ブログを書くまでがはてなインターン!」はてなインターンに参加してきました

8月18日から22日の5日間、株式会社はてなの京都オフィスで開催されたサマーインターンシップに参加してきました。 この記事では、インターンで得られた学びや体験をレポートします。

(今回のインターンには、5日間のオフラインコースと3週間のハイブリッドコースがあり、私は前者に参加しました。)

応募のきっかけ

以前から個人ではてなブログで記事を書いていたこともあり、はてなは自社プロダクトを持つ技術志向の企業というイメージを持っていました。

インターンの情報を知ったのは、IT企業のインターン情報がまとめられている魔法のスプレッドシートがきっかけです。そこで、はてなインターンの締め切りが迫っていることを知り、すぐに応募を決めました。

面接

面接では、githubで公開していたコードを見ながら、ここはどういう実装なのか?新たに機能を追加するとしたらどういう実装するか?というような質問に答えました。 あまり選考という雰囲気ではなく、雑談をしつつ、技術的なことを話すみたいな感じでした。

書類審査と面接の末、インターンに参加できることになりました!! 面接でリラックスして話せたのが良かったのかなと振り返って思います。

はてなは技術力の高い企業というイメージがあったので、挑戦する気持ちで応募しました。そのため、合格の連絡をいただいたときは、「まじか!通ったんだ!!」というのが率直な感想でした。

京都の雰囲気

人生初の京都でした。今まで関西にすら来た経験がなかったのでとても新鮮でした。

私は沖縄から参加したのですが、気温とか湿度に関しては沖縄と似ていたので少し安心しました。

また、本社がある烏丸は、オフィス街と飲み屋街が一体となっている街で、歩ける範囲で色々な面が見れる良い場所でした。沖縄で例えると県庁前と国際通りがぎゅっとなった感じです。

講義

webAPI, フロントエンド、データベース、AIエージェント、コンテナ、セキュリティなど webアプリケーションを作るために必要な幅広い知識を学べる講義が開催されていました。

印象に残った講義と内容

webAPIの授業

REST API、GraphQL、gRPCについて触れました。今まで、REST APIでしか実装を行ったことがなく、GraphQLとgRPCがAPIの技術だということもここで初めて知りました。(名前だけ聞いたことあるけど、内容は知らないみたいなことが多い、、、)

次webアプリケーションを作るときはGraphQL or gRPCを使ってみようと思います!!

コンテナ・コンテナオーケストレーションの授業

Kubernetesについて初めて体系的に勉強しました。Kubernetesは名前はずっと知っていて、いつかは勉強しなきゃなと思いながら早数年、、、ようやく触る機会が生まれたので嬉しかったです。

Minikubeという手元でKubernatesを動かせるライブラリを知ることができたので、家に帰ったら色々遊んでみようと思います。

ライティングの授業

また、はてな特有のものだと思うのですが、ライティングの授業がありました。 コンテンツマーケティングを担当している講師による「どうテックブログを書くのか?」にフォーカスした内容でした。

そこで特に印象に残ったのは「ブログを書くまでがはてなインターン!」という言葉です。 このブログを執筆しているのはそのためです。

課題

課題ではKubernetes上で動いているブログシステムを教材として用いました。 ブログ自体はGoで書かれていて、全体の概要を把握するのに時間がかかりました。(Goの経験が少なかったので、かなり苦労しました。)

ブログシステム自体は複雑だったのですが、課題の内容は、markdownで書いた文章をhtmlに変換するようにプログラムを書くというもので、メンターさんの手を借りながらなんとか実装できました。

周りのインターン生の雰囲気

インターンに参加していた方のほぼ全員が技術大好きな人で、圧倒されました。 驚いたエピソードとしては、ホテルの朝食を何人かで一緒に食べたときにVimについて語りあったことです。

課題でも、要求されているものよりもかなりすごい実装をしているインターン生が何人も居たので純粋にこの人たちすごいなと思っていました。

はてなの雰囲気

今回のインターンで一番印象に残ったのは、はてなの社員さんのインターンを盛り上げようとする熱意です。

講義が終わった後にはてなの社員さんに京都の街に連れっていってもらって、ご飯を食べたり、本屋さんで技術書探しをしたり、居酒屋で一緒に飲んだりしました。

どうやらはてなでは「インターン生が一番偉い」という文化があるらしく、講義や課題以外でも社員さんと交流することができました。

それ以外のエピソードで良かったものとして、オフィスにある呼び鈴を押すとメンターの誰かが来てくれるというルール(?)があり、それを押すと3~5人のメンターさんが「どうしましたか〜?」と言いながら飛んでくるという図が面白かったです。

まとめ

5日間にわたって開催されたはてなインターンでしたが、学んだことが多く、本当に密度の濃い時間でした。

良い体験すぎたので、自分の知り合いの後輩とかにも勧めていきたいです!

↓おまけ 美味しかったカレー

カレーの写真

個人的2024年良かったアニメに賞をあげる

この記事は琉球大学(知能情報)アドベントカレンダー Advent Calendar 2024の記事です。

adventar.org


2024年もそろそろ終わるということで、今年放送されたアニメの中から個人的に良いと思ったものに賞をあげたいと思います。

満足感が高いで賞

ONE PIECE FAN LETTER | アニメ動画見放題 | dアニメストア

https://cs1.animestore.docomo.ne.jp/anime_kv/img/27/40/2/27402_1_9_8b.png?1728288010350

国民的大人気漫画ワンピースのスピンオフ作品。2年後のシャボンディ諸島での再集結を一般人である少女の視点から描いています。

25分1話で完結するためかなり見やすいのにもかかわらず、視聴後は一本映画を見たかのような感覚になります、、、

ワンピースの本編はなんとなくしか覚えていなかったのですが、めちゃくちゃ楽しめました。世界観と麦わらの一味についてある程度知っていれば最低限楽しめると思います。

2期が待ち遠しいで賞

負けヒロインが多すぎる! | アニメ動画見放題 | dアニメストア

https://cs1.animestore.docomo.ne.jp/anime_kv/img/27/17/7/27177_1_9_8b.png?1717992223048

負けヒロイン(恋人の座を勝ち取れなかった女の子)が複数出てくる青春物語です。 物語の序盤でみんな負けヒロインになっちゃうというところから始まる今までなかったラブコメ(?)で、今年の夏アニメの主役といっても過言ではない人気っぷりでした。

ヒロインたちがみんなちょっと変で残念なのが良かったです。 また、大体こういうラブコメ(?)って主人公がやかましいんですけど、主人公の温水くんはちょうど良くて、うざすぎないお節介をしてくれるので助かりました。すべてのラブコメ主人公は彼を見習ってください。

切実に2期が来て欲しい。。。

1話冒頭が公開されていたのでぜひ! www.youtube.com

カラオケ賞

勇気爆発バーンブレイバーン | アニメ動画見放題 | dアニメストア

https://cs1.animestore.docomo.ne.jp/anime_kv/img/26/82/0/26820_1_9_8b.png?1702954804870

主人公イサミ・アオがブレイバーンに乗って、突如襲ってきた宇宙からの敵に立ち向かうという物語です。

opが「ババーンと推参!バーンブレイバーン」 edが「双炎の肖像」

とにかくカラオケで点数が出やすいです。筆者は歌下手なのですが、ギリギリ90点くらいでました。

www.youtube.com

www.youtube.com

十等分の花嫁賞

女神のカフェテラス(第2期) | アニメ動画見放題 | dアニメストア

https://cs1.animestore.docomo.ne.jp/anime_kv/img/27/13/8/27138_1_1.png?1718943306298

週刊少年マガジンにて連載中の大人気ラブコメ。待望(?)の第二期では、なんと女の子が5人増えました!

良い意味でちょうどいいラブコメで頭を空っぽにして見れます。 お酒を飲みながら、料理をしながら、掃除をしながら、課題をしながら、etc...

ただたまに本当に面白い回があります! 10分間ずっとヒロイン達が下ネタトークする回とかがあって侮れません。

自炊したくなるで賞

ダンジョン飯 | アニメ動画見放題 | dアニメストア

https://cs1.animestore.docomo.ne.jp/anime_kv/img/26/74/7/26747_1_9_8b.png?1702440291169

ダンジョン内で自給自足しながら、妹を救うために下層を目指すという物語。

ゲテモノ料理から普通に美味しそうな料理まで幅広く出てきます。 このアニメを見ていると、人間にとって食事とは重要なものであると再認識させられます。

筆者も簡単ではありますが、パスタを茹でながら視聴していました。


以上が受賞作品でした! 紹介していませんが、他にもフリーレン、ユーフォニアム、にごりり、忘却バッテリー、俺パリ、ガールズバンドクライあたりは本当に面白かったです。

Powerlevel10kを用いてmacのターミナルをいじってみた

はじめに

このページは琉球大学知能情報アドベントカレンダー Advent Calendar 2023の12月16日の記事です!

macのターミナルはデフォルトの見た目だとこのようになっていて、これはこれで落ち着くのですが、ちょっと物足りない気もします、、、

デフォルトのターミナル

そこで今回は下のようにターミナルの見た目をカッコよくしていきたいと思います。

改造したターミナル

環境

以下の環境を想定します。

  • macOS
  • zsh
  • ターミナル or iTerm2
    • iTerm2を推奨
    • macのターミナルだとコントラストを変更できないため、プロンプトの頭や尻尾の色が若干合わなくなります*1

Icebergの設定

Iceberg は、Vim および NeoVim 向けに、うまくデザインされた目に優しいダークブルーの配色です。 IcebergにはTerminal(iTerm2)版もあるのでそれを設定していきます。

Terminalの場合

公式ページの一番下にあるIceberg for macOSをダウンロードする。

ターミナルを起動し、上のメニューバーからターミナル>設定>プロファイルを開き、左下の◯の中に3つの点があるボタンを押して読み込むを選択します。 そして、先程ダウンロードした設定ファイルをインポートし、デフォルトのプロファイルに設定します。

ターミナルのプロファイル画面

iTerm2の場合

iTerm2用に移植されたこちらを使用します。 以下のコマンドを実行して設定ファイルをダウンロードします。

curl -O https://raw.githubusercontent.com/Arc0re/Iceberg-iTerm2/master/iceberg.itermcolors

iTerm2を起動し、メニューバーからiTerm2>Settings>Profiles>Colorsを開きます。 右下のColor Presetsのボタンを押して、importから先程ダウンロードしたファイルを指定します。

iTerm2のColorsの設定画面

Sheldonの導入

SheldonはRust製のプラグインマネージャーでzshBashに対応しています。

シェルのプラグインマネージャーにこだわりは無いのですが、README曰く高速とのことなので、今回はSheldonを使用していきます。 まず、homebrewでSheldonをインストールします。

brew install sheldon

次に、Sheldonの設定ファイルを生成します。下のコマンドを実行すると~/.config/sheldon/plugins.tomlが自動で生成されます。(~/.configフォルダがない場合は先に作っておいてください)

sheldon init --shell zsh

~/.zshrcに以下を追記します。

eval "$(sheldon source)"

Powerlevel10kのセットアップ

Powerlevel10kzshのテーマで、プロンプトをカスタマイズできます。

フォントの追加

通常のフォントだとアイコン等が文字化けしてしまうため、こちらの手順に従い専用フォントをターミナル(iTerm2)に適用してください。(Nerd Fontsだったらなんでもいいっぽい)

powerlevel10kのインストール

~/.config/sheldon/plugins.toml(Sheldonの設定ファイル)に以下を追記します。

[plugins.powerlevel10k]
github = "romkatv/powerlevel10k"

その後、以下のコマンドで~/.zshrcを読み込み、powerlevel10kをインストールします。

source ~/.zshrc

以下のようなウィザードが表示されるので、設定を行っていきましょう。

powerlevel10kのウィザード画面

  • オススメ設定
    • Prompt Style → (3) Rainbow.
      • プロンプトの背景色を変えたいなら必須
    • Prompt Height → (2) Two lines.
      • プロンプトが長い場合はコマンドがすぐに折り返すので、2行に分けた方がいい
    • Prompt Frame → (1) No frame. or (2) Left.
      • 右側にフレームがあるとコマンドと出力をコピペする際に面倒くさい
    • Prompt Spacing → (2) Sparse.
    • Enable Transient Prompt? → (n) No.
      • Yesを選ぶと現在のプロンプトだけが表示されるので、かっこよさという観点からするとNoを選んだほうが良い

色の変更

~/.p10k.zshを書き換えることで、プロンプトの色等を変更することができます。 使用できる色は0~255までの256種類あり、以下のコマンドで確認することができます。

for i in {0..255}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done

使用できる色を出力させるコマンド

以下は冒頭で紹介した改造したターミナルの図の設定例です。(ウィザードでPrompt Style → (3) Rainbow.以外を選択した場合、設定項目が~/.p10k.zshに存在していないことがあります)

  • git関連
    • 状態で色を変更できるようだったが、面倒くさかったので全て同じ色に設定した。
    • POWERLEVEL9K_VCS_CLEAN_BACKGROUND=3
    • POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
    • POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=3
    • POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3
    • POWERLEVEL9K_VCS_LOADING_BACKGROUND=3
  • ディレクトリ関連
    • POWERLEVEL9K_DIR_BACKGROUND=37
    • POWERLEVEL9K_DIR_FOREGROUND=254
    • POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last
    • POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=254
  • アイコン関連
    • POWERLEVEL9K_OS_ICON_FOREGROUND=254
    • POWERLEVEL9K_OS_ICON_BACKGROUND=240
  • condaの仮想環境の表示
    • POWERLEVEL9K_ANACONDA_FOREGROUND=254
    • POWERLEVEL9K_ANACONDA_BACKGROUND=37
  • 時間関連
    • POWERLEVEL9K_TIME_FOREGROUND=254
    • POWERLEVEL9K_TIME_BACKGROUND=240

注意するところ

テキストのコントラストを最小にする

テキストのコントラストが大きいと以下の図のように、プロンプトの頭や尻尾の部分だけ色が若干合いません。

コントラストを上げた場合

そのためコントラストを最小に設定します。しかし、はじめに述べた通りmacのターミナルだとこちらの設定ができません。このためiTerm2での環境構築を推奨しています。*2

iTerm2を起動し、メニューバーからiTerm2>Settings>Profiles>ColorsMinimum Contrastを0に設定してください。

画面を半透明にしない

Minimum Contrastを0に設定していたとしても、画面を半透明にすると以下の図のようにプロンプトの頭や尻尾の部分だけ色が若干合わなくなります。

画面を半透明にした場合

※こちらは調べたところ参考になりそうな情報がありませんでした。

※半透明にしながらプロンプトの色も変わらない方法を知っている方がいれば教えてください!

2024/05/05追記)itermの場合、Settings > Profiles > Window にてKeep background colors opaqueのチェックボックスをonにすると半透明にしてもプロンプトの色が変わなくなります

フォントサイズを変えてみる

フォントサイズによっては以下の図のようにプロンプトの形が崩れることがあります。*3 以下はフォントサイズが12の場合です。

プロンプトの形がずれる
これはフォントサイズを変更すると解消する場合があります。 私の環境ではフォントサイズを13に設定することで形が綺麗になりました。

参考にしたページ

知能情報へのコース変更についてまとめてみた

注意

この記事は私の体験と執筆時(2023年2月)に琉大教務情報HPから見れる資料をもとに作成したため情報が古くなる可能性があります。正確な情報が知りたい場合は、年次指導教員や工学部の事務室へ確認してください。

対象読者

  • 知能情報へのコース変更を考えている人

コース変更とは

琉球大学工学部では2年次から別のコースへ移動できる制度があります。

概要は「琉球大学 教務情報->学生便覧->工学部->コース配属の確定に関する申し合わせ」 から確認できます。

以下のリンクは 令和4年度のものです。

知能情報コースへの変更

コース変更の中でも知能情報コースへの変更は、そこそこ難易度が高いと思われます。

理由としては以下の2つが挙げられます。

  • 移動希望者が多い
  • 評価項目が多い

 1年前期の「キャリアデザイン入門」の最後でコース配属アンケートをやると思います。私の年では、他コースへの移動希望者が各5名前後なのに対し、知能情報コースへの変更を希望する学生は約40名ほどいました。

 また、他コースへの移動では評価項目が3~4つなのに対し、知能情報コースは5つありました。

評価方法

知能情報コースの評価項目は以下の5点です。

(※これらは私がコース変更したときの話なので変更される可能性があります)

  • GTEC
  • EMaT
  • GPA
  • 志望理由書
  • 面接

各項目について少しだけ説明します。

GTEC

GTECとはベネッセが行っている英語の4技能テストです。

www.benesse.co.jp

琉大では「大学英語」履修者の統一試験としてGTECが行われています。

今年度は8月10日に開催されたようです。

(カレンダーでは「英語全学統一テスト 」と書かれています。)

www.u-ryukyu.ac.jp

私のときは、GTECを使わず「大学英語」の成績を用いました。

 

EMaT

EMaTとは工学系数学統一試験のことです。私のときはEMaTか「工業数学1」の成績のどちらかを使うことができました。

www.aemat.jp

 

GPA

GPAとは成績評価を数値にしたものです。以下のURLから琉球大学のGPA算出方法が確認できます。

https://rais.skr.u-ryukyu.ac.jp/wordpress/wp-content/uploads/2022/03/R4GPA.pdf

0.0~4.0の間で、高ければ高いほど有利です。

志望理由書

志望理由書は「コース配属の確定に関する申合せ」の3ページ目です。

面接

面接は2月の中旬に行われました。

一番配点が高いです。

 

面接について

おそらく、コース変更の一番の難関は面接だと思います。

複数の教授に囲まれて質問攻めに合いました。

私が面接において重要だと感じているのは以下の2点です。

  • 志望理由をはっきりさせておく
  • 面接で話すネタを作っておく

 

志望理由をはっきりさせておく

志望理由書を作る段階から色々突っ込まれても大丈夫なように整理しておきましょう。

「プログラミングを学びたいからです!」みたいな理由だと少し弱いと思います。(みんな思いつく)

面接で話すネタを作っておく

私のときは、「プログラミングしたことはあるか?」「なにか作った経験はあるか?」などの質問がきたので、そういった質問に答えられるように話題作りをしておきましょう。

 

プログラムを組んでなにかを作るみたいな経験をしてたほうがいいかも(小さいものでも話のネタになる)

 

スケジュール

年によって結構変わると思うので、年次指導教員や工学部の事務室に確認してください。GTECやEMaTの日時は学年暦や各HPで予め確認しておくことをおすすめします。(直前で知っても対策できないから)

 

コツ

  • お知らせ(メール等)をちゃんと確認する
  • アンケートの人数にびびらない(実際に面接に来る人は少ない)
  • 面接で話すネタを作っておく

 

この記事を書いた理由

  • コース変更の詳細が発表されるのが遅く(自分のときは1年後期に入ってから)、対策しづらいから。
  • 詳しい情報を得るためには、先輩に聞くしかなくコミュ力勝負になってしまうから。

まとめ

ということで知能情報へのコース変更についてまとめてみました!

私もコース変更して良かったと心から思っているので、コンピュータやプログラミングに興味がある人は一度検討してみてはいかがでしょうか。

 

また、何度も注意していますがこの記事は私の体験と執筆時(2023年2月)の琉大教務情報HPから見れる資料をもとに作成したため情報が古くなる可能性があります。正確な情報が知りたいのであれば、年次指導教員や工学部事務室などに聞いてみてください。

 

以上です。

 

ABC253振り返り

A問題

from statistics import median

lst = list(map(int, input().split()))
med = median(lst)

if med == lst[1]:
print("Yes")
else:
print("No")

 

与えられた3つの値から中央値を求める問題。median関数を使って解いた。

 

B問題

h, w = map(int, input().split())
arr = [["-"]*w for i in range(h)]
for i in range(h):
arr[i]=input()
count = 0
for i in range(h):
for retu in range(w):
if arr[i][retu] == "o" and count == 0:
x_a = retu
y_a = i
count += 1
elif arr[i][retu] == "o" and count == 1:
x_b = retu
y_b = i
break

x_kyori = abs(x_b - x_a)
y_kyori = abs(y_b - y_a)


print(x_kyori+y_kyori)
2つの"o"の距離を求める問題。
oが同じ行にある場合を考慮せずにエラーを出してしまった。

C問題

q = int(input())
arr = [ for i in range(q)]
s =
for i in range(q):
arr[i] = list(map(int, input().split()))

for i in range(q):
if arr[i][0] == 1:
s.append(arr[i][1])
elif arr[i][0] == 2:
equal_count = s.count(arr[i][1])
min_num = min(equal_count, arr[i][2])
for x in range(min_num):
s.remove(arr[i][1])
else:
print(max(s) - min(s))
上のコードで提出したがTLEがでてしまった。
解説を聞いてもわからなかったので、来週までに復習したい。

D問題

import math
n, a, b = map(int, input().split())

ans= (n * (n+1))//2

a_count = n//a
a_ans = (a_count * (a_count+1) * a)//2

b_count = n//b
b_ans = (b_count * (b_count+1) * b)//2


c = (a*b)//(math.gcd(a, b))
c_count = n//c
c_ans = (c_count * (c_count+1) * c)//2

print(math.floor(ans-a_ans-b_ans+c_ans))
本番ではCの途中で時間切れしたのでDは後日解いた。
少数を整数に直すときに int() , floor() を使うと上手く行かなかった。原因は不明。
下にWAの回答を載せておく。
import math
n, a, b = map(int, input().split())

ans=(1/2) * n * (n+1)

a_count = math.floor(n/a)
a_ans = (1/2) * a_count * (a_count+1) * a

b_count = math.floor(n/b)
b_ans = (1/2) * b_count * (b_count+1) * b


c = (a*b)/(math.gcd(a, b))
c_count = math.floor(n/c)
c_ans = (1/2) * c_count * (c_count+1) * c

print(math.floor(ans-a_ans-b_ans+c_ans))