たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

プログラミング

Gitブランチモデル選定

欲しいもの次第 オープンソース/closedソース 未リリースのコードがoff flagで公開されていたらまずいか deployableじゃないと色々困る v1 release non-releaseable commit merged バグ発見 hotfix branch merge hotfix into master ...cannot release becau…

ソフトウェアテスト

clear goal, achivement check, secure improvements 何を書きたいか明確にし(曖昧なテストは書けない)、その達成度を確認でき、完成後の改善における安心感を与えてくれる red is red, check green, secure refactoring ソフトウェアテスト - Wikipedia …

YAGNIと設計とバランス

目的と良い設計と抽象化/汎化と複雑性 オーバーエンジニアリング 欲しくないもの: 非効率な資源の利用 ある実装をする際 シンプルに1時間で実装 実装のメンテコストは中 実装の拡張コストは大 抽象化しつつ1時間で実装 実装のメンテコストは中 実装の拡張コ…

分離と汎化

entangled -> separated -> generalized ごちゃごちゃのコードはそのまま汎化できない. コードを整理して機能別にまとまりを作って、共通部分を汎化用インターフェースとして切り出す. 抽象化 -> 最上層: 複雑性↓、下層: 複雑性↑ 汎化用インターフェース自体…

楽なプログラミングに求められるもの -見通しの良さ、コード量、etc-

怠惰たれ。 怠惰たるために、楽にプログラムを書きたい。 そのために何が必要か。 背景 -書き方の工夫はできることを増やしはしない- ある言語を使う限り、べたべたの命令型パラダイムで書いたコードとOOPやFPで書いたコードで、実行可能な内容は等しい。 あ…

ドメインモデル -Godモデルは人間にとって早すぎる-

Godモデル: 対象の全ての情報を正確に含んだモデル このモデルさえ上手く扱えれば全ての用途において全員が単一モデルが利用できるため神。 → 残念ながら、良く設計された数千の属性をもつモデルは人の手に余る…扱えない… 「Godモデルの○○属性の処理について…

プログラミングにおける「状態/state」

状態は現実であり武器でありバグの温床. 共にやっていくには知識が必要. 言葉 状態 / state 状態を持つ / stateful 1 状態を持たない / stateless 状態とは何か なにであるか 変化しうる値 参照"される"値 独立した値 何かから導き出されるものではない 1つ…

micro frontends

「分散したコンポーネントが協調してアプリケーションを構成する」 協調 = 複数の独立起動するコンポーネントが相互作用してアプリケーションの機能を達成する. 分散されるときに"共有"されるべきものを定義する(interface) c.f. local state domainが外部…

設定可能な低水準記法の抽象化

ベストプラクティスをデフォルト設定とし、設定を明示しない限りそこを気にせず高水準に書ける. 最初はベストプラクティスに透過的に乗っかって、必要な段階になったらベストプラクティスの内容と理由を理解つつ設定を書く. 設定をわざとできなくするのは"op…

あり続けるweb技術

アクセス制御 (認証N/認可Z) データソース 計算資源 (サブルーチン) APIGateway/AppSync ~ API Endpoint (Server) の仕事は? API Endpointの提供 ソースから独立したAPI Endpoint 文字通りinterface (変わらない型) なのでバックエンド変更が可能 単一防御…

エラーと人とプログラミング

We Want to Write Logics, NOT to Fix Bugs. But Human make mistakes. 人は間違う、ゆえに動作確認がいる 人はエラーを起こす 人はプログラムを書く ゆえに、プログラムはエラーを起こす 人のおこなった処理はエラーを含む。 エラーを避ける/直すの仕組みが…

Null安全にかかわる私の指針

Null安全とは 実行時にNullを想定しない場所にNullが表れ問題を起こす、ことが起きないと保証された状態. 安全性という意味では、Nullに対する不正演算には例外を投げると言語仕様にある限り、いちおう安全ではあるはず. 基本的な考え NullとNumber, NullとS…

プログラムの正当性を保証する方式

安全性に関する指針みたいなもの Null安全: Non-Nullable型/Nullable型の明示によるNull安全の保証 プロパティ未初期化

「プレッシャーをかけられても思考は速くならない。」

プレッシャーをかけられても思考は速くならない。 オラクル PEOPLE UNDER PRESSURE DON'T THINK FASTER. Best regards, The Oracle from トム・デマルコ (1999) 「デッドライン -ソフト開発を成功に導く101の法則-」伊豆原弓訳. 1版6刷. p196. プレッシャー…

Git運用方針

論理・哲学の詳細は別記事にて。 branchモデル: git-flow branch統合手順: merge --no-ff (never rebase, always --no-ff) commitログ形式: Add/Fix/Refactor

デザインパターン

設計様式 上手くいくお決まりのやり方 構造みたいなもの こんな設計パターンだとこんな問題が! しかし、こっちの設計パターンならその問題からおさらばできる!最高!

