vue-cliでhttps

httpsにする必要が出てきたので、httpsにする方法を調べてた。

結果的に、

yarn serve --https

これか

node_modules/.bin/vue-cli-service serve --https

https起動できる。

npm run serve --https

これだと設定上できない。変えればできるのかな。

証明書関係の警告が出るので、証明書をダウンロードして、入れ直して、常に有効に変更すれば良さそう。

証明書関係あんまわからんからやろうかぁ。

ABC 054 C One-stroke Path と OI 2009 予選 D カード並べ

https://qiita.com/drken/items/e77685614f3c6bf86f44

の続き。

https://atcoder.jp/contests/abc054/tasks/abc054_c

問題概要

自己ループ、多重辺がないグラフが与えられる。頂点番号 1 から全ての頂点をたどるパスは何通りあるか?

考えた解法

dfsで全探索。通った。visitedフラグを戻したりする練習になった。

visited, g = ([], [])

def dfs(i):
    visited[i] = True
    ans = 0
    if all(visited):
        visited[i] = False
        return 1
    for j, b in enumerate(g[i]):
        if b and not visited[j]:
            ans += dfs(j)
    visited[i] = False
    return ans


def main():
    global visited, g
    n, m = [int(i) for i in input().split()]
    visited = [False for i in range(n)]
    g = [[False for i in range(n)] for j in range(n)]
    for i in range(m):
        t, f = [int(j)-1 for j in input().split()]
        g[t][f] = True
        g[f][t] = True
    print(dfs(0))


if __name__ == '__main__':
    main()

https://atcoder.jp/contests/joi2010yo/submissions/me

問題概要

カードが、N 枚あり、そのうち K 枚を横 1 列に並べ、できる数字の数を求める問題。

考えた解法

usedフラグを用いて、組み合わせを列挙する。前に、組み合わせを自分で書いた時より大幅に、コードを理解できるようになっていてびっくりした。

used = []
ans = set()
n, k = 0, 0
t = []
card = []

def rec(i):
    if i == k:
        ans.add(int(''.join(t)))
        return
    for j in range(n):
        if not used[j]:
            used[j] = True
            t.append(card[j])
            rec(i+1)
            t.pop()
            used[j] = False
    return

def main():
    global used, n, k, card
    n = int(input())
    k = int(input())
    used = [False for i in range(n)]
    card = []
    for i in range(n):
        card.append(input())
    rec(0)
    print(len(ans))

if __name__ == '__main__':
    main()

最初、再帰関数の i == k で return を書き忘れたけど、ギリ 10 秒以内(9.6s)で通ったw あとで気づいて、return入れたら 26ms ぐらいになった。ワロタ。

OSメモ(4)

ページディレクト

32bitアドレスの場合、ページングは、以下の順番

という感じみたいだ。

64bitアドレスの場合は、前段に、ページマップレベル 4 とページディレクトリポインタと呼ばれる変換テーブルが追加されて計算されるみたいだ。

64bitの場合、変換テーブルのインデックス値は、9 bit で区切られているから、それぞれの変換テーブルは、512個のエントリを持つことができる。

PED(ページディレクトリエントリ)の 7 bit 目をセットすると、ページテーブルを指さなくなり、ページフレームのサイズが、2 MB(211)になる。

なお、PDEとPTEは、TLBというキャッシュに登録されるらしい。

vue-cli 3 のコマンドいろいろ実行した所感


vue create <project-name>

<project-name>という名前のプロジェクトが作られる


vue add <plugin>

既存プロジェクトに、vue-cli3のプラグインを追加する。 vue-cli3 は、@vue/cli-plugin- で始まるプラグインのこと。 この時、generator[s]も起動される。generator[s]とは、パッケージのインストールとか初期設定あれこれしてくれるやつ(だと思う)。 特殊ケースとして、<plugin>には、router, vuex が指定できる。


vue invoke <plugin>

vue add の invoking のところだけやってくれるコマンド。eslintはできたけど、routerができなかった。vue-routerもやったけど変更できなかった。


vue inspect

webpack(jsファイルをまとめてくれるやつ) の設定とかを出力してくれるやつっぽい。正直、今はわからん。


vue serve

main.jsファイルがあるディレクトリで動かすと、サーバーが立ち上がる。


vue build

buildする(雑)


vue ui

ブラウザで設定できるようサーバーとか立ち上げてくれる。


vue config

コンフィグの設定、閲覧ができる。


