無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

わたしがほんとうにほしかったGolangはVだった

昨日、Vという開発言語の話が流れてきました www.pavlog.tokyo Golangを超えるググらビリティの悪いやつですね。

リリースされたばっかりの言語らしく。公式を見る限りドキュメントはしっかりそろっているので言語仕様はなんとなく読むことができました。 vlang.io

Golangっぽいなにかです。基本的な仕様はGolangに近しいですね。mutあたりはrustで見た記憶があります。
言語仕様を見る限りgoroutineもどうやら対応されているらしく、go {func}で実行できるようです。いいっすね。

個人的に気になっているやつはGenericsと、Access modifiers。enumも標準サポートいいぞぉ。
Golangでもできなくはないんですが、GenericsはDI的にオブジェクト突っ込み分けしないとできないし、Accessコントロールは先頭が小文字かどうかで決まるし、enumは結局constだしで、微妙に面倒くさかったんですよね(´・ω・`)
言語仕様シンプルなのはGolangのすごくいいところなんですが、稀に回り道している感が否めないときがありました。

さて、さっそくこいつを触って見るんですが、冒頭のの記事と同じようにビルドで死ぬ始末(ヽ´ω`) エラー内容見てみると、どうやらビルド内部でパスが固定されてるみたいっす。

/home/shinoyu//code/v/ not found. Run:
git clone https://github.com/vlang/v ~/code/v

Makefileを見ても特に変な記述はないんですよね。
https://github.com/vlang/v/blob/master/compiler/Makefile

しかたないので、githubに書いてある通りに、固定でパスを切って対応してやります。

git clone https://github.com/vlang/v ~/code/v
cd ~/code/v/compiler
make

はい通るー。固定か、うーん。まあいいか(´・ω・`)

できあがったものは./vで実行できます。が、いちいちパス指定するのは面倒なので、公式の仰せのとおりに/usr/local/bin以下にシンボリックリンク貼ってやります。
sudo ln -s ~/code/v/compiler/v /usr/local/bin/v これでいちいちパス指定しなくてもvだけで実行することができます。

実行するとREPLが動きますね。

V 0.1.0
Use Ctrl-D to exit
For now you have to use println() to print values, this will be fixed soon

>>> println('hello')
hello

はい。REPLだと今はprintlnしか動かないらしいっす(´・ω・`)ざんねん

ファイルに書いてそれを呼ぶ形式だとちゃんと機能します。とりあえずなにか動かしたい場合はv/exmapleの下にあるやつを実行すればOK。

