社会人になって1年が経ちました。
どうも~

私です。
情報系の知識が冗談抜きで0なのに、なぜかゲーム会社でプログラマやってます。
社会人一年目で何考えて何してどうだったか書きます。 完全に自分の忘備録なので殴り書きです。
- 1年目の気持ちなんて忘れるので今後教育する立場になったときのためにメモを取る。
- 一年目の立場に甘えてラインを探る
- 体のデバッグに半年以上費やした
- 同期は大切にする
- 報連相を完璧にするのは無理
- 会社の組織、制度を理解する
- 自分が3、5、10年後になるべき上司を探す
- 他のセクションの仕事もできるだけ見る
- されてうれしかったこと
- こうしてほしかったこと
- 他人の仕事を見る
- タスクに対して考える癖をつける
- 同じミスは二度としない
- 完全に個人的なこと
- 終わりに
1年目の気持ちなんて忘れるので今後教育する立場になったときのためにメモを取る。
この記事です。
一年目の立場に甘えてラインを探る
1年目なので、注意されやすい(はず)なので、温度感とか、ラインが微妙なところはまあまあ上司の見えるところで自分の思うようにやりました。因みに3回ぐらい怒られました。あと面談でずけずけと会社のことを聞きまくったりしました。ベテランになったらレッテルだけ張られてスルーされそうなのであと2年は常識の範囲内で好き勝手やるつもりです。
体のデバッグに半年以上費やした
睡眠時間何時間まで削れるかとか、酒飲んでも大丈夫かとかをずっと調査してました。 あとは死ぬほど眠い理由が肩こりだったりだとか、残業は一日おきにした方が、疲労がたまらないので効率がいいだとかペースを頑張ってつかもうとしました。 他にも大学生時代は春先ニートしてたので実は三寒四温で死ぬほど体調を崩しやすいなどが発覚したりしました。
同期は大切にする
PGの同期が5人で、まあタイトル配属になっちゃったので一年通して交流してたのは一人だけなんですけど、一人いるかいないかで滅茶苦茶心持ちが変わります。よっぽど嫌じゃない限り同期とは交流をして仲良くなっていたほうがいいです。多分。あと、仕事のやばい話とかも聞けて面白いし、同期だと気軽に聞けるので定期的にお話しするのをお勧めします。自分はコミュ障なので自分から聞きに行くことはできませんが...。
報連相を完璧にするのは無理
これガチなんですけど、自分はホウレンソウうまいと思ってました。が、実際そんなことなかったです。
頻度とタイミングを見計らってたら先に向こうから確認が来たり、遅れそうなタスクを「まだいける...」と頑張った結果遅れたり、あり得ないぐらいタスクを並列進行してたら漏れてたなどがあります。全部飛んできた瞬間にメモを取るようにしたら、あまり漏れなくなりました。(それでもたまに漏れる)
会社の組織、制度を理解する
研修中はまあまあ余裕があったので、社内ページを徘徊してました。多分同期で一番会社に詳しいと思います。あと緊急時(体調不良や電車遅延など)の会社への連絡方法は割と早めにメモっとくとよいかもし出ません。
自分が3、5、10年後になるべき上司を探す
何かで見たのでその通りにしました。正直これは配属運が結構あると思います。見つかると、自分に足りないものがかなり明確にわかるのでお勧めです。
他のセクションの仕事もできるだけ見る
業種がアレなので若干汎用性があるかはわかりませんが、関係するセクションの仕事内容はおおむね把握しておいた方がなんかあったとき楽です。自分は後ろの同期のセクションの内容を逐一聞いて把握してます。
されてうれしかったこと
研修で一通り必要な技術を教えてくれたのはかなり良かったです。自分はエセプログラマーなので知識0でしたが、おかげで何とかなりました。
あとはプロジェクトにアサインされたとき、取りあえず検証タスクを振られたのは本当に助かりました。コードも読んで実装手段の大まかな検討をつけるのですが、いきなりアサインされて「ハイ実装してね」といわれるよりは、読むだけでよかったりするのでスムーズに入ることができました。
後これは運なのですが、上司がコードレビューを毎回してくれるのは本当に助かりました。理由付きでレビューしてくれるのでありがたかったです。
あと新人はみんな死ぬほど目をかけてもらっていて、結構ケツ吹いてもらえるので取りあえず目の前のことに集中できるのは本当に助かってます。余裕が出たら、今拾ってもらっているところも自分でできるようにしたい。
あと上司がクソ休むのも助かりました。めっちゃ休みがとりやすい。これは完全に社風なんだろうけど。
こうしてほしかったこと
新人研修1か月は短い。せっかく仲良くなりかけてたのに、研修が終わってしまって各タイトルにアサインされてしまったので辛かった。まあ平常時はもうちょっと長いらしいので、コロナだから仕方ない部分もあります。
あと他セクションの同期との交流もほぼ無いです。仕事でコミュニケーションをとることはまあまあありますが、それ以外で~ってなるとほぼ無いです。まあ日報自由に書いていいので日報でコミュニケーション取ればいいんですけど、コミュ障なのでそれはとても難しい...。
他人の仕事を見る
上司に飛んでるメンションを盗み見したり、他の人との会話などは聞き耳たてたりします。普通に情報の幅が広がるので、「そういえばこういう話ありましたよ」と仕事の話が進みやすかったりします。
どの人がどのぐらいの仕事を任されていてこなしているかも、将来的な指標になります。あと、個人的に将来PMやりたい~と思っているので、どの人がどのぐらいのタスクをしてるのかは見といたほうがいいなってのもあります。
タスクに対して考える癖をつける
これは完全に職業的なあれですが、オワ実装みたいなのが降ってきたとき、自分が上の立場になって同じ辛さを味合わせないために「これなんでこうなったんだろ...」というのは考えるようにしてます。逆に死ぬほど楽な実装はなんで楽なのかも考えるようにしてます。プロジェクト終わったらリーダーに直で聞くと思いますが。
同じミスは二度としない
これはマジで一番大事にしてます。かなり色々目をかけて頂いてて、逐一注意もらったりしてるので、同じことで突っ込まれないようにはしてます。まあ同じミスしなくても死ぬほど突っ込まれるのですが。
完全に個人的なこと
アセットに一貫性がないのをやめてほしい。多分デザイナーとプログラマ間のすり合わせがうまく行ってないんだと思う。確かにアセット作成のたびにすり合せしてたら時間が取られるので、最初に使うGUIを洗い出して、厳密にルールを作ってほしい。ていうかGUIなんて新しいものほとんどないんだから既存のものは全部洗いだしていいと思う。ぶっちゃけプログラム上で追加仕様を想定していないものは修正できるんだけど、アセットでそれされるとまあまあ頭が痛くなってしまう。ただデザイナーが忙しいのもわかるので、その辺をちゃんと取り決めてほしい。キックオフMTGの前に一日使っていいからプログラムに目を通すのもありなんだけど、3000行超えると流石に時間取られるので何とも言えない。何が正解かはわからない。
終わりに
まあいい会社に入れて頂けたと思います。自分はホワイト企業だと思ってますが、世間一般にはブラック企業らしいです。まあ確かに毎日みんな残業してるしブラックなのかも...。
もしかしてこれが「やりがい搾取」ってやつなんですか...?
取りあえず20年ぐらいは続けるつもりで頑張ります。
最後に好評だった自分の金言で締めたいと思います。

