Jig.jp 第2回オフラインインターンシップAチーム 4日目!

本日ブログ担当のAチームの奈良高専から来たよーいちです!

 

毎日のように撮影している出勤画像です。今日はチームのくらっけが起きるのが遅く2人での出勤となりました。(僕たちが出勤No.1でした)

筋トレ

今日もなかやまきんに君Youtube動画を参考に筋トレから始まりました。

内容は【在宅ワーク用】1回5分で全身出来る世界で一番楽な座って ...www.youtube.com › watchになります。

 

 

昨日がすごくハードな筋トレだったため、今日は比較的楽でしたが、昨日の筋肉痛がすごく痛い一日でした。

座ってできる世界で一番楽な運動

開発

丸一日開発に使える日としては、最終日である4日目。昨日までは2ずつ2組でプログラミングを行う、ペアプログラミングで作業をしていたのですが、ここで新たな試みとして4人全員で一緒にプログラミングをするモブプログラミングを導入しました。大きなディスプレイをお借りすることができたのが大きいです。また、なぜか途中からテスト駆動開発(TDD)が自然な流れで導入されました。

 

初めは少しモブプログラミングで会話が思うように弾まずみませんでしたが、徐々にみんな慣れて形になってきました。どうやらテスト駆動開発はモブプログラミングと相性がいいようで、テストを書いていくうちにいつの間にかテストを書くのが実装よりも先になっていました。

 

LT

jig.jpの技術共有会の日だったということでその様子を13時から拝見させていただきました。

 

みんなのキーボード!

jig.jpの社員さんが普段使用しているキーボードについての発表でした。定番のHHKBから光るゲーミングキーボード、2つに分かれているキーボード、トラックボールがついているものやなかにはDvorak配列の自作キーボードまで個性豊かなキーボードがありました。

Dvorakキーボードは左側の中央の列に母音があって、よく使う子音が右の打ちやすいところにあるそうです。自作キーボードでカラフルで音がうるさいそうです。

個人的に気になったのは、2つに分かれたキーボードで、その2つの間にテンキーを設置したものでした。デザイナーの方だそうで、いろいろなショートカットを左手でテンキーで操作したりしながらマウスを操作できるそうです。

 

ちなみに僕のスタイルはPCスタンドを用いて、キーボードはAppleのMagic Keyboard + Magicです。下を向かなくて済むので視線が下にいかない上に、操作性がMacと当然合うので気に入っています。

 

画像生成AI DALL-E mini

最近話題のAIでの絵作成アプリケーションの発表でした。

「〜をするdenoくん」というお題で任意の入力の文字と元画像からAIで絵を生成するWebアプリを制作されたそうです。

まず、denoくんは固有名詞なので、そこを「夜に雨に打たれる白い恐竜」などという記述にして、deepLの力で英語に翻訳してAIで絵を生成するそうです。Deno Deployで公開されていましたが、Deno DeployのCPUは非力なので、そこはGoogle ColabのCPUパワーで生成しているとありました。それぞれは足りない部分があっても、無料のサービスをいくつか組み合わせれば作れる、いい時代ですね。

 

「ボーリングをするdenoくん」や、「DJするdenoくん」など、数多くの絵が描かれていました。

僕が気に入ったのは「この世界を救うために舞い降りた伝説のdenoくん」ですね。尻尾が月になっていて神秘的な感じが好きでした。

 

ボドゲのお供に開発を!

身近なところにも課題はあり、それは開発につながるというお題でした。発表者の方はボードゲームが好きなようで、その中でもおすすめのガンナガンというものがあるそうです。

https://sites.google.com/view/gunngun/game

2人用で、カードを用いたライフポイント(HP)のあるバトルボードゲームのようで(誤りがあったらすみません)紙や電卓などを用いてライフポイント(HP)の管理を行なっていたらしいのですが、どうもそれが面倒臭いと。そこで作成されたのがライフポイント管理アプリです。

初期値が30ptのライフポイント(HP)カウンタが2つあるようなアプリで、そのカウンタは2人にとって見やすいようにそれぞれ180度を回転させる機能がついていました。

フォントがいかにもゲームらしくてカッコよかったです。

TRPGとかでもHPやMP、SUN値などややこしい頻繁に変動する値の管理が面倒なのでそういうものも作ってもいいなと(既にありそうですが)思いました。

 

ちなみに僕はカタンの開拓者たちというボードゲームが好きです。実はちょうどJavaでPCで動作するオンライン対戦可能なカタンアプリを作成する予定を立てていたりしました。(完成は未定です)

 

ナゾトキCTFというオンラインイベントに参加してみた話

CTF(Capture The Flag: 旗取りゲーム)という情報セキュリティの知識で問題を解くゲームについてのお話でした。AttackチームとDifenseチームに分かれてFlagを奪い合うタイプや、問題を解いた量を競うタイプなどがあるそうです。

 

XSSSQLインジェクションなど基本的な攻撃を利用して答えを手に入れたり、ネットワークの解析や実行ファイルの設置などで答えを入手していくそうです。例では、コンソールからGETメソッドのクエリの法則を調べてリクエストのクエリパラメータをいじり、与えられたインターフェイスでは得られないフラグを取得する問題でした。

 

日頃から学校で学んでいる知識が使えそうな競技だと思いながら聴いていました。普段活かしにくい授業の知識なども使えそうなので、授業の知識を活かしたい方はぜひやって見てください。(他の場所で悪用すると不正アクセス禁止法などに引っかかります)

 
子供向けアプリ開発

