たれぱんのびぼーろく

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

プログラミング

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

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は変数を返すだけにしろ(まさに関数型) [ブラックボックス: 暗示的外部操作をしない] 暗示的に外部を操…

日本語声質変換 (ボイスチェンジ) の先駆者たち

アカデミアは一切フォローできていない。だれかフォローしてくださいお願いします。 バ美肉 選ばれしおじさん達による奇跡の調音。ディープラーニングなんていらなかったんや! ディープラーニングの力で結月ゆかりの声になってみた デモが聞ける日本語VCの…

PhotonAnimatorViewの全て

とは PhotonAnimatorViewとは、Unity Animation を同期させるためのx。 Exit Games社のPhoton Unity Networkingライブラリに含まれている。 デモ動画 何ができて何が出来ない 使い方 AnimatorViewコンポーネントをアタッチ。 PhotonViewで設定をいくつかする…

ブラウザとモジュールとバージョン管理

ブラウザはモジュールを持つか ブラウザとモジュール モジュール化は綺麗で管理しやすく安全なコードを生む。 モジュールは最高だ。 そして今や、ブラウザ(フロントエンド)でもモジュールは使える モジュールは単体で動くのが主たる仕事ではない。 他のモジ…

逆引きRamda.js

Ramda.jsの関数を機能ごとに整理してみた。 日本語のRamda.js記事が少ないのは、なんでなんだろね? 制御構造の抽象化 条件分岐 if系 R.ifElse R.ifElse(condition, onTrue, onFalse) condition関数に基づいてonTrue || onFalse関数を実行. http://ramdajs.c…

システムトレード作成で身につけた技術

非同期とエラー処理 エラーを起こしうる、複数の非同期処理を扱うのがツラミだとよく分かった. 非同期処理の完了タイミングはネットワークによって前後し、エラーで仕切り直す処理が必須になる. うまく処理するための技術として Async/await try-catch (with…

MVPとやら

Minimum Viable Product 思うところがあるのは、コアをminimum viableにするのが大事なんじゃないのってこと 最小限の機能で解決しようとしている問題を解決するプロダクト 地方からの価値生成 • 本当の最小限を絞り込むためのユーザーストーリーマッピング …

JavaScriptのgenerator入門

generatorの概念 generator(という概念)とは、繰り返しを簡単に・見通し良く記述する仕組みである. generatorの利用 generatorを利用することによって 繰り返しオブジェクト(イテレータ)の容易な作製 見通しの良い非同期処理コード記述 が可能になる. gene…

Node.js プロジェクト開始手引き

git init npm init gitは.git directory, npmはpackage.json が命 これさえあればgitとnpmが消えても大丈夫(のはず) でもコード自体が吹き飛ぶと元も子もない. なのでGitHubのプライベートリポジトリをリモート. これで万事オッケー! 復旧したいときはGitHu…

再代入できる世界とできない世界の違い

今、数学の世界にいます x = 1 y = x + 2 yは? => 3 (当然だろ) ----------------------- 今、プログラミングの世界にいます x = 1 x = x + 2 xは? => 3 (当然だね) 相変わらず、プログラミングの世界にいます x = 1 ■■■■ x = x + 2 xは? => …確定しない…

アップロードしたファイルの破損

ネットワークを介してファイルをアップロードする. この時、ファイルは破損しうるのではないか? バックアップのためにアップロードしたのに、壊れてたら何の意味もない! これを防ぐ(破損に備える)ための仕組み色々ある MD5 ハッシュ値によるチェック. MD…