次の自分語り記事はは「初タイトルが終わりました。(仮)」です。ではまたお会いしましょう。
マイクラのマルチサーバー建てた話
バニラで建てたよ!!!
環境!!!!!!!!!!!!!!
CentOS7!!!!!
ConoHa VPS 2GBプラン!!!!!!!!!!!!!!!!!!!!!!!!!!!
Minecraft ver1.14.4!!!
参考サイト様
ConoHaにした理由
いつもはさくらのVPS使ってたんですが、初期費用が高いのと2か月前払いなのが辛いかもな~という理由で、今回は初期費用いらないConoHaにしました。
だって1か月以上マルチサーバー続いたことないし。
初期設定省略!!!
普通にユーザーを追加したり、権限をいじったり、firewallcmdの設定をしたり、sshの設定をしたり、ポートを閉じたり開いたりした
色々入れる
Javaのインストール
sudo yum install java
screenインストール
本当はdockerでやりたかったのですが、帰省が迫ってたのでめんどくさいと思い参考サイトの手順通りにやりました。
また時間空いたらdockerでたてなおしたいです。
sudo yum -y install screen
マイクラのサーバーを動かす
ディレクトリ作成
mkdir mcsv cd mcsv
マイクラのサーバーを落とす
wget https://launcher.mojang.com/v1/objects/3dc3d84a581f14691199cf6831b71ed1296a9fdf/server.jar
起動
java -jar server.jar
Windowsと同じく色々生成されてるはずなので
vim eula.txt
でeula=trueにする
もっかい起動してみる
java -jar server.jar
ip:25565で接続。
screenで起動してみる
screen -AmdS minecraft java -Xmx1024M -Xms1024M -jar server.jar nogui
ここコピペガバなので無駄なコマンド多そう。
自動バックアップスクリプト、書くよ!
書くと言ってもコピペなんですけどね
vim backup.sh
#!/bin/bash
SERVICE='server.jar'
USERNAME='hoge'
SCNAME='minecraft'
MC_PATH='/home/hoge/mcsv'
BK_PATH='/home/hoge/bu'
BK_TIME=`date +%Y%m%d-%H%M%S`
BK_NAME="$BK_PATH/mc_backup_full_${BK_TIME}.tar.gz"
BK_GEN="3"
XMX="1024M"
XMS="1024M"
cd $MC_PATH
ME=`whoami`
if [ $ME == $USERNAME ] ; then
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "Full backup start minecraft data..."
screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."\015'
sleep 10
screen -p 0 -S $SCNAME -X eval 'stuff "save-all"\015'
screen -p 0 -S $SCNAME -X eval 'stuff "stop"\015'
echo "Stopped minecraft_server"
echo "Full Backup start ..."
tar cfvz $BK_NAME $MC_PATH
sleep 10
echo "Full Backup compleate!"
find $BK_PATH -name "mc_backup_full*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
echo "Starting $SERVICE..."
screen -AmdS $SCNAME java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui
else
echo "$SERVICE was not runnning."
fi
else
echo "Please run the $USERNAME user."
find ${BK_PATH} -name "*.tar.gz" -mtime +7 -delete
#cd /home/hoge/bu
#./dropbox_uploader.sh delete bu
#./dropbox_uploader.sh upload /home/hoge/bu/ /bu
権限与える
chmod u+x backup.sh
crontab -e
0 12 * * * ./home/hoge/backup.sh
dropboxにぶん投げる処理は省略、終わり! 次回、spigotにしてdockerでたてたい編
追記
spigotにはしたけどdockerで建てるのはよく考えたら意味がわからんくなったのでなくなった
Dockerで建てたGrowiの自動バックアップをDropboxでとるようにした話
環境
さくらVPS
CentOS7
Docker version 1.13.1
docker-compose version 1.18.0
参考サイト様
おしゃれなMarkdown対応wiki : Growiを構築運用する - Qiita
Growiのバックアップとリカバリの手順 - Qiita
第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 | Device Plus - デバプラ
【Dropbox】scriptを使用してのファイル転送処理 - Qiita
バックアップファイルの作成
以下のコマンドでアップロードファイルをバックアップする。
tar -C {Growiセットアップパス} -czf uploads.tar.gz public/uploads
以下のコマンドでデータベースをバックアップする。
# mongodump -d {Growiデータベース名} --gzip --archive=dbdump.gz
バックアップファイルを自動で生成するためのスクリプトを書く
毎日AM7:00にバックアップを取得するスクリプト。バックアップデータは全て1つのアーカイブにまとめる。 このままだとバックアップが溜まる一方になってしまうため、7日前のバックアップを削除するコマンドも実行する。
# cd /usr/local/bin # vi backup.sh
INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`
# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz
# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete
上をbackup.shに書き込む
# chmod u+x backup.sh
でbackup.shに権限を与えて
# crontab -e
0 7 * * * /home/tpp/wiki/backup.sh
cronに以上の設定を追加
Dropboxへファイル転送
アップロードしたいディレクトリに移動してスクリプトファイルをDL
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
ダウンロードできたら、実行権限を与えて、スクリプトを実行。
chmod +x dropbox_uploader.sh ./dropbox_uploader.sh
めんどくさいから 第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 | Device Plus - デバプラ を見て
ファイル転送も自動化
色々書くのめんどくさ、 できたものがこちら!
INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`
# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz
# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete
cd /home/tpp
./dropbox_uploader.sh delete backup
./dropbox_uploader.sh upload backup backup
追記
INSTALL_PATH=/home/tpp/wiki/growi-docker-compose/growi
BACKUP_PATH=/home/tpp/backup
TODAY=`date +"%Y%m%d"`
TODAY2=`date +"%Y%m%d"+"g"`
# Backup
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/${TODAY}.tar uploads
mongodump -d growi --gzip --archive=/tmp/dbdump.gz --quiet
tar -C /tmp -uf ${BACKUP_PATH}/${TODAY}.tar dbdump.gz
gzip -f ${BACKUP_PATH}/${TODAY}.tar
rm -fR /tmp/dbdump.gz
cd /home/tpp
docker run -it --rm --link growidockercompose_mongo_1 --network growidockercompose_default --volume $(pwd):/backup mongo bash -c "mongodump -v --host growidockercompose_mongo_1 --db growi --out /backup"
tar -cvf ${TODAY2}.tar growi
gzip ${TODAY2}.tar
mv /home/tpp/${TODAY2}.tar.gz ${BACKUP_PATH}
# Delete OldBackups
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +7 -delete
cd /home/tpp
./dropbox_uploader.sh delete backup
./dropbox_uploader.sh upload backup backup
記事データのバックアップができてなかったので色々追加しました。
本当は一気にtarでまとめてしまいたかったのですがコマンドオプションがうまく扱えないため死亡。
そもそもまとめる必要ない
これに割いてる時間もないので、結果やっつけになりましたがちゃんと取れてはいるのでまあ良しとしましょう。
追記2
そもそもこれじゃバックアップできてないらしい(自分は出来てると思うんだけど試すのがめんどくさい) mongodbのリストア機能を使って別のバックアップ用コンテナ作ってごちゃごちゃやらんといけんらしいです が、めんどくさいのであとは後輩に任せることにします
DockerでGrowiを建てた話
環境
さくらVPS
CentOS7
参考サイト様
CentOS7.5にGrowiをインストール - Qiita
GrowiをDockerでたてる - Qiita
とりあえずポート開放
なんか3000番使ってる人が多かったので脳死で3000を開放
$ firewall-cmd --add-port=3000/tcp --zone=public --permanent
firewall-cmdはファイヤーウォール周りをいじいじするためのコマンドです
詳しくはリファレンスを読めば... と調べたんですけど公式のリファレンス的なのないんですね(Linux noob)
第5章 ファイアウォールの使用 - Red Hat Customer Portal
Red Hatのなら信頼できるやろ、ということでこれを読めばいいと思います。
Growiの前提諸々の導入
「root権限でやっちゃえるとこは最初にやっちゃおうぜ、sudo一々つけるのめんどいし」
と、この前提導入までの作業を全てrootで行っています。セキュリティ的にいいのか悪いのかはわかりません。
設定いじれやって話なんですけども。
MongoDBをインストール
もんごもんご!
$ vim /etc/yum.repos.d/mongodb-org-3.4.repo
yumに?リポジトリを追加します。vimで開いたら
MongoDBの公式ドキュメント の
上記画像の赤く囲ってあるとこをコピペして貼り付けます。 自分のときは
[mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
でした。
$ yum install mongodb-org
でインスコ。yumはパッケージ管理ソフトです。
6.3. Yum と Yum リポジトリの設定 - Red Hat Customer Portal
$ systemctl start mongod.service
で起動
$ systemctl enable mongod.service
で自動起動するようにさせる。
Node.jsとYarnをインストール
Node.jsを入れる
$ curl --location https://rpm.nodesource.com/setup_8.x | bash -
rpmもパッケージ管理ソフトです、yumとの違いを調べるといいと思います。 インストールすると
## Run `sudo yum install -y nodejs` to install Node.js 8.x LTS Carbon and npm.
## You may also need development tools to build native addons:
sudo yum install gcc-c++ make
## To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo yum install yarn
とログが出てくるので##がついてないとこを1行ずつコピペして実行して、必要なものを入れてゆくう。
Docker使って建てる
Docker入れるぜ!
$ curl -O https://download.docker.com/linux/centos/docker-ce.repo $ mv docker-ce.repo /etc/yum.repos.d/ $ yum install docker-ce
起動
$ systemctl start docker
今回はここに建てました
Docker-compose入れるぜ!
いわばDocker管理ソフトみたいなもんです
$ yum install docker-compose
建てるぜ!
Growiのコンテナをクロ~ンするディレクトリをつくって移動してクロ~ンします。
$ mkdir /home/tpp(ユーザーdir)/wiki $ cd /home/tpp(ユーザーdir)/wiki $ git clone https://github.com/weseek/growi-docker-compose.git
docker-compose.ymlを編集します。いわばDockerの設定ファイルです。
$ vim growi-docker-compose/docker-compose.yml
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
ports:
# - 127.0.0.1:3000:3000 # localhost only by default
- 3000:3000
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
# - PASSWORD_SEED=changeme
- PASSWORD_SEED=tpp
# - FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rr
サーバーの外からもアクセスできるようにしたいので、127.0.0.1を削除。
これしないとlocalhostになっちゃいます。
PASSWORD_SEEDも適当なものに変更。
$ docker-compose up -d
コンテナ起動。ip:3000で入れたら成功。
追記
monogodbをわざわざ入れてるんですけど、そもそもgrowiに入ってるのでいらないっぽいです
SublimeText3のC++環境メモ
参考ブログ
環境
Windows8.1 Pro 64bit
インストール
SublimeText3のインストール
パッケージ管理ソフトを入れる
Package Control
View > Show Console
でコンソール開いて
import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
を打ち込む
Preferencesの中にPackage Controlがあるはず
install packageで追加、removeで削除
追加パッケージ
ConvertToUTF8
UTF8に対応させるパッケージ
なんか勝手に入ってたぽいので必要ないかも?
多分デフォのままで大丈夫、問題あれば追記
FireManager
サイドバーは
View > Side Bar
から
とりあえずこんなもんで良さそう 透過とか便利そうなものはあったけどそのときに考える
ビルド環境
コンパイラ設定
mingw使ってgccパスを通すのが下手くそだったので大人しく記事に従う MSYS2 をインストール
ターミナルが起動したら
pacman -S [イントールするもの]
で
mingw-w64-x86_64-clang
mingw-w64-x86_64-clang-tools-extra
mingw-w64-x86_64-gdb
をインストール
C:\msys64\mingw64\bin
C:\msys64\user\bin
のパスを通す
C:\msys64\etc\pacman.conf
の
# [mingw32] # Include = /etc/pacman.d/mirrorlist.mingw32
をこのようにコメントアウト
Tools < Build System < New Build System
を開いてビルドオプションを書く
{
"selector": "source.c++",
"file_regex": "^(.*?):([0-9]*):?([0-9]*):? (.*)",
"shell": true,
"cmd": ["clang++", "-std=c++14", "-g", "-Og", "-pipe", "-Wall", "$file_name", "-o", "$file_base_name.exe"],
"variants":
[
{
"name": "ビルドして実行",
"shell": true,
"cmd": "clang++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name.exe & $file_base_name"
},
{
"name": "ターミナルで開く",
"shell": true,
"windows":
{
"cmd": ["start", "ConEmu64", "/cmd", "clang++ -std=c++14 -g -Og -pipe -Wall $file_name -o $file_base_name.exe & $file_base_name"]
}
}
]
}
ビルドできた なぜgccだとうまく行かなかったんだろうか
オートコンプリートの設定
Preferences >Package Settings > EasyClangComplete > Settings
を開くと2つsettingが開くので右側の方に
{
"common_flags":[
"-IC:/msys64/mingw64/include",
"-IC:/msys64/mingw64/x86_64-w64-mingw32/include",
"-IC:/msys64/mingw64/lib/clang/$clang_version/include",
"-I$project_base_path/src"
],
"cpp_flags": ["-std=c++14"]
}
を貼り付け
なんとなくC++11にしたら雑魚だったので大人しくC++14のままでいいと思う
デバッガ
SublimeGDB(SublimeGDB - Packages - Package Control)
Preferences >Package Settings > SublimeGDB > Settings - User
を開いて
{
"commandline": "gdb --interpreter=mi --args ./${file_base_name}",
"workingdir": "${folder:${file}}",
}
ペースト
| 機能 | キーバインド |
|---|---|
| ブレークポイントのオン/オフ | F9 |
| 起動 | F5 |
| ステップオーバー | F10 |
| ステップイン | F11 |
| ステップアウト | Shift+F11 |