2020-09-01から1ヶ月間の記事一覧

child_processから起動させる

方法1 #!/usr/bin/env node const { spawn } = require('child_process') const subprocess = spawn('./node_modules/electron/cli.js', ['./index.js'], { 'stdio': ['inherit', 'inherit', 'inherit'] }) 方法2 PATHを通してコマンドを叩く const { spawn …

templatesとslots

概要 webコンポーネントのshadow DOMとしてポピュラーに使用されている templatesについて より簡単にマークアップを使い回す事ができる。 template要素とその中身はDOM内にはレンダーされないが、 JavaScriptを通して参照することが可能。 簡単なtemplate例 <template id="my-paragraph"></template>…

単位 em と rem

CSS

よく忘れるのでメモ。 どちらもfont-sizeを表す。 単位 説明 1 em 要素のfont-size 1 rem root要素のfont-size 要素の font-size が 10pxのとき 単位 サイズ[px] 1 em 10px 2 em 20px 3 em 30px 参照 ルート要素 (= html要素) developer.mozilla.org

command の 標準入出力 覚書

child_process.spawn(command [, args] [, options]) command を 新規のプロセスで実行し、subprocess を生成する。 (command は 子プロセスとなる) options.stdio command の標準入出力先を設定する。 pipe: デフォルト。commandの標準入出力は、subproces…

child_processを使ってVimを起動する

コード const { spawn } = require('child_process'); const subprocess = spawn( 'sh', [ '-c', 'vim' ], { stdio: ['inherit', 'inherit', 'inherit'] } ); // 2秒後に終了させる setTimeout(() => { subprocess.kill(); // Does not terminate the Node.j…

1モジュール、1ファイル構成

ソースコード構成 1 src -+- main.rs | +- foo.rs | +- bar.rs main.rs mod foo mod bar fn main() { ... }

日本の現在時刻の取得

