スマホ破壊わず

スマホを破壊しました

 タッチパネルが反応しなくなり交換したら電源すらつかなくなりました。バッテリーを無理やり引きはがしたのが原因かなぁとか思ったりしてますが割と悲しい。

 しばらくは連絡が遅くなりますがご承知おきを「ASUS のZenfone Max」を購入しました。明後日には復旧してるはず

Visual Studioの謎のDockerfile

FROM mcr.microsoft.com/dotnet/core/runtime:2.2-stretch-slim AS base
WORKDIR /app


FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["hoge-server/hoge-server.csproj", "hoge-server/"]
RUN dotnet restore "hoge-server/hoge-server.csproj"
COPY . .
WORKDIR "/src/hoge-server"
RUN dotnet build "hoge-server.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "hoge-server.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "hoge-server.dll"]

 こんなファイルなんですけど、これを普通にたたくとバグるんですよね。

Step 7/17 : COPY ["hoge-server/hoge-server.csproj", "hoge-server/"]
ERROR: Service 'hoge-server' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder655807069/hoge-server/hoge-server.csproj: no such file or directory

あたりまえだけどファイルの指定位置がおかしい。Dockerfileがhoge-serverディレクトリの中にあるのに、hoge-serverディレクトリの中を見に行くみたいなことになってるんですよね。一旦上のディレクトリにDockerfileを持ち上げてるような動きをしてる。で、ためしにもちあげて実行すると普通にビルドが通るんですよね。え~

golangのchannelのバッファ満杯時のロックが処理の中断か確認する

 既に単位数少なくてギリギリなのに今日の試験事故って、留年まっしぐらなPiffettです。

golangのchannelではバッファ数を指定でき、これを超えるとき送信がロックされるだとかブロックされるとか書いてあります。おそらく処理が一時中断するのだと思うんですが、「ブロック」だったら処理毎破棄されそうですよね。確証がなかったので書いて確認。

package main

import (
    "fmt"
    "time"
)

func f(queue chan int) {
    i := 0
    for {
        fmt.Printf(".")
        time.Sleep(100 * time.Millisecond)
        i++
        if i > 11 {
            i = 0
            fmt.Println(<- queue)
        }
    }
}


func main() {


    queue := make(chan int, 3)

    go f(queue)
    queue <- 1

    queue <- 2

    queue <- 3

    // Lock
    queue <- 4

    for {
        fmt.Printf("x")
        time.Sleep(100 * time.Millisecond)
    }
}

結果

............x1
..x.x.x.x.x.xx..x.xx..xx2
..xx..xx.x.x..xx..xx..xx3
.x.x..xx..xx..xx..x.x.x4
.xx..xx.x.x..x.xx..x.xx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx→無限に続く

ということで確認終了。1を出力してからmain関数が動くと思ったら先にmain関数が動くのが意外でしたが、ちゃんと処理が中断されているだけだということが確認できました。なーむー

逆求人イベント~

 はいどうも~!コーディングテストうけたらコマンドライン引数の仕様勘違いしてて(文字数&空白入り文字列だと思ってた)問題の本質に入る前に落ちて詫びPHPを書いたPiffettでぇ~す。プログラミングの実力が無いっていうのはごもっともなんですが、書かないとこんなに忘れるんですね。k8sとかansibleとかばっかり触っててyamlしか書けない体になりつつあります。

逆求人イベントに参加した(2回目)

 人生のモテ期を感じる。男しかいないモッサ大学に通ってた甲斐があった。なんかいろいろコネクションができてるのを感じる。

逆求人イベントとは

 逆だけあって企業からスカウトする系イベントです(多分)。こちらは5分くらいの自己紹介プレゼンをして、それに合わせて向こうがいろいろ提案したり話し合ったりします。バリバリ運動部だし足が動くエンジニアアピールを試みましたが、なんか技術力を評価されました。う~ん。

逆求人プレゼンの難しさ

 企業がどの分野に興味持ってるかは結構多様なんですよね。ついでにつまみ食いの帝王Piffettといい感じにマッチしていい感じのカオスを生み出しています。「Rust好きなんだ!うちこんなプロダクトあるよ!(Rustは素晴らしい言語だけど、web系のプロダクトだとGoで良くね?ってなりがち)」、「学生でk8s触ってるんだ!珍しいね!(珍しいと思ってなかった)」、「フロントエンドも一応それなりにできるんだねぇ~」。おんなじ人間に対する評価とはとても思えません。うん。いちおう面談を受ける企業がどんな企業かを調べておいて、それに合うように話す内容を変えたりするんですが、企業に引っかかるポイントは想定と全然違ったりしますね。