Ops的思想

運用/operations 「サービスが定義された機能を提供する状態」を作り出し続けること 現在の状態は観測されないかぎり不明: 観測 = 監視 Devに強いエンジニアとOpsに強いエンジニアが各々の視点で共通のコードベースを触るのがベスト

ソフトウェアやサービスの何が重要なのか

ソフトウェア、サービス: ユーザーに使われるもの ユーザーに価値を提供するもの 価値そのものを生む場所、価値を生むことを実現する技術 スーパー黒子 DDDにおけるドメイン: 価値の源泉 ソフトウェア/サービスと金の延べ棒の違い 利用に価値があるのか、存…

Dual-Interface & Adapter (Dual-IA)

Dual-Interface & Adapter 良い分離面設計をするために、各coreがownershipもってinterfaceを定義する. interface間をadapterでつなぐ. どう分割面を設計するか、の指針 (何に基づいて分割するか、は扱わない.) domain - interface <= adapter => 外部API と…

コードフォーマットに関する考え方

前提: 「完全なる唯一の正解」は存在しない 各フォーマットはメリット・デメリットがあるし、その程度はユーザー・環境に依存する ポイント: 統一感のなさが問題を引き起こす 不慣れなフォーマットでひっかかる ひっかかること自体がリソースを食う ひっかか…

プログラミングの依存とうまくやっていく

依存とは 依存 (dependency): 対象の存在を前提とし、対象の変更に影響を受ける状態. couplingとも 依存は悪いものなのか 依存対象を必要とする 対象の存在を前提としている -> 対象が存在していない(?)とそこへ依存した部分が構築できない e.g. 利用する…

ソフトウェアアーキテクチャに関わる記事へのリンク

根源にある考え方 一度に考慮すべき範囲は小さいほど上手くいく KISS原則 その考え方に基づくアプリケーションの構築方針 小さく区切られたブラックボックスを組み合わせて大きいシステムを造る divide-and-conquer/分割統治 link 良い分割の方針 何に基づい…

移譲と関数と高階関数、依存性の注入

委譲 (delegation) 委譲 - Wikipedia ufcpp.net 関数ポインタに似てるけど、methodが所属してるインスタンスの状態もくっついてくるから、その辺は違う 連載:C#入門 第17回 処理を委譲するdelegate(5/5) - @IT eno0514.hatenadiary.jp 型だけ決めて、委…

一度に考慮すべき範囲は小さいほど上手くいく

small is beautiful (UNIX) 考慮範囲は小さいほうが脳みそ楽でうれしい (怠惰) 関心の分離 線引き マイクロサービスアーキテクチャ 正しくない解釈が発生しうる局面 考慮すべき範囲なのもポイント。 広い視野で新しい発想をする、みたいな場面で考慮範囲を最…

入力に対する制約

一般に入力バリデーションと呼ばれるもの。 対象は関数からフォームまで色々広く プログラムは (明示的・暗示的に) 入力に想定範囲を持つ プログラムを書く際、入力には範囲が想定されている。 argAは文字列だとか、英数字だけだとか、intだとか、非ゼロだと…

AtomのFolding/Unfoldingで差をつけろ

折り重なったコードの山々を自由に飛び回りたい。さあFolding/Unfoldingの時間だ 結論 ショートカットとエディタ拡張を使え (以下、コマンドはWindows準拠) atom標準ショートカット folding: Alt + Ctl + [ unfolding: Alt + Ctl + ] fold at specific level…

Atom IDEとは。何ができるのか

Atom IDEとは: Atomエディタを統合開発環境 (Integrated Development Enviroment)のように運用する、という概念 Atomプラグイン群によって実現できる IDE-like UI: atom-ide-ui Language Server support: atom-languageclient 各言語で ide-xxx (e.g. ide-ty…

ssh (secure shell) 入門

SSH (secure shell) とは、外部のコンピュータへ安全にアクセスする方法のこと。 より正確には、安全でないネットワークを介しながら、安全なリモートログインと安全なネットワークサービス (shell操作など) を実現するためのプロトコル。 SSHとは Secure Sh…

関心の分離 −利点とそれを促すアーキテクチャ−

関心の分離 / separation of concerns、SoC 依存関係逆転の原則 / Dependency Inversion Principle 依存ルール 密結合とは 関心が分離しても密結合みたいなケースはありうるか 上位と下位が頭を固くしてる気がする。ブラックボックスでいいんじゃない? inte…

小さく区切られたブラックボックスを組み合わせて大きいシステムを造る

[caller/callee・ブラックボックス・interface] 小さなブラックボックスを組み合わせて大きいシステムを造る calleeが内部でcallerを操作するな、calleeは変数を返すだけにしろ(まさに関数型) [ブラックボックス: 暗示的外部操作をしない] 暗示的に外部を操…