やる気がストロングZERO

やる気のストロングスタイル

個人的まとめ

OSSコードリーディングをスムーズに進めるためのメモ

OSSのコードリーディングをしてみる中で、内容を把握するためにして良かったと思った事をメモっておく。 リーディング対象にしたもの: github.com ※主にはfilebeat リーディングが上手く進まないパターン 詳細を追ってしまい帰ってこれなくなる 内容把握を…

Filebeat + Logstashでrails6のログをElasticsearchへ取り込む設定

FilebeatとLogstashを使ってrails6のログをElasticsearchへ取り込もうとしたがなかなか難しかったので書く。 rails6のログをそのまま取り込んでもデータとして使えない 構造化されていない 複数行で意味をなしているものがある 対応設定(具体的な設定ファイ…

Elastic Stackのセッティングメモ

Elastic Stackのセッティングをしてみたのでメモ。 対象OSはUbuntu18.04 参考) www.elastic.co Elastic Stackで作るBI環境 Ver.7.4対応改訂版 (技術の泉シリーズ(NextPublishing))作者:石井 葵発売日: 2019/11/29メディア: オンデマンド (ペーパーバック)…

GKEからHerokuに引越したまとめ

実験・練習としてnekone.loveというtwitterに投稿されてる猫画像をひたすら表示しているサイトを運用している。 以前、k8sの使用感とかの確認のためにGKEを使って運用してたが、今回Herokuに移行したのでその時の作業メモなどを書く。 k8s(GKE)はなんだかん…

「シンプルな構造にすれば保守性があがる」わけではないという話

こんがらがったシステムの保守開発で苦労した経験から新規開発では「シンプルな構成・シンプルな実装にしよう」という話が出る。 目指す方向としては間違って無いように思えるのに、それだけだとうまく行かない。 「保守しやすい構造」とはそれなりに多くの…

gomockを使って「N回目呼ばれたらエラーを返す」を実現する方法

mockを使ってのテストは主に「起こしにくいエラーを再現する」場合にのみ使っている。 gomockにて、「N回目呼ばれたらエラーを返す(それ以外は実際の処理が実行される)」モックの用意の仕方をメモする。 スタブを使う。 github.com ctrl := gomock.NewCont…

やっぱり正規化をベースにしたテーブル設計しか勝たん

テーブル設計は正規化を基本にして設計する手法しか成功しない気がしてる。 DBやテーブル設計系の書籍を読むとどれにも「正規化」による設計手法が書かれているけど、現場ではなぜかあまり正規化に重きをおいた設計が行われていない場合が多かった。 先人の…

GoでもRubyのirbみたいにREPLを使いたい

Rubyのirbとか、rails_consoleが便利なので、Goでもそういうの出来ないか探したら作ってくれてた。 motemen.hatenablog.com インストールして、使いたいメソッドがあるパッケージをimportして使えば普通に使えた。 「実行したい処理のコードはあるけど、外部…

PostgreSQLでのトランザクション分離レベルの使い分けを考えた

標準としてのトランザクション分離レベルは一応把握してたけど、MySQLやPostgreSQLとか、実装によって結構事情が異なっててそのあたりあまり理解できてなかったのでPostgreSQLにおいてのトランザクション分離レベルを学び直した。 ※参考にしたのはこのあたり…

GROUP BYでまとめてそのLASTやFIRSTを取りたい場合のsqlの書き方(window関数を使う)

以下のような有効期間テーブルから、、 id ユーザーid 有効期間from 有効期間to 1 1 2020-6-1 2020-7-1 2 1 2020-7-1 2020-8-1 3 2 2020-5-1 2020-6-1 4 2 2020-6-1 2020-7-1 以下のようなデータ(ユーザー毎に最新の有効期間のレコード)を取得したい id ユ…

DDDのメリットを勘違いしてた件

僕はDDDで「俺が考える最強の契約管理システムを作る」というのをやってみている。 もう100回を超えた。 www.youtube.com 目的としては、外部からあれこれ言われず自分が思う通りに実装を進めて、自分だけの責任で躓いて、自分で「良い・悪い」を体験する事…

娘が生まれたメモ

8/26(水)に娘が生まれたのでメモ 本当は9/4くらいが予定日だったのだが、奥さんが病院に定期検査にいったらそのまま入院することになった。 コロナの状況下なので僕は入院している病院に入ることができず、入院したら次あえるのは出産して退院するとき。 主…

brew upgradeしたらrailsが起動しなくなったので対応したメモ

久々にbrew upgradeを実行したらopensslのなんかが読み込めなかっただかなんだか言われて、railsが起動しなくなった。 bundleもbrewも「ほしいライブラリを便利にインストールしてくれるツール」くらいの認識であまりどういう動きをしているか認識してなくて…

【DB設計】データ複製して持ちたくないと思ってる理由

僕はデータを複製して持ちたくないとずっと思っているけど、 色んな意見聞いてると自分でもそれが本当に良い事なのかわからなくなりそうだったので、 なぜ複製が嫌いなのか書きながら考えを整理してみた。 データを複製すると不整合が起きるから嫌だ ECショ…

SSHポートフォワードメモ

ローカルポートフォワード 参考) SSHポートフォワーディングを知った話 - Qiita serverAからしかアクセス出来ないserverBにあるhttpコンテンツをlocalからみたい場合 localマシンにて、 ssh serverA -L 8080:serverB:80 -N と実行してから、localマシンのブ…