v run example/news_fetcher.v
============running news_fetcher==============================
[20275705, 20273125, 20272346, 20274679, 20275051, 20275097, 20276070, 20274475, 20275684, 20270309, 20274035, 20275225, 20270990, 20275929, 20270840, 20273446, 20274666, 20275238, 20268368, 20269376, 20273936, 20270800, 20264911, 20268974, 20271322, 20270805, 20273228, 20271779, 20271821, 20272557, 20270969, 20272692, 20269293, 20266566, 20270467, 20264999, 20260863, 20267790, 20265155, 20269626, 20263561, 20260741, 20260292, 20264987, 20254057, 20261823, 20266932, 20262031, 20264848, 20266641, 20270728, 20266606, 20268203, 20268935, 20272074, 20269057, 20267629, 20265751, 20266031, 20261529, 20271043, 20266450, 20266878, 20266463, 20265625, 20265031, 20272082, 20262695, 20267599, 20265632, 20268040, 20265141, 20262253, 20262176, 20264602, 20259850, 20269041, 20257990, 20268436, 20259862, 20263089, 20264943, 2026275

取り急ぎ最低限動かすところまで持っていったのでここまで。
次回はGolangでほしかったものがどこまで対応されているか書きたいと思います。(`・ω・´)

Makuakeでサポートしたキーボード「Taptek」が届いた

これです。(`・ω・´) www.makuake.com

f:id:gdgd-shinoyu:20190617025549j:plain

これまで使っていたMajestic Minilaと同じくらいの大きさで半分の薄さ(下が今回のやつ) f:id:gdgd-shinoyu:20190617025527j:plain

持ち上げてみてもかなり軽い。カタログスペック的には500gくらいらしく、持ち運びする人には嬉しい重量。

打鍵感はとてもいい感じです。カチカチ感あるのと、軽く押し込んだだけで反応してくれるので軽やかな入力感ありますね。サイズが一回り小さいので誤入力が頻発していますが、じきに慣れるとは思います。

バランスが取れていて非常によいキーボードです。14000の価値十分にありますね!

こいつで一番オススメなのが、プロファイルを3つまで登録できるところですかね。
家でWindows, 外出Linux、会社Macの環境でもう一台のMinilaを持ち歩いて使っているんですが、前使っていたMinilaだと直近繋いだところを優先的につなぎに行くので端末切り替えるときが地味に面倒だったんですよね。結局つなぎ直さないといけないという。

その点こいつは、Fn+1-3キーで端末切り替えられるので手間が省けていいっすねー。

あとは有線とBluetooth両対応なのがいいです。メカニカルで両対応のキーボード数少ないんですよね。



概ね利用感には満足なんですが、使ってて気になったところがいくつか(´・ω・`)

  • Fnキーが左下に鎮座し、その右にCtrl
    • f:id:gdgd-shinoyu:20190617025440j:plain
    • ここはCtrlがいてほしい(´・ω・`)
    • めちゃくちゃ押しづらいので、caps lockにCtrl割り振って使うことに
  • 傾斜がない
    • 筐体を薄くするためだとは思うんですが、キーボードの裏面にあるあの傾斜がないんですよね(´・ω・`)
    • 小型なので大きく問題にはならないんですが、やはりこれまでと感覚変わるので違和感。
  • バックライトカラー変更キーを誤爆しやすい



気になっているのはこれくらいですかね。まだ一日も使ってないので継続して触ってみましょうかねー。

独り言チャンネルのすすめ

Slack使ってる人は今すぐできる。やろう。



かなり前の話ですが、こんな話題がありました。

c16e.com

世間的にはTimesで名が通っている分報。 恥ずかしながら、これ知ったの昨年末くらいでした(´・ω・`) その時はまだ有用性に気づいてなくって、「ああ、こんなやり方やってるところもあるんだなー」と感じたくらい。

私、今副業でお手伝いしている会社がありまして、そこでは他にも副業エンジニアとしてJoinされている多くのメンバーがいます。 副業先のSlackでは副業エンジニア用のパブリックチャンネルが用意してあって、そこでいろいろコミュニケーションしてます。そこで「稼働します」と表明して作業開始!みたいな運用ですね。

とある副業メンバーが、稼働スタートのスレッドにリアルタイムな作業の進行状態とか調べた内容とか、お気持ちを書いていくんですね。そこで出てきた話題に対して自然に社員とか他副業メンバーがコメントしていく。

あれ?これ意外とすごいんじゃない?という気持ちが湧きました。今その時困っていること、確認したいことを気軽に投稿でき、コメントする方も流れで背景とかがわかるので気軽にコメントしやすい。 人の質問に対してコメントするのって、相手の状況とか鑑みなきゃいけないので結構考えちゃうじゃないですか?独り言で状況が流れているならそれみれば良いので、レスポンスのスピードも上がる。

独り言書く方からみても、あくまで自分の気持ちとか考えを書いていくだけなので、見る人のことを意識する必要がないんですよね。だから正直に困ったことをかけるし、わからないことを分からんと言えるわけです。

各メンバーの善意で成り立つコミュニケーションから、お互いが抱える問題が自然に解決していく。すごく良い活動だと思います。



あと、個人的に一番有益だったのは作業のログを残せることですね。 作業している時の思考って、後から結構思い出せないんですよ(´・ω・`)ブラウザのタブを大量に開く癖のある人はわかるかもしれないんですが、その時何調べてたか覚えてないんですよね。なぜそれを調べようと思ったのか、何が困っていたのかを、あとから振り返ることは難しいんですよねぇ。自分だけ?

これが独り言を書いていくことでクリアになる。あとから調べたことをブログにするとかどこかに投稿するとかなったときでも振り返りやすく、改めて調べ直すこともする必要がなくなる。全てはそこに書いてあるからだ。

こういう気付きがあり、自分も 率先して独り言と言う名の分報を書くようになりました。



まだ試してない方、一度試してみましょう( ・`ω・´) おすすめです。

golangでoverrideを実現するためには

golangは継承がない言語ではありますが、メソッドのオーバーライドを行うことができます。

qiita.com

embedded使います。 本来はinterface定義して解決した方がいいんですけども、使っているパッケージでinterface定義されていないやつのMock作るとき等、これで解決しないといけなさそうなケースがありました(´・ω・`)

// embeddedされる側
type BaseModel struct {
    Name string
}
func (b *BaseModel) Talk() string {
    return fmt.Sprintf("name is %s", b.Name)
}
func (b *BaseModel) Action(in string) string {
    return fmt.Sprintf("%s, actively %s.", b.Talk(), in)
}
func NewBaseModel(name string) *BaseModel {
    return &BaseModel{
        Name: name,
    }
}

// embeddedする側
type ModelA struct {
    BaseModel
    ActionName string
}
// Actionだけ定義してBase側を上書きする
func (m *ModelA) Action(in string) string {
    return fmt.Sprintf("%s, %s %s.", m.Talk(), m.ActionName, in)
}
func NewModelA(name, action string) *ModelA {
    model := &ModelA{
        BaseModel:  *NewBaseModel(name),
        ActionName: action,
    }
    return model
}

な定義があったとして、

package main

import "fmt"

func main() {
    dog := NewBaseModel("bog")
    fmt.Println(dog.Action("run"))

    cat := NewModelA("cat", "selfishness")
    fmt.Println(cat.Action("run"))
}

で動かす。

name is bog, actively run.
name is cat, selfishness run.

期待通りの動作はする。うーん、単純なものならこれで動くのか。

例えば、外部にリクエスト投げるモジュールがあったとして、そいつの送信部分だけ外部に送らないようにする処理で上書きしてやれば、Mock化が簡単にできそうな気がします。

ただ、上記で上書きしきれないパターンがある

今仕事でやってるFirestoreの実送信部分。上書きしたはずが、上書き元が呼ばれてしまうんですよね。

直接オブジェクト作ったところで呼ぶ分には期待通り動きそうですが、メソッドのレシーバーでembedded元が指定されているとそっち呼んでしまうのかな(´・ω・`)あとで検証しますか

多分この[メソッド定義とメソッド呼び出しの真実]あたりが、embedded側が呼ばれる原因なのかもしれません。

skatsuta.github.io

ローカルにいっぱいあるgitリポジトリの管理を考える

これまであんまり意識せずに適当なディレクトリにバカスカcloneをかけていたわけですよ。 複数のリポジトリ触ることがあんまりなく、ほぼ1つのリポジトリだけで完結する日々。まあモノリシックなRailsをメインの仕事にしている私にはそれで十分だったわけです。



話は変わって、今年に入ってから本格的に副業始めました。知り合いからちょっとしたチケットをもらってお小遣いを稼ぐ、という活動はやってましたがお仕事として本格的にコードを書く日々に突入したわけです。

現場はmicroservice的な複数リポジトリでサービスを管理している会社で言語はGolang。必然的にGolang的なディレクトリ管理が必要になってきます。となると、これまでの無秩序カオスな管理方法だとストレスマッハなのです。あれ?あれどこいったっけ?あれ?



最初は、普段使っているPecoのブランチ一覧選択よろしく、GOPATH以下を適当に抽出して選択する方法を取ろうとShellを書いていたわけなんですが。やはり先人の知識、すでに同じようなことを解決している方が当然いらっしゃるわけですな(`・ω・´)

blog.kentarok.org

ghq。そういえば昔この記事見て試そうとしていた記憶が呼び起こされます(´・ω・`)なんでやらなかったんだっけ?まあいいか。

早速これをセッティングしていきます。Golangスクリプトですが、homebrewにもあるらしいのでこっちで入れます。

brew install ghq

cat <<EOS >> "$HOME/.gitconfig"
[ghq]
        root = ~/src
EOS

合わせて環境変数GOPATH=$HOMEを設定しておきます。これやっておくとghqGolangのものもghq listされるようになります。強い。

ただ、これだけだとghq listした結果をgrepするなりの作業が必要になってしまうので、peco等のインクリメンタルサーチツールで挟んであげます。

ghq list --full-path | peco --prompt "[find repository]" --layout=bottom-up

個人的にpecoには--prompt付けたい派です(`・ω・´) 上のコマンドにエイリアス貼るなりzleでキーバインド設定したい等あればお好みでどうぞ

ようやくこれでまともなリポジトリ管理ができるようになれそうです。

個人的にQOLを上げてくれるものたち

タイトルどおり、我が家で使っていて便利なものを雑に紹介します。 誰得ですが、いいぞ。

スマホの防水ケース

https://www.amazon.co.jp/gp/product/B073D6NNVD

一年くらいヘビーに使ってますが(主に嫁が)これといって問題なく使えてます。

風呂でもスマホ触れるのつよい。自分は結構拒否感あって使ってなかったんですが、積んでる電子書籍消化したくって長風呂ついでに使ってみたところすごく快適でした。

指紋認証と書いてますが、効いた試しがありません_(:3」∠)_風呂入って水滴ついてるせいでしょうか。

ネスカフェ ゴールドブレンド コク深め カフェラテ用

https://www.amazon.co.jp/gp/product/B075D831SB

スーパーの一角で稀に見る商品。よくおいてあるのはBossのラテベースですが、それよりこちらの方が豆のコクがあって重宝してます(`・ω・´)

ミルクとこれがあれば手軽にカフェラテっぽい何かが飲めます。さすがにちゃんとしたエスプレッソで煎れたものより味は落ちますが、手軽に飲むにはこれくらいがちょうどいいです。

1本で12杯。ミルク1杯250ml利用と仮定すると、大体60円くらいでしょうか。スタバの1/7くらいで一杯飲めます。オススメ。

黒烏龍茶のパック

https://www.yodobashi.com/product/100000001003599690/

自分が買ったのは、肉のハナマサにある同型品、だったと思う。

値段も400円程度で52パック入りだったはず。これ使う前は3日に1回くらい、烏龍茶のペットボトル買ってたんですけど、煮出すようにするとだいぶ出費減りました。1lのお湯に1パックいれて1時間くらいがちょうどいいです。

どうでもいいんですが、手軽に手に入るペットボトル烏龍茶、ローソンのプライベートブランドが一番おいしいと思います。サントリーOEMなんですけど、どうして本家より飲みやすいんでしょうね(´・ω・`)

これも3日に2lで170円くらいだったものが、煮出しで、8円+ガス水道代で大体20円行かないくらいでしょうか。2l作っても40円行かないので、1/4-1/5くらいの出費ですね。



とりあえずこんなもんですかね。今後もなんか良さそうなものがあったら書いていこうと思います。参考になれば。

Empyrion9.3の更新内容を確認してみる

普段遊んでるゲームの話です。 新しいバージョン来てましたね。中見る限りだとBugFixが中心。 Empyrion、LEGOとか好きな人にはオススメします。宇宙船作るの楽しいですよ(`・ω・´)

steamcommunity.com

We just released the EXPERIMENTAL version of Alpha 9.3, which adds the final part of the stabilizing, optimization and bug fixing update for Alpha 9.

とりあえず、Ver9のバグ修正や最適化がこれで終わりらしい

変更点

Oviraptor Update:

  • Added Oviraptors to cold areas on Temperate Planets

Oviraptorが温暖な惑星の寒冷地にも出現するようになったらしい。 温暖な惑星の寒冷地ということは、Aquaの極地付近とか山岳とかですかね。

  • Integrated new group behavior a) when friendly:
  • adults are traveling, young are playing around them
  • if player gets close to the group, the young do sometimes start to play around him and follow him around for a while b) when attacked:
  • adults attack the attacker
  • young will try to stay/hide behind the adults and they do not attacked
  • if all adults are killed, the young will run away