vue upgrade

プラグインcli-serviceのアップデートができる。


vue info

開発環境を出力できる。デバッグ用って書いてあるけど。


AOJ 0503 Cup with python

qiita.com

続きです。

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0503

問題概要

大きさが小さい順にカップが積まれている皿が 3 つあり、隣の皿に、うつしていって(カップの大きさが小さい→大きいの動かし方はだめ)、最も左か最も右に移す最小手順数を出力する。

考えた解法

BFSでシミュレートする。それぞれの皿の状況をまるまるqueueに追加する。 カップを変える時、a→bに動かした時、次は、b→aには動かさない、また、動かした後、a→bに動かすことはできない。これで、queueに入れる状態の数は少なくなる。

遅いけど(3.2s)コードがめちゃめちゃスッキリしてる。

from collections import deque


def main():
    while True:
        n, m = [int(i) for i in input().split()]
        if n == 0 and m == 0:
            return
        _, *a = [int(i) for i in input().split()]
        _, *b = [int(i) for i in input().split()]
        _, *c = [int(i) for i in input().split()]
        a.insert(0, 0)
        b.insert(0, 0)
        c.insert(0, 0)

        q = deque()
        q.appendleft([a, b, c, 0, -1])
        tmp = [i for i in range(0, n+1)]

        while q:
            # d はカウンタ
            a, b, c, d, t = q.pop()
            """
            print(a)
            print(b)
            print(c)
            print('=======')
            """
            # 終了
            if d > m:
                print(-1)
                break
            if a == tmp or c == tmp:
                print(d)
                break
            # a から b
            if a[-1] > b[-1] and t != 1:
                q.appendleft([a[:-1], b+[a[-1]], c[:], d+1, 0])
            # b から a
            if b[-1] > a[-1] and t != 0:
                q.appendleft([a+[b[-1]], b[:-1], c[:], d+1, 1])
            # b から c
            if b[-1] > c[-1] and t != 3:
                q.appendleft([a[:], b[:-1], c+[b[-1]], d+1, 2])
            # c から b
            if c[-1] > b[-1] and t!= 2:
                q.appendleft([a[:], b+[c[-1]], c[:-1], d+1, 3])


if __name__ == '__main__':
    main()

OSメモ(3)

64bitのメモリを理解するために、Linuxのブートプロセスをみるを読む。

64bitのOSでは、DS, ES, FS, GS, SS は、使わないようだ。これは、フラットモデルを使うからみたいだ。もしかしたら、フラットモデルじゃないモデルを使うなら、使えるのかもしれない。

論理アドレスの定義は、セグメントセレクタとオフセットの組み合わせ。

この論理アドレスは、セグメンテーション回路を用いて、リニアアドレスに変換。その後、ページングがonになっていたら、ページング回路によって、物理アドレスに変えられる。offだったら、セグメンテーション回路によって算出されたリニアアドレスが、物理アドレスになる。

ところで、セグメントセレクタとオフセットの組みが論理アドレスって書いてある。例として、論理アドレス0xC0100000にアクセスすると、0x00100000にアクセスされるって書いてあるんだけど、この論理アドレスは、フラットモデルだから、セグメントセレクタは、指定する必要ないよってことかな。まぁとりあえず、なんとなくわかったのでいいや。

ページングの変換テーブルは、いろいろ変えられるらしくて、Linuxの場合は、ユーザープロセスごとに、変換テーブルが、設けられているから、別プロセスで同アドレスを指定しても、同じ物理メモリにアクセスできないってことなんじゃないかなと思う。つまり、変換テーブルを弄れれば、別プロセスのデータを書き換えられるかもしれないね。なお、セキュリティ()

ちなみに、ページングは、CR3→ページディレクトリ→ページテーブル→ページ っていう感じで、節約できるようになっているらしい。明日は、ページディレクトリとかの話やるぞ〜〜。

npmのモジュール作成

寝てないので普通に限界なんですけど、ちょっとしたことでも書いてやる。

vue を触っていく上で、欠かせないのが、npmパッケージマネージャでして。

どうやって作るんかな〜っていうのを眺めてた。

mkdir sample-module

先に、ディレクトリ作る

cd sample-module

移動。

npm init

これでいろいろ入力すると、package.jsonができる。

npm install -g .

でインストールして、

npm -g list | grep sample

で探してあれば、おっけいっぽい。ここから拡張していくんかもしれん。

あほ眠い。