2人のお子さんがいる方の発表でした。年齢もまだ幼稚園以下で、文字を少しずつ覚え始める年頃。子育ての成長の過程で子供さんのために制作したアプリを紹介していただきました。

 

1歳の頃。まだ話すこともできず周囲の音や景色を見て学習する頃です。そこで、PCでキーを押したらそのキーの日本語入力に対応するひらがなを大きく画面表示し、読み上げてくれるアプリです。これがあれば自然に音を聴いて覚える段階で音と文字の組み合わせも一緒に覚えることができますね。早めに文字を覚えるにはとてもいいアプリだと思いました。

 

5歳の頃。ひらがなを書く練習をする時代です。そこで文字の書き取り練習帳ならぬ文字の書き取りアプリを制作されたようです。薄い灰色のお手本の文字をiPadに移し、それをApple Pencilでなぞり、グレーのお手本の部分のうち、黒く塗りつぶされた割合で評価が「じょうずだね!」や「さあがんばろう!」と変わるようです。

しかし、子供も賢いです。なんとマスの全てを黒く塗り潰せば「じょうずだね」と評価されることに気づいてしまいました。Issueの発生です。

ならばお手本の字の範囲外がお手本の字の3倍以上塗りつぶされていれば「まっくろだよ!」と評価するように変更。

しかし、それでも対抗して、子供もある程度お手本の字に沿ってギリギリのラインで塗り潰します。

結果は、子供の勝利となりました。

 

ふわっちを支える( ?)おやつランドのおやつたち

jig.jpのおやつコーナー、おやつランドのおやつ人気投票の結果発表でした。

5位 パウンドケーキ

4位 アーモンドフィッシュ

3位 カルパス

2位 ようかん

1位 カントリーマウム

でした。

2年前は源氏パイだったそうです。

大人の味覚は子供と大して変わりませんね。(大人からも子供からも愛されるいいお菓子ばかりです)

 

僕のやらかし大公開

長年エンジニアを続けてきて、その中でのやらかしの数々を語っていただきました。僕はこの発表が一番面白かったです。

このやらかしは、あまり言っていいものなのかわからないので綴りませんが、やらかした後の対応がとても素晴らしいなと感じました。自分達が使っているところでやらかしたことがあったら、それはやらかすようなUIであるということ。ではそのUIをやらかさないように変更しようと、チェックを行なっているのが素晴らしいと思いました。

クラウドサービス系などの他社サービスのやらかしに関しては、仕方なく複数人で目視でチェックという形のようです。前の人がよしって言っているし次の人もいるからよし!ってやつですね。

キャッシュのやらかしについては、落とし穴が多いのでそれ専用の本でもあれば読んでみたいなと思いました。バックエンドで毎回同じイメージのレスポンスを返すのでは効率が悪いので、レスポンスのキャッシュを行い、返却することにしたというものでした。どうやらイメージの値のキャッシュではなくレスポンスのキャッシュを行い、そのレスポンスにはセッション情報も一緒にキャッシュされてしまっていたために他のユーザの情報が間違って表示されてしまったというものでした。大事故です。

普通ならそんな間違いしないだろうと感じるかもしれませんが、セッション情報はフレームワークなどを用いれば割と隠れてしまっているものです。キャッシュをする際には何をキャッシュしているのか、きちんと確かめなければいけませんね。

また、キャッシュの値が途中で変更されてしまうミュータブルなオブジェクトをキャッシュする問題なども紹介されていました。

僕はどこで何が変更されているかわからない状態が大変苦手なのでimmutable狂信者です。多少効率が悪くなろうともできる限りmutableにはしません。しかし、キャッシュは効率化を図るためのものです。キャッシュをする際にはimmutableの原則を破ってしまうかもしれません。気をつけましょう。

 

喧嘩

僕たちのチームは大変仲が良く、毎日ワイワイ言い争いながらペアプロやモブプロに勤しんでいます。

 

僕たちのチームはReactでフロントエンドを開発しているのですが、今日初めてフレームワークの罠にハマりました。Reactどうやらかなり頻繁に再レンダリングを行い、変数の更新がされるようなのですが、そのせいで保持しているWebSocketのインスタンスが頻繁に切り替わり、エラーが発生してしまうということが起こりました。useRefやuseEffectを用いて対応しましたが、あれを一人で解決するのは難しかったため、モブプロは偉大だと感じました。

 

チームメンバー4人のうち、3人がReactを使えたためReactを使用しましたが、熟練者は一人もいません。フロントエンドのフレームワークは熟練者の方がいないと落とし穴が多くて難しいですね。

 

僕はReactも使えるし、好きですが、Vue3+TypeScript+Sass派なのでNext+TypeScript+Emotion派のチームメンバーくらっけ君とはよく言い争っていますね。楽しいです。メンターさんにも主張が強いチームだと笑われました。

 

モブプロ中もセグウェイに乗っていたり、楽しいチームです。

 

ペアプロ+プロダクトバックログ+スプリント+TDD。なんだかエクストリームプログラミング(XP)らしくなってきました。

 

サーバーサイドは妥協案でdenoのサーバーサイドフレームワークFresh+TypeScriptを使用していますが、nodejsにするかなどももめましたね。僕的にはServer-Side SwiftのVapor一択なんですが。

 

このまま仲良く明日最終日も頑張りたいと思います。

 

最後に

本日はなんと僕の19歳の誕生日です。自宅以外で過ごした誕生日は初めてでしたね。みんなからは200円分ずつ奢ってもらいました。

 

みんなありがとう! サランへ!