圧倒的実力で殴る

 Kaggle金メダル!RedCoder!アプリリリース大ヒット!なんかもう圧倒的実力で殴れば早いや!簡単なコーディングテスト落ちてる僕が言うとアレだけど。

 ちなみに今はHoi4やったり、flask触ったりしてます。う~ん、学科の実験とか勉強が忙しい。ハードもできるWEBエンジニアとか需要ない?ラプラス変換できるぞ?ブロック線図かけるぞ?

なぜか少ないWeb人材

 見たことある人だ~みたいなことはよくあるんですよね。Qiitaで普通に調べたらリアルの知り合いの記事にぶつかることもしばしば。なんでこんなに界隈が狭いんでしょう。ハードウェアなんて始めたら無限にお金が飛ぶし、Hoi4とかマジで初見殺しだし、Webアプリ作るくらいならそんなに難しくないと思うんですけどねぇ。

DDDの学習モチベをどうしたら上げられるのか

ちなみに出オチです

 いろんな技術が世の中にはあります。その技術を使うことで、今までできなかったことができるようになったり、かなり高速化したりするわけです。なので、いろんな技術をさわってても飽きないんですよね。だがDDD、テメーは別だ。デザパタくらいならまぁ割と具体的だし、見落としがちなプログラミングの書き方とかも攫えるので。けどDDDを勉強しても、別に今までの設計からなにか変わることはおそらくないんですよ。結局DDDってのは経験からくる #それはそう を体系化したものだと思っていて、読めば読むほど飽きてきて……

けどいつかやります

 流行ってるものに巻かれるのが特技(?)なのでね。機械学習やる気なかったのに気づいたら一冊本を回してたしなぁ。意志と行動が一致してない。

世界一難しいゲームってHoi4なんじゃないか

世界一難しいゲーム?

 世の中には難しいゲームと題されているゲームはそれなりにあるけれど、そういうゲームは大抵アクションゲームだし、難しいといっても何をやっているのかわかる。いや、このゲーム何やってるのか意味が分からない。まぁ工場建てて軍備増強するのはわかるけど、ドクトリンってなんじゃ、国家方針ってなんじゃ、なんかボーナスとかあるんか、国ごとにいろいろ進め方があるのか。いろんなパラメーターがあって頭が混乱してくる。

www.nicovideo.jp

いまはこういうありがたい動画があるけど、こういうソース無しだと割と詰む。チュートリアルにない細かい知識がありすぎる。

 けど、触ってきてなんかちょっとだけ楽しい気がしてきた。シミュレーションがやっぱり好きなんだなぁ。

プログラミング周辺知識の整理をしてみたい。

プログラミング初心者を脱する時って、プログラミング言語の文法仕様なんてのはプログラミングの世界ではほんの一部分の知識でしかないことを自覚する時だと思うんですよね。どんな知識があるかまとめようかなと。

アルゴリズム

 データ構造とアルゴリズムってやつですね。競プロみたいなやつ

データベース系

 上のアルゴリズム系の知識を用いてデータを効率よく利用するのがデータベースですね。とはいっても中身を追うのはほぼ不可能で、外部キー制約だとかその他パフォーマンスにまつわるいろんな周辺知識を勉強する必要がありますね。

ライブラリ系

 プログラミング言語の比較って半分ライブラリの比較でもあります。まぁどの言語でも似たようなライブラリがそろってますが、Numpyとかは特別に覚える必要がある気がします。

フレームワーク

 ライブラリのライブラリ。ドキュメントをとリリースノートを読み込む力が大切。フレームワークの中身を追いかけることは大きなプログラムを書く時の参考になりそうです。

ネットワーク系

 OSI参照モデルとかに始まるもろもろの知識。エッジコンピューティングとかそれにまつわる部分では必須の知識だと思います。

プログラミングのイディオム、パターン

 ラムダ式とか、関数型であったり、いろんな柔軟な書き方が紹介されてますよね。

低レイヤ

ハードウェア

 CPUとかメモリとかストレージとか。如何に読み書きの速度の違いとかは意識する必要があると思います。

命令セットなど

 llvmとかアセンブリとかOSとか。情報工学の基礎の浮動点小数とかの中身とかそこらへんは知っておいた方が良いとおもいます。

開発・運用系

バーチャルマシン

 Hyper-vとかkvmとかDockerとか。基本的には本番環境と開発環境をそろえる技術って言ってもよいと思います。

CI/DI

 Jenkinsとか。テスト回してデプロイしたり。

テスト

 プログラミング言語の機能として十分なものが用意されたりとかもしてますが、テスト設計はそれはそれで一種のスキルではあります

クラウド

 今はもう必須のスキルっていっていいと思います。ただ、体系化された知識とかいうよりかはしっかりドキュメントを読めるかって部分が大切かなと思います。

少し古い気がしますが、結構よくまとまってる気がします。

https://postd.cc/programmer-competency-matrix/

これをいい感じに図示したいなぁ。