taisablog

taisa's engineer blog

関連記事

C言語初級者がMacのコンソールで実行可能なテトリスを作ってみた

C言語初級者がMacのコンソールで実行できるテトリスを作ってみました。参考にした動画はこちらです。テトリスについてはWikipediaも参考にしました。この投稿では作ってみた上で気になった箇所をピックアップして解説していきます。全ソースコードはこちらで確認できます。これについては、Youtubeにあげている方にも許可を頂いています。 テトリス – Wikipedia 日本では、 1988年にセガ・エンタープライゼス(後の セガ・インタラクティブ)から発売された アーケード版( セガ・システム16版)の人気により浸透した。当時はまだ操作法が確立されていなかったが、このシステム16版の登場以降は同作のものが日本国内における 事実上の標準となり、その影響力から特に「 セガテトリス」とよく呼ばれる( 2000年にアーケードと … 拙い動画でお恥ずかしいですが、どうぞご利用下さい。 — 館長 (@gamedokan) 2019年1月9日 まずテトリスの枠を作る まず最初にテトリスの枠を作ります。テトリスの枠は横が12個、縦が22個のブロックでできています。なので下の図のようにそのブロック箇所へ1を立てて、ブロックを描画していけばよいことになります。 単純に書くと以下のようになりますが、それを少し整理してchar field[FIELD_HEIGHT][FIELD_WIDTH];のフィールドに値を格納する書き方に変更すると以下のようになります。 # 単純に書いた方 #include <stdio.h> #include <memory.h> #define FIELD_WIDTH 12 #define FIELD_HEIGHT 22 int main() { for (int i = 0; i < FIELD_HEIGHT; i++) { for (int j = 0; j < FIELD_WIDTH; j++) { if (j == 0 || j == FIELD_WIDTH – 1 || i == FIELD_HEIGHT – 1) { printf(“■”); } else { printf(” “); } } printf(“\n”); } } # 整理した方 #include #include #define FIELD_WIDTH 12 #define FIELD_HEIGHT 22 char field[FIELD_HEIGHT][FIELD_WIDTH]; int main() { …

PHPの empty, isset, is_null の違いをしっかり理解する

PHPの isset、empty、is_null をしっかり理解して使おうと思い整理してみました。既にこのような記事「PHP isset, empty, is_null の違い早見表」もあるのでここではこれより少し踏み込んだところまで書いてみます。 empty, isset, is_nullの違い早見表 値 if ($var) empty isset is_null $var = 1 true false true false $var = array(1) true false true false $var = “” false true true false $var = “0” false true true false $var = 0 false true true false $var = array() false true true false $var = false false true true false $var = NULL; false true false true $var false true false true まず表ですが、順番を理解しやすい形に変えてみました。下記のように赤と青のグループで分けて考えておくと理解しやすいです。これをみると「if ($var)とempty」、「issetとis_null」が対になっているのがわかります。 感覚的には、if ($var)は値がありそうだなと思うものがtrueになり、emptyも値がなさそうだな思うものがtrueになる感じがします。issetは、何かしら値がセットされてばtrue(つまり値がfalseでも結果はtrue)、is_nullは値がnullであればtrueということになります。 実際の挙動の動作確認についてはPHPUnitを使ってテストしたものをGitHubにあげているので合わせて確認してみてください。https://github.com/taisa831/AimaiPHP empty, isset, is_null の Notice や Error 出力早見表 次に、PHPのerror_reportingをE_ALLにした場合に、indexのない配列にアクセスした場合やオブジェクトが空の変数や関数にアクセスした場合の挙動をまとめてみました。 値 if ($var) empty isset is_null $var = []; …

no image

2019年 振り返り

2019年の抱負から今年を振り返ってみます。子供らが遊んでいる中で書いているのでかなり雑です。あとできれいにします。 Google Cloud Platformを使う 2018年後半から2019年前半にかけて副業でFirebaseでスマホアプリのサーバサイドをやりました。感じたことはGCPめっちゃいいということ。メインで利用したのはCloudFirestoreとCloud Functionsでしたが他にも色々できるのですごい進化を感じました。 数学をやる 2019年前半に中学レベルの数学までを復習しました。やってみて思ったことは業務で必要にならない限りは継続が難しいことでした。 宅建をとる 以下で書いたので割愛 http://3.115.145.106.xip.io/archives/1629 体力をつける 会社でランニング部があり今年は多少ですが走ることができました。また、久しぶりに筋トレも再開することができました。2020年はこれらの活動を増やして継続していきたいです。 やらなくてよかったこと 何年かやってみてやらなくてよいことが見えてきました。というより実務で必要にならない限り習得が難しいです。重要だしやりたいけどサブでやるには継続が難しく思ったような成長曲線が描けません。逆に英語のリーディングは日常で使うのでそっちに極振りしています。 機会学習数学英語のスピーキング アウトプット ブログ:22記事QIITA:2記事 合計24記事ということで月2記事のペースは維持できました。特別気にしていませんが月間PVも約1万と少しずつ伸びてきていていい感じ。 まとめ ここ数年はテックリード、スクラムマスター、マネージメント業務が多く業務で開発をする機会が減っていましたが、今年の後半は最高の会社・メンバー・プロダクト・技術スタックでいろんなことがとても充実した1年になりました。 VueJSTypeScriptGolangAWSMicro Servicesコーチング

no image

docker-composeでGoのWebサーバーを起動する

ミニマムにやっておかないと忘れがちなのでメモ サンプル用Goサーバを作成する package main import ( “encoding/json” “net/http” ) type User struct { FirstName string `json:”firstName”` LastName string `json:”lastName”` } func users(w http.ResponseWriter, req *http.Request) { w.Header().Set(“Content-Type”, “application/json”) user := User{ FirstName: “John”, LastName: “Doe”, } var users []User users = append(users, user) json.NewEncoder(w).Encode(users) } func main() { http.HandleFunc(“/users”, users) http.ListenAndServe(“:8002”, nil) } 普通に起動して動作確認をします。 $ go run main.go http://localhost:8002/usersにアクセスするとJSON結果が出力されます。 [ { “firstName”: “John”, “lastName”: “Doe” } ] Dockerfile FROM golang:1.14 #FROM golang:1.14-alpine # コンテナログイン時のディレクトリ指定 WORKDIR /opt/sandbox-docker-compose-go # ホストのファイルをコンテナの作業ディレクトリにコピー COPY . . # ADD . . # ビルド RUN go build -o app main.go # 起動 CMD [“/opt/sandbox-docker-compose-go/app”] docker-compose.ymlファイル version: ‘3’ …

node-nightlyを使ってwebpackをデバッグする

webpackに限らずだけどnode-nightlyを使うと簡単にデバッグすることができる Debugging When contributing to the core repo, writing a loader/plugin, or even just working on complex project, debugging tools can be central to your workflow. Whether the problem is slow performance on a large project or an unhelpful traceback, the following utilities can make figuring it out less painful. node-nightlyをインストールする インストール後一度初期化を行う npm i -g node-nightly // 初期化 node-nightly webpackの実行環境をつくる デバッグする為にwebpackの実行環境をつくる npm initしてwebpackをディレクトリ配下にインストールする npm init npm i -D webpack //バージョンは4.12.1 npx webpack –version 4.12.1 webpack-cliをインストールする。ここではグローバルインストールとしている。 npm i -g webpack-cli //バージョンは3.0.8 webpack-cli –version 3.0.8 webpack.[prod].jsをコマンドラインから作成する webpack-cli init 以下のように聞かれるので好みの設定をする(今回はデフォルトを利用) ℹ INFO For more information and a detailed description of each question, have …