たれぱんのびぼーろく

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

目的をじっくり考えつつ、素早く手を動かす

何かを達成するためには、効率の観点から見ると、

  • 目的とじっくり向き合うこと
  • まず手を動かすこと

の両立が重要。

目的の熟慮なき努力は絶望的な非効率を生む

YouTuberデビューした。炎上ネタでバズとった。チャンネル登録者数爆増。このパターンで伸びてる、いい感じだ!
ある日ふと思う。なんでYouTuber始めたんだろ?
やってて楽しくないんだよな…。
あれ、実は俺、同じ感覚の人が集まった小さいコミュニティを持ちたかっただけでは…? うわああぁぁ

何かを始め、波に乗り、努力しても、行きたくない高みに到達したのでは意味がない。
エベレスト登頂に価値を見出す人も見出さない人もいるのだ。
登ってから目的違いに気づき、下山して1から別の所を目指すのは絶望的に非効率だ (投下した莫大な努力量と釣り合ってない)

つまり、(努力が必要な) 遠くへ行くには、じっくり事前に目的を決めることが効率よい

まず手を動かさないと効率が悪すぎる

私は、同じ感性をもつ仲間と一緒に過ごすコミュニティが欲しい
1ヶ月かけて調査を行い、YouTuberデビューの綿密な計画を立て、他のYouTuberデビュー企画勢とコミュニケーションを取った。あとはデビューするだけだ!
デビューして気づく。あれ、想像より動画作成に時間がかかるな。他のデビュー勢見てると意外と時間なくなっちゃう。あ、投稿者ページにこんな便利機能あったのか…
やって初めてわかる問題、想定より遅れる動画投稿、崩れる計画。何が悪かったのか…

完璧な計画を立てるためには無限のリソースが必要だ。
計画自体は重要だとしても、限られたリソースで立案するために効率よく計画立てをする必要がある。
立案の前提となる情報収集において、手を動かすことは非常に効率がいい。
なぜなら、デビューしてわかったように、1やれば10の問題が噴出するからだ。
何を調べるか10個分時間をかけて頭を捻らなくても、1やれば10噴出してくるのだ。
そして1は実際にやろうとしてたことであるから、出てくる10の問題は大概有用だ。

つまり手を動かすことは近い計画・問題を検討する上で非常に効率がいいのだ。

遠く: 目的を熟慮、近く: まず実行

必要努力と結果の関係が大事。
目的は、高い努力 (熟慮) を必要とし、遠くを見通すことができる。
実行は、小さな努力 (実行) を必要とし、近くを素早く見渡すことを可能にする。

両方は相補的なのだ。両立こそが重要

デュエルの商標

決闘

バンナム

デュエル

デュエル\DUEL 同じく

書体はどれも普通.

「デュエル」「デュエル/決闘」は商標登録なし
ゲームでは"闘い"が非常に一般的な概念なので、ゲーム関係商品で「デュエル 」(たんなる決闘の英語訳)「デュエル/決闘」(決闘に英訳くっつけただけ) をくっつけただけでは識別がつかない(と私は思う、ので出願しても拒絶されると私は思う)

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-typescript) みたいな名前のLanguage Server wrapperがある.
またatom-ide-debugger-nodeのようにデバッガ用パッケージも各言語にある.

ssh (secure shell) 入門

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

SSHとは

Secure Shell (SSH) is a protocol for secure remote login and other secure network services over an insecure network.
RFC 4251

SSHの仕組み

べんきょうちゅう

典型的にはTCP/IP上で通信を行う。しかし必ずしもTCP/IPに限定されるわけではない (reliable data stream上であればよい)。

The transport layer will typically be run over a TCP/IP connection, but might also be used on top of any other reliable data stream.
RFC 4251

SSHを利用する

SSHを利用したアプリケーションとしてはOpenSSHがデファクトスタンダード.

小さなブラックボックスを組み合わせて大きいシステムを造る

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

[ブラックボックス: 暗示的外部操作をしない] 暗示的に外部を操作した場合、エラー解析のためブラックボックスを開く必要がある  外部にある何を、どんな条件で、どのように変更するか開けないと (明示されていないために)わからないから  あけたらそれ、ブラックボックスちゃうやん