let current_tokyo_time = FixedOffset::east(60 * 60 * 9).from_utc_datetime(Utc::now().naive_utc().as_ref()); println("{}", current_tokyo_time Note Date / DateTime の生成 以下のTimeZone トレイトを実装しているstructから生成できる Utc - 協定時…

html inputタグから取得したFileをRust側で読み込む

github.com lib.rs #[wasm_bindgen] pub async fn load_file(file: web_sys::File) { let cb = Closure::wrap(Box::new(move |text| { web_sys::console::log_1(&text); }) as Box<dyn FnMut(JsValue)>); let promise = file.text().then(&cb); let result = wasm_bindgen_future</dyn>…

Iterator `map` and `filter`

map 要素は参照として渡される filte 要素はダブル参照として渡される map 例: Vec<bool> // map<B, F>(self, f: F) -> Map<Self, F> where F: FnMut(Self::Item) -> B, // Self::Item = &T let nums = [1, 2, 3, 4, 5]; let is_evens = nums.iter().map(|&n| { if n % 2 == 0 { t</self,></b,></bool>…

import 構文

2種類ある default import named import default import export default 文によってexportされた値は、import時に任意の名前を付けることができる lib.js export default 42 app.js import A from './lib.js' import Num from './lib.js' named import expor…

スマートポインタ

スマートポインタとは Rustにおけるスマートポインタとは内部に値を持ち、C言語のポインタのような振る舞いをもつデータ構造であり、唯一ヒープ上で値が確保される。 その他のRustの値は全てスタック上で確保される。 以下の2つのトレイトが実装されている…

WebAssembly 準備

用意するもの The Rust Toolchain rustup rustc cargo wasm-pack ビルド、テスト、WebAssemblyの生成のためのワンストップショップ https://rustwasm.github.io/wasm-pack/installer/ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | s…

ToOwnedトレイト

メモ スライスから元のスマートポインタに変換することができることで使われているように思う。 Borrow<Borrowed>トレイトを実装することで自動導出もされる。 動機 Stringはメソッドを呼ぶと返り値として&strを返すものがあります。 例 trim_end // 改行を取り除くと </borrowed>…

基数ソート in Rust

基数ソート radix sort O(N logN) バケットソートは巨大な数字が存在するとその分箱の数を用意する必要がある 基数ソートは各桁に対してバケットソートすることで最後にソートすることができる // Number of Digits const D: usize = 3_usize; // Number of …

バケットソート in Rust

バケットソート bucket sort O(N logN) 比較をしないソート 含まれている値の種類の数が決定している必要がある ( = バケツの数) const RANGE: usize = 10; fn main() { let a = [5,4,6,7,1,3,8,2,9,0]; let mut d = [0;RANGE]; bucketsort(a, &mut d); prin…

バブルソート in Rust

バブルソート bubble sort O(N^2) 先頭から順に隣同士比較していく (最大値から決定する) fn main() { let mut a = [8, 3,4, 3, 7, 6, 5, 2, 1, 10]; for i in 0..a.len() { for j in i+1..a.len() { if a[j] < a[i] { a.swap(i, j); } } } println!("{:?}",…

選択ソート in Rust

選択ソート selection sort O(N^2) 最小値から順に決めていく 安定ソートでない fn main() { let mut a = [3, 2, 1, 4, 1]; for i in 0..a.len() { let mut min = i; for j in i..a.len() { if a[min] > a[j] { min = j; } } a.swap(i, min); } println!("{:…

挿入ソート in Rust

挿入ソート insertion sort O(N^2) 第2項から先頭に向かって隣同士入れ替えていく 昇順 fn main() { let mut a = [10, 3, 3, 1, 90, 34, 78, 2, 12, 56, 1]; for ins in 1..a.len() { // 挿入する値を退避 let temp = a[ins]; for cmp in (0..ins).rev() { …

関連型を持つトレイトオブジェクトを宣言する

dyn トレイト<関連型 = 型> trait Tr { type Ty; fn go(&self) -> () {} } struct St {} impl Tr for St { type Ty = String; fn go(&self) -> () {} } // トレイトオブジェクトに対して関連型を指定できる fn foo(t: &dyn Tr<Ty = String>) -> () { t.go() } fn main() {</ty>…

mutable参照は所有権を移動する

サンプルコード let mut s1 = String::from("hello"); // s2はmutable 参照 let s2 = &mut s1; print_type_name_of(s2); s2.push_str(" world"); /* error[E0382]: borrow of moved value: `s2` | 3 | let s2 = &mut s1; | -- move occurs because `s2` has …

Fibonacci in Rust

#[derive(Default)] struct Fibonacci { pair: (u64, u64), cnt: u64, max: u64, } impl Fibonacci { fn new(max: u64) -> Fibonacci { Fibonacci { pair: (0, 1), max: max, ..Default::default() } } fn reset(&mut self) { self.pair = (0, 1); self.cnt …

asキーワード

プリミティブ型の変換で使用する。 f64からi32に変換する事ができる。 let p: f64 = 50.5; let a: i32 = 50.5 as i32; Note: 標準では、f64からi32のFromトレイトは用意されていない // NG let a: i32 = i32::from(p)

プラグインマップの用意

vim

プラグイン側で用意されたキーマップをユーザー側で再定義することができる。 プラグイン側の定義 " プラグインマップ <Plug>(reverse-word) 定義 nnoremap <Plug>(reverse-word) :<C-u>call <SID>ReverseWord(expand('<cword>'))<CR> " デフォルトの割当 map <unique> <Leader>a <Plug>(reverse-word) NOTE: <Plug>(revers</plug></plug></leader></unique></cr></cword></sid></c-u></plug></plug>…

上に向かってファイルの検索をする `findfile()`

vim

例 ctagファイルの検索 let path = findfile('.tags', '.;') NOTE: 第2引数 .; カレントディレクトリから上に向かって検索をする。 ** カレントディレクトリから下に向かって検索する。デフォルト。 関連 finddir() ファイルではなくディレクトリを検索する

Vim script 概要

vim

Exコマンドを呼びだす Vim scriptはExコマンドを呼び出すためのスクリプト。 echo コマンドの実行 echo "Hello World" 関数の呼び出しもコマンドで実行 let names = []; call add(names, 'tanaka') call add(names, 'sato') call map(names, {idx, name -> l…

引数リストから検索する

vim

:vim 検索する文字列 ## vim vimgrep の略 ## 引数リストから検索する 引数リストへのファイルの追加 :arga **/*.js **/*.html **/*.css arga argadd の略。引数リストにファイルを追加する **/ フォルダ階層に渡って検索する

エラーハンドリング Result<T, E>

Rustのエラーハンドリングは以下の2種類にグループ分けされる 回復不可能なエラー panic! 回復可能なエラー Result<T, E> Result<T, E> Rustには例外処理が存在しないため、その代わりにResult<T, E>を使う。 pub enum Result<T, E> { Ok(T), Err(E), } 各variant Ok(T) 成功時 Err(</t,></t,></t,></t,>…

[健康] キャベツが良い

下痢気味のお通じにとことん悩まされています。 急にお腹がいたくなったりと。 ですが、お好み焼きを食べるようになってからすっかりなくなりました。 どうやらキャベツがいいらしい。