友好的だと、大人のMOBの周辺に子供MOBがいるという、草食獣的な挙動をするらしき。 プレイヤーが近づく(get close to)と、子供MOBがプレイヤーに寄ってきたり、ついてきたりするらしい。 このhimってどこに掛かってるんだろう。プレイヤーだと思うんだけども(´・ω・`)

何らかの攻撃を加えるなりすると、大人のMOBが攻撃してきます。子供MOBは攻撃してこない。 大人MOBを倒すと逃げていく。よくある動きみたいですねー。

Gameplay

  • Player's volume capacity now includes that of Player Armor and equipped Boosters
  • Improved SI Debris Pickup: when the block that was placed just ago falls down because of SI, you can pick it up again

重量システムの容量に、プレイヤーの装備してるアーマーとブースターパックの容積も含むとのこと。 後は、建物にブロックくっつけた瞬間に崩落したら、ブロックのまま回収できるらしいです。

  • CTRL + SHIFT + LMB add/remove 1000 stack to/from construction queue

SHIFT+左クリックで10、CTRL+左クリックで100の作成予約ができてましたが、そこに1000のパターンが追加されるとのこと。あんまり使うケースないかなぁ。

  • Only Spotlights are now switched on/off when pressing L in a vessel

乗り物に乗ってる時にLでライトのOn/OFFが切りかられるらしい。普段からつけっぱなしなんであんまり意識してなかったんですが、あると便利なのはべんりですね。

Optimizations:

  • Optimized terrain shader > pls let us know if you noticed a performance improvement

地形シェーダーを最適化したらしい。

  • Optimized Deconstructor with instant-speed or after longer 'offline' time (e.g. DSL)

デコンストラクタの処理速度が見直しになった?ちょっと意図がよくわからないですねー(´・ω・`)

Visuals / UI:

  • Added 'dynamic item grids' that only show enough rows for the current grid content plus one empty row if the grid is editable

新しいUIが追加になったらしい。うーんよくわからん(´・ω・`) たまにコンテナの中身たくさんあるのに表示①がずれたりしていたあの問題の修正でしょうかね。

  • Added more stone floor textures (Concrete Block)

コンクリートにテクスチャ追加

  • TextureEditor now supports HeightOffset + HeightContrast

テクスチャツール使用時に余白の指定ができるようになった?

  • Moved On/Off buttons to left in Constructor UI (so they are not hanging in air)

コンストラクタのOn/OFFボタンの移動らしい。機器にアクセスしたときの画面の話っぽい?

  • Improvements to Terrain Decoration

地形表示の改良。どういうことなんだろう(´・ω・`)

Updated PDA Functionality:

自分PDAあんまりやってないんですよね(´・ω・`) マルチプレイヤーで即座に通知されたり、操作感の改善がはいったっぽい?

Playfield Update:

  • Updated start planet in Akua-Omicron scenario: added Talon Defence POIs, removed HUD markers for settlements etc

オミクロン開始時惑星で、タロン集落のPOIに変わってタロンDeffenceが出現するようになった?

-Updated playfields: using hud distance, added defence pois, other tweaks

敵敷地から離れてるときの友好度の増減数値を調整したんでしょうか?

  • Updated POI distribution on several playfields

敵敷地内の建物の配置場所を調整したらしい。タロンとか端っこに固まってましたからね...

  • Using now white markers in playfield.yaml for all POIs that have Faction: None

所有者がいないPOIが白マーカーで表示されるようになったらしい

POI Update:

建物やBluePrint機体の追加等でしたね。他には特になし


後は細かなバグ対応などがちらほら。 特に目新しいものはないんですが、安定性が高くなったことは良さげです(`・ω・´)