[引数によらない状態変化がもたらすデメリット] いつ変わるか調べるの大変 (怠惰に反する) X = "new"とかx.y = "new"とかf(X)とか書いてあったら、"x = || (x)"で検索かけられなくもない  関数のほう死ぬほどいやだけど 明示してあれば、引数によらんでも一緒か。関数理解は大前提だし  y = x, f(y)されたら引数型でも同じくらい手間がかかる

[ブラックボックス間の協調]  変数変換  イベント

[考慮すべき範囲] small is beautiful (UNIX) 基本的なモチベーション: 考慮範囲は小さいほうが脳みそ楽でうれしい (怠惰) 型不明オブジェクトを外部から受け入れる (引数、暗示的依存とわず) 場合、  ・オブジェクトがどうなっているか   ・property Xを持つか   ・処理中に外部から変更されるリスクはあるか  を考慮すべきである。すなわち外部を全て理解し考慮しないといけなくなる (つらい)  -> 外部interfaceの明示

[必要条件と十分条件を誤解させる言い方はさけよう]

calleeは何をするか

なんか呼ばれたので処理して返すよ
実装:

  • function call & return
  • event come & event emit
  • change detection by other program?
  • interface function call

最小手でUnity-Node.js間WebSocket通信

Unity & Node.js使いなら、最速5分でできるよ。

概要

Unity (client) 側はwebsocket-sharpを、Node.js (server) 側はwsを使う。
Unityアプリの画面click回数をserverへ送るテストコードを書くものとする。

手順

  1. websocket-sharpのダウンロードとビルド
  2. server側Node.js コードの準備
  3. client側Unityコードの準備
  4. 通信チェック

1. websocket-sharpのダウンロードとビルド

websocket-sharpをgit cloneして落としてくる。
不要なExamples (多分3つほどある) ディレクトリを削除する。
slnファイルを開き、ビルドする。
websocket-sharp/binの中にdllファイル(websocket-sharp.dll)があればOK!
この1ファイルがUnity側のすべてを担ってくれる。すごい。

2. server側Node.js コードの準備

適当なディレクトリでnpm initしておき、.jsファイルを作成する。
npm install wsでライブラリwsをインストールする。
あとはWebSocketサーバーのコードを書くだけ。最小なら5行ほどで終わる。

const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({
  port: 8080
});
wss.on('connection', (ws) => ws.on('message', (message) => console.log('received: %s', message)));

かけたらnode (filename).jsでとりあえずサーバー走らせとけば準備完了

3. client側Unityコードの準備

次はclient側のUnity. 先のwebsocket-sharp.dllをコピーし、Unity editor上からAssetsの好きなところへ入れる。
こうすることで、C# scriptのusingからアクセスが可能になる。
あとはC#コードを書き、適当なEmpty objectにアタッチするだけ。
コードはこんな感じ。

using UnityEngine;
using WebSocketSharp;

public class wsClient : MonoBehaviour {
    private int count = 0; // click counter
    private WebSocket ws;
    void Start () {
        var url = "ws://localhost:8080";
        ws = new WebSocket(url);
        ws.Connect();
    }
    void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("clicked!");
            count++;
            ws.Send("clicked No. " + count.ToString());
        }
    }
}

4. 通信チェック

Node.js サーバーappを動かした状態で、UnityをRun。画面をクリックするとメッセージが送られるはず。
Node.jsのコンソールでreceived: clicked No. Xと出てきたら大成功!
あとは好きにメッセージを送り、server側からの通信を自力で実装して好き放題だぞえ。

参考文献


qiita.com

github.com
このサイトで作ってあるデモ。wsさえnode.js側でinstallしとけばそのまま動く.

年金の学生納付特例手続き

全自動にしてほしい…

手続き方法

所定の申請先に、所定の書類を提出する。

提出方法

以下の申請先いずれかに、所定の書類を提出する。

  • 住民登録をしている市区役所・町村役場の国民年金窓口
  • お近くの年金事務所
  • 在学中の学校等(※在学中の学校等が学生納付特例の代行事務を行う許認可を受けている場合のみ)

提出方法は直接あるいは郵送

実例

さいたま市:
さいたま市/国民年金の学生納付特例について

提出先: 区役所保険年金課
さいたま市/保険年金課の紹介