意思決定を議論で導くのはよくない

意思決定を多人数で行う議論でするのは良くないと考えるようになったので、その理由を書く。 議論で意思決定を行うと方針に一貫性がなくなる。 議論は意思決定のための材料集めとして使い、意思決定は責任者が独断で行うべき 議論は背景やテクニックが占める…

個人開発でも業務クオリティを目指すのが重要

今、個人開発で「俺が考える最強の契約管理システム」の作成作業をしている。 作成作業しながら「個人開発でも業務クオリティを目指すのが重要だな」と感じたのでその理由を書く。 個人開発は業務と違う方向で良い経験を詰める場であるが、いくらでも手を抜…

こんなセッションIDは嫌だ

ログイン周りってだいたい既に出来上がってて自分で実装したことなかった。 知識としてはなんとなく知ってたけど「俺が考える最強の契約管理システム」でもログイン機能つけないといけないなーと思ってセキュリティを含めて改めて勉強したのでメモ。 参考)…

vimとtmuxの設定メモ

エンジニアになった当初からターミナル作業を華麗にやることに憧れている。 現状の設定と操作方法をメモっとく。 以下、参考にしました https://blog.craftz.dog/my-dev-workflow-using-tmux-vim-48f73cc4f39e マスタリングVim作者:Ruslan Osipov発売日: 202…

「良いコード」と「良くないコード」の特徴

自分が思ってる「良いコード」と「良くないコード」の特徴を書きなぐってみる。 関数 良い 引数と返り値を見て、何をしているのかなんとなくわかる。 c = add(a, b) # aとbが加算されてるっぽい 良くない 引数と返り値を見ても、何をしているのかよくわから…

テックリード・アーキテクトやってみた感想

ここ数ヶ月、業務でテックリードとしてシステム構築の設計と実装のリードをやってきて、区切りができたので、 良かったこと 良くなかったこと をまとめてみる。 自分の役割(全体設計・実装作業のリード) 職場ではテックリードって役割になっているけど、別…

【Go】interface{}、reflectionについて調べたメモ

Goで「型は異なるが共通する処理(型が違うだけで、行いたいことは共通)」を書こうとしたとき、どうやればいいのかよくわからなかった。 C#だとジェネリクスとか使う感じのやつ。 Goだと引数をinterface{}でうけとって、reflectionを使ってなんやかんややる…

postgreSQLのtimestampはtimezone情報がないのでtimestamp with time zoneを使うのが良さそう

postgres のtimestampはタイムゾーンをもってない 。 だからデータを入れるとき、取得するときにタイムゾーンを気にしないといけない。 timestamp with time zoneで定義すべきかなと思う。 基本的にシステム内部で時間を扱うときは統一的にUTCで扱い、出力時…

kubernetesクラスタで永続化データを扱うのは難易度が高いのでやめたほうがいい

仕事でkubernetesの本番運用を検討して思ったことをまとめる。 あくまで「kubernetesをとりあえず動かせる」程度の理解レベルにての話で、知識豊富な専門家が取り組むのであればこの限りではないと思う。 kubernetesクラスタで永続化データを扱うのは難易度…

YouTubeで公開システム構築をやってみている

「俺が考える最強の契約管理システムを作る」というタイトルのYoutube動画を投稿している。 [再生リスト] 俺が考える最強の契約管理システムを作る - YouTube こんなん。 youtu.be 作業リポジトリも公開してます。 GitHub - mixmaru/my_contracts: 俺が考え…

【Go】nilチェックは value == nilだとダメな場合がある

Goのnilチェックで躓いたのでメモ。 nilチェックは value == nilだとだめな場合がある こんな挙動になる type Nameable interface { GetName() string } type Human struct { name string } func (h *Human) GetName() string { return h.name } func IsNilH…

【テーブル設計】フルネームで保持しているカラムを後から「名字・名前」に分けたい時

フルネームで保持しているカラムを後から「名字・名前」に分けたい時、どうすればいいか考えてみた。 出来たと思うけど、脳内シミュレーションしただけで実際にシステムに対して行ったことがあるわけではないので、もしかしたら穴があるかも。 サンプルケー…

SynologyのNAS設定が楽しい

去年くらいにSynologyのNASを購入した。 【NASキット】Synology DiskStation DS218j [2ベイ / デュアルコアCPU搭載 / 512MBメモリ搭載] 多用途な初心者向け発売日: 2018/09/01メディア: Personal Computers GWに入って改めて設定を触ってて「便利だなー楽し…

scpコマンドの挙動でハマった(ちょっとだけGo)

Goを書いていてsshでファイル転送したかったが、Goでのいい感じのクライアントが見つからなかったので普通にscpコマンドを実行させることにしたが、 scpコマンドの挙動でハマった。 雑にメモ。 やりたいこと remoteの/var/data/ディレクトリの中身を localの…

【Go】gorpにdecimal型を認識させる

経緯 データベースライブラリにgorpを使ってみている。 gorpでは(gorpというより、database/sqlの範疇かも)Goのint型はDBのintと、GoのstringはDBのtextやvarcharと、みたいに自動的にマッピングされて意識しなくてもデータやり取りができる。 Goには標準…