isyumi_netブログ

isyumi_netがプログラミングのこととかを書くブログ

ポリテックと型システム

金融とテクノロジーがフィンテックで行政とテクノロジーがゴブテックなら、政治とテクノロジーの融合はポリテックだそうだ。 政治をよくできそうな技術として、どうも政治家さんにはAIがモテモテのようだが、型システムの方が味がいい気がする。 例えばこの…

ブラウザに自動ドネーションAPI機能がほしい

以前からコンテンツ提供者にもっとお金が支払われるべきだと思っていた。 こういう仕組みがほしい。 僕がChromeに「毎月5,000円をコンテンツ提供者に支払う」と設定する Chromeは俺の行動履歴からどのサイトにどのくらい滞在しているかを集計する 月締めで滞…

はてなが独自ドメインのSSLに対応した。

おめー。 中の人ありー

人生の5箇年計画

やりたいことがいっぱいありすぎるので一覧を作る。 5箇年計画と書いたが、実際には何年かかるか全く見当がつかない。 数学検定準一級 TOEIC800点 レッドコーダーになる Webフロントエンドのベストプラクティスホスティングサービスを作る Dartのサーバーサ…

外部からSSH接続を受け付けるプロダクトのSSH設定

今、デベロッパー向けにこういうサービスあったらいいなーと思っているものがある。 その中でSSH接続を受け付けたいなと思ったから実現方法を考えた。 WordPressをホスティングしてvimで記事を編集できるようなものをイメージして欲しい。 ルール ・1人1Dock…

ビジネスロジックのコードからDBのクエリを自動生成することは可能か?

最近取り組もうと思っていること ビジネスロジックのコードを解析することでこのようなことができるのではないか? このコードを実行するために必要なDB上のデータの範囲を特定する そこからDBへのクエリを自動生成できるのではないか という疑問だ。 前提と…

Dartのサーバーサイドフレームワークを作ろうと思う

サーバーサイドもDartで書いてきた。 ワンパターン化してきたのでフレームワーク化する。 とりあえず構想を発表する。 認証を楽にするため、HTTPサーバーはなくFirebaseサーバーとして振舞うものにする。 サポートする機能3つだ。 Firebaseの型定義 View コ…

設計の逆流問題とその解決策案

僕が設計の逆流問題と呼んでいる概念の話をしたい。 僕がコードを書いていて一番疲れることの一つだ。 一般に下レイヤーのコードが上レイヤーのコードに感知しないのがいい設計ということになっている。 例えば、WebAPIを開発しているとしよう。APIのハンド…

モデリング関数

僕がモデリング関数と呼んでいる概念の話をしたい。 DBから落としてきたデータをもとにビジネスロジックを書くと、関数の引数が増えすぎてうざくなる経験はないだろうか。 例えばTwitterを作っているとして、AさんがBさんをフォローしているか判定する関数は…

10年のプログラミングの変化

お断り:僕は数年前まで東海地方のクソ田舎に住んでたので「時系列がおかしい!」と思った方は、それは都会↔田舎のタイムラグです。東名高速道路オーバーヘッドです。死罪死罪。 Java 一番俺史が長いJavaについて。 まずJavaアップレットがなくなりました。…

【緩募】配列Aと配列Bを引数にA→B変換経路を返す関数の一般名が知りたい

僕には「こういう関数って一般的になんて言うの?」と思ってる概念があります。ご存知の方がいらっしゃいましたら是非教えていただきたいです。 知りたい概念をざっくりいうと「配列Aと配列Bを引数にA→B変換経路を返す関数」です。一般名詞とかあるのでしょ…

2017年読んだ本の1行感想

2017/11 失敗の科学 失敗を「絶対に起きてならない事」とすると余計に重大な失敗につながるが「減らそうと」すると減る。 未来型国家エストニアの挑戦 日本もこうなったらいいのになーと思う。ただ、国民IDを「最初の二桁が生まれた年で~その次の一桁が性別…

2017年、Twitterで知った新常識

今年Twitterで「お前そんなことも知らないのかよwww」「知らなくても気づけよwww」と煽られている人を発見したが、正直知らなかったことをメモした。 お前らの常識のハードル高すぎだろという揶揄を込めて。 コンロはガスボンベが爆発しないように使わ…

スターウォーズの感想。

ネタばれあります。 スターウォーズ EP8見終わったので感想を書く。 テーマについて ストーリーはいろんな大人の事情の上に成り立っているものだと思うが、あえてそこには触れない。続編を作らないといけないとか誰々が活躍するとスポンサーが喜ぶとかそうい…

常に最新のcreate table文を用意しておこう

create table文は現在のTableの状況を説明する最も大切なドキュメントだ。テーブルのスキーマがわかるだけではない。foreign key文からリレーション関係が読み取れる。index文からパフォーマンスの要所がわかる。 実際のシステムのDBはalter table文でどんど…

デプロイを自動化しよう

デプロイのミスは多い。 例えば PHPのアップロード先のディレクトリを間違える Java起動スクリプトを間違える 本番と開発で環境変数を分けていたが間違える などなど。 デプロイは必ず自動化しよう。デプロイのたびにFFFTPやTeraTermを立ち上げていてはいけ…

インフラの設定を自動化しよう

今日はインフラの設定を自動化しようという話だ。 インフラの設定とは例えば Apacheのconfigファイルの編集 PHPをインストールする PHPのスクリプトファイルを所定のディレクトリに配置する MySQLを起動する CRONを設定する などだ。 インフラの設定で大事な…

switch case文の後に処理を続けないで

switch case文の中で変数に代入すると、非常に読みづらいコードになる。そのSwitch文の目的がわかりづらいしこのSwitch文がどの変数を書き換える可能性があるかを把握しづらいからだ。しかし、結局Switch文は何か値を返すために書いてある場合がほとんどであ…

現在時刻を外から入れよう

時刻によって動作が変わるプログラムを書いた時、どうやってテストしているだろうか。手作業で書き換えているかもしれない。 String getAisatu() {// var date = new DateTime.now(); var date = new DateTime(2017, 10, 28, 18, 0); if (date.hour > 17) { …

書き込み系のREST APIは、URLとBodyに無いデータを書き込まないようにしよう

REST APIは、要求を受理するか判定する部分と、要求に従ってデータを返信したりDBに書き込んだりする部分に分かれる。前者の受理判定部分はあらゆる情報を使っていい。しかし、後者の処理部分はリクエストに明記されたもの以外を使ってはいけない。使ってい…

全体を集計した結果のキャッシュ

blog.isyumi.net 前回、元データとキャッシュが1:1で対応するときのコツを書いた。今回は全体を集計した結果のキャッシュの話をする。難易度が1段上がる。 まずどのようなキャッシュが該当するか考えよう。月ごとの売上を合計して画面に表示するプログラ…

元データとキャッシュデータが1:1で対応する時のコツ

元データとキャッシュデータが1:1で対応するとは、キャッシュ層に元データの一部を置いてある状態である。この場合、キャッシュのデータは元データのどの部分かはっきりしている。例えば、47都道府県の市町村リストがあり、その中で茨城と島根のデータをロー…

キャッシュを設計する時に考えること

キャッシュは難しい。そこで安全な設計ができるように考えるべきことをまとめた。 まず、キャッシュにはどのようなものがあるか。 前回のHTTPリクエストの結果をローカルに保存しておき、次回はそこから結果を返す HDDに書き込んだデータをメモリにも保存し…

バッチ処理には必ずドライラン機能をつけよう

バッチ処理の負債化は早い。理由はよくわからない。想像するに、普段ほとんど意識しないからどんな機能があるか忘れる、外部のシステムとつながっているので手動テストすらし辛い、処理が長い、などの理由がありそうだ。 バッチ処理は簡単に動作を再現できる…

複数の言語で開発する時は定数を一元管理できるようにしよう

一つのシステムを複数の言語で開発することがある。例えばサーバーをJavaで開発しクライアントをTypeScriptで開発する、などだ。こんな時、定数の一覧をYAMLなどでファイル化しよう。そして、YAMLから各言語の定数ファイルを自動生成するものも作ろう。する…

VからCにメッセージを送る時は最小限のデータにしよう

いろんなMVCがあると思う。特定の実装に依存する話じゃない。 RoR的なサーバー・クライアントモデル ReactやAngularを使ってクライアントサイドMVCを構築する CLI など、色々ある。大雑把に話の前提を揃えよう。Mは様々なデータを管理している。VはMを加工し…

急遽個別対応するときはコンパイルエラーを出しながら元に戻せるようにしよう

あなたはショッピングサイトを運営していたとする。ある日急に担当者から「来週からセールを始めるので13:00になったらこの告知バナーを表示してほしい」と依頼された。しかし、既存のシステムにはセール時にバナーを差し込むようなレイヤーは用意していない…

連想配列をclassでくるもう

連想配列を使う時の些細な一手間について。連想配列は自由度が高い機能だ。反面、その連想配列をどう使っているのかがコードを書いた本人にしかわからない。そこで、コードの中で連想配列の使い方を明示する方法を紹介する。 あなたは刻々と流れてくる売り上…

再代入は初期化の直後に限ろう

下のコードのように一度変数に値を代入した後に別の値を代入することを再代入という。 例: func main() { i := hoge() i = "iii" log.Print(i)} まず、極力再代入を減らすように心がけよう。再代入を減らすとバグが減るしデバッグの手間も減る。このブログ…

処理の流れを型で表現しよう

もしかしたらあなたは型をめんどくさいものだと感じているかもしれない。型宣言は動くようにするために仕方なくするものと思っていないだろうか。もしそうなら型を使って頭を整理する習慣について知ってほしい。きっとあなたは型を極力狭く定義したほうが捗…