Symdon Blog
rustlang tcp socket programming emacslisp lisp emacs
EmacsとRustでTCPソケットを開いて接続を待ち受ける
方針 TCPソケットを開く処理はRustで実装する。 Emacs側はプロセスを起動するだけに止め標準入出力でそのプログラムとやり取りする。 実装 [package] name = "emacs-tcp" version = "0.1.0" authors = ["TakesxiSximada <[email protected]>"] edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] log = { version = "0.4" } #+end_srcl #+caption: src/main.rs #+begin_src rust use std::io::Write; use std::io::Read; use std::net::TcpListener; use std::net::TcpStream; fn handle(mut stream: TcpStream) { let mut buffer = [0; 1024]; stream.read(&mut buffer).unwrap(); println!("Receive: {:?}", buffer); let response = "HTTP/1.1 200 OK\r\n\r\nyay!!\r\n\r\n"; stream.write(response.as_bytes()).unwrap(); stream.flush().unwrap(); } fn main() { let listener = TcpListener::bind("localhost:7878").unwrap(); for stream in listener.incoming() { let stream = stream.unwrap(); handle(stream); } } Cargo.toml (defun networking-tcp-listen () (interactive) (make-process :name "networking-tcp-listen" :buffer (get-buffer-create "*Networking TCP Listen*") :commmand '("./target/debug/emacs-tcp"))) (provide 'networking) networking.el
所要時間: 約 1分, 作成: 2021/6/21, 更新: 2021/6/21
python websockets
Websocket Echoサーバーを実装する
websocketsのドキュメントをそのまま動かしてみた。 https://websockets.readthedocs.io/en/stable/ 実装 #!/usr/bin/env python import asyncio import websockets async def echo(websocket, path): async for message in websocket: print(f"recv {len(message)}") await websocket.send(message) start_server = websockets.serve(echo, "localhost", 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() server.py import asyncio import websockets async def hello(): uri = "ws://localhost:8765" async with websockets.connect(uri) as websocket: await websocket.send("Hello world!") await websocket.recv() asyncio.get_event_loop().run_until_complete(hello()) client.py 実行する $ python server.py サーバーを起動する $ python client.py リクエストを送信する recv 12 recv 12 サーバーの標準出力
所要時間: 約 1分, 作成: 2021/6/21, 更新: 2021/6/21
rustlang async_std
Rustでasync_stdを用いて簡易なHTTP Serverを実装する
実装 [package] name = "testing" version = "0.1.0" authors = ["TakesxiSximada <[email protected]>"] edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] futures = "0.3" [dependencies.async-std] version = "1.6" features = ["attributes"] Cargo.toml use async_std::prelude::*; use async_std::net::TcpListener; use async_std::net::TcpStream; use futures::stream::StreamExt; async fn handle_connection(mut stream: TcpStream) { let mut buffer = [0; 1024]; stream.read(&mut buffer).await.unwrap(); let response = "HTTP/1.1 200 OK\r\n\r\naaaaaa\r\n\r\n"; stream.write(response.as_bytes()).await.unwrap(); stream.flush().await.unwrap(); } #[async_std::main] async fn main() { let listener = TcpListener::bind("127.0.0.1:7878").await.unwrap(); listener .incoming() .for_each_concurrent(/* limit */ None, |tcpstream| async move { let tcpstream = tcpstream.unwrap(); handle_connection(tcpstream).await; }) .await; } src/main.rs 実行する $ cargo run リクエストを送る bash-5.1$ curl http://127.0.0.1:7878/ -v * Trying 127.0.0.1... * TCP_NODELAY set * Connected to 127.0.0.1 (127.0.0.1) port 7878 (#0) > GET / HTTP/1.1 > Host: 127.0.0.1:7878 > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK * no chunk, no close, no size. Assume close to signal end < aaaaaa * Closing connection 0 bash-5.1$
所要時間: 約 1分, 作成: 2021/6/20, 更新: 2021/6/20
rustlang
RustでTCP Echo Serverを書く
TCPソケットを開いて接続を待ち受け、送られてきたデータをそのまま返すTCP EchoサーバーをRustで実装した。
所要時間: 約 2分, 作成: 2021/6/15, 更新: 2021/6/15
hacking
シェルコードを実装する
C言語でexecveを用いてシェルを起動する #include <unistd.h> int main() { char filename[] = "/bin/sh\x00"; char **argv = 0; char **envp = 0; execve(filename, argv, envp); } exec_shell.c execveシステムコールを呼び出す処理をアセンブリで書く コンパイラはNASM BITS 32 jmp short two one: pop ebx ; xor eax, eax ; mov [ebx+7], al ; mov [ebx+8], ebx ; mov [ebx+12], eax ; lea ecx, [ebx+8] ; lea edx, [ebx+12] ; mov al, 11 ; int 0x80 ; two: call one ; db '/bin/shXAAAABBBB' ; コンパイル用のMakefile exec_shell_c: gcc exec_shell.c exec_shell_s: nasm exec_shell.s 参考 HACKING: 美しき策謀 脆弱性の理論と実際 (オライリー・ジャパン)
所要時間: 約 1分, 作成: 2021/6/14, 更新: 2021/6/14
security hacking eddsa aws gosec
セキュリティ関連の勉強会に参加した内容まとめ
心に残った良い内容だったと思えたものはこの3つ。 https://www.slideshare.net/shunaroo/mitre-attck-249336202 https://www.slideshare.net/ssuser8911f21/5eddsa https://speakerdeck.com/azara/zatukuri-hua-su-aws-iam-falsete-quan-sheng-ge-falsekao-efang-todui-ce ざっくりまとめていく。 TLPT TLPTとは TLPTとはThreat Led Penetration Testのこと。脅威情報をもとにして攻撃者 が実際に攻撃しそうなシナリオを作成し検証を行うことで、より効率的に攻撃 に対する対策を行おうとする手法。 TLPLと脆弱性診断の違い 手法 観点 脆弱性の評価 サイバーレジリエンスに対する評価 TLPL 対象となるシステムが攻撃を受けたときに対応できるかをふくめ ...
所要時間: 約 4分, 作成: 2021/6/12, 更新: 2021/6/12
kubernetes k8s
KubernetesのPod内のコンテナにシークレトで保持しているJSONファイルをマウントする
KubernetesではSecretで保持した値をPodで動作しているコンテナからファイ ルとして読み取らせることができる。以下では設定を行う。 Secretを登録する マウントするSecretを登録するためのマニフェストファイルを作成する。値と して設定する内容はBase64エンコードして登録する。 apiVersion: v1 kind: Secret metadata: name: testing-secret namespace: default type: Opaque data: credentials.json: | eyJmb28iOiAxfQ== secret.yml マニフェストファイルをapplyする。 $ kubectl apply -f secret.yml Deploymentを登録 ...
所要時間: 約 1分, 作成: 2021/6/5, 更新: 2021/6/5
orgmode emacs
Emacsのorg-modeのコードブロックのインデントや見栄えをカスタマイズする
(setq org-src-fontify-natively t org-src-window-setup 'current-window org-src-strip-leading-and-trailing-blank-lines t org-src-preserve-indentation t org-src-tab-acts-natively nil)
所要時間: 約 1分, 作成: 2021/5/26, 更新: 2021/5/26
python asyncio signal
Pythonでasyncioの非同期処理を実行中にシグナルハンドラが実行された場合、非同期処理は処理を一時的に停止するか?
Pythonの非同期処理の標準ライブラリであるasyncioを用いて非同期処理を実行している時にOSからシグナルを受信してシグナルハンドラに登録した関数が呼び出されるとPythonのGILの性質により実行されていた非同期処理は一時的に処理を中断することを確認した。
所要時間: 約 2分, 作成: 2021/4/24, 更新: 2021/4/24
emacs adoc-mode asciidoc
ascii-docをEmacsで編集する
ascii-docをEmacsで編集するためにadoc-modeをインストールした。また修正すべき箇所についても検討した。
所要時間: 約 1分, 作成: 2021/4/14, 更新: 2021/4/14
emacs lisp 会計 年度 期首
期首月と年月から年度を取得するEmacs Lisp
期首月と年月から年度を取得する。 (defun get-fiscal-year(beginning_of_month year month) (if (<= beginning_of_month month) year (- year 1)))
所要時間: 約 1分, 作成: 2021/4/11, 更新: 2021/4/11
emacs confluence docker
Confluenceについて考える
- ナレッジマネジメントツールであるConfluenceとその付き合い方について考えた。
- Confluenceをlocalで起動する方法を試した。
- ConfluenceをEmacsで編集する方法をためした。
所要時間: 約 3分, 作成: 2021/4/11, 更新: 2021/4/11
aws ecs emacs signal gracefulshutdown
EmacsのサブプロセスをGraceful Shutdownする
AWSのECSの停止時の挙動をローカルでエミュレートするためにGraceful Shutdownのための関数を実装した。
所要時間: 約 3分, 作成: 2021/4/10, 更新: 2021/4/10
emacs transient
Editorモードで作成するファイルをファイルスタイルとディレクトリスタイルの両方に対応した
Emacsでblogの編集などを素早く行うためにEditorモードで作成するファイルをファイルスタイルとディレクトリスタイルの両方に対応した。
所要時間: 約 3分, 作成: 2021/4/8, 更新: 2021/4/8
hugo papermod
hugo-PaperModのshare_iconの設定方法
静的サイトジェネレーターHugoのテーマであるhugo-PaperModで、share_iconはどのように設定されているのかを調べた。
所要時間: 約 1分, 作成: 2021/4/8, 更新: 2021/4/8
python smtp email
PythonでGmailのSMTPサーバーを使ってEmailを送信する
Pythonの標準ライブラリであるsmtplibを用いてSMTPでEmailを送信する。
所要時間: 約 1分, 作成: 2021/4/8, 更新: 2021/4/8
seo googlesearchconsole
Googleに除外されているページをすべて非公開にする
Googleに除外されたページをCSVでダウンロードし非公開設定をおこなう。
所要時間: 約 9分, 作成: 2021/4/3, 更新: 2021/4/3
fargate aws ssm awscli
AWS CLI及びSessionManagerPluginをインストールしFargateのコンテナとのセッションを開始する
AWS CLI及びSessionManagerPluginのインストール セッションを開始するにはAWSCLIとSessionManagerPluginをインストールする必要がある。 以下はmacOS用の手順。 AWS CLIのインストール brew install awscli インストール SessionManagerPluginのインストール curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip" ダウンロード unzip sessionmanager-bundle.zip zipファイルを解凍 cd sessionmanager-bundle && sudo python3 install インストール 接続方法 接続開始にマネージドインスタン ...
所要時間: 約 1分, 作成: 2021/3/27, 更新: 2021/3/27
Terraformのバックエンド
Terraformの状態を記録するtfstateファイルの保存先のバックエンドの種類と使い方を解説する。
所要時間: 約 1分, 作成: 2021/3/27, 更新: 2021/3/27
データベース database mysql postgresql sqlserver oracle db2
リレーショナルデータベース
環境の構築方法 DB2 11.5.0.0 https://hub.docker.com/layers/ibmcom/db2/11.5.0.0/images/sha256-6e0d47d26c774cfcce36410dd2f1c8411f61d9692d8ddf03b967da7837b69686?context=explore 11.5.5.0 https://hub.docker.com/layers/ibmcom/db2/11.5.5.0/images/sha256-9577b5f306efdbc2792297275b8331059d0818eb70700d8106d986da2908d45c?context=explore https://qiita.com/Haruka-Ogawa/items/0a4696ded4fa40e5e983 https://qiita.com/SVC34/items/71dec32ca68943432f76 https://hub.docker.com/r/ibmcom/db2 MySQL 8.0.22 https://hub.docker.com/layers/mysql/library/mysql/8.0.22/images/sha256-9ea5b1010711123ab241f86b9aafeee0e4c425942a651a0ea3c2817e369c086a?context=explore $ docker pull mysql:8.0.22 Oracle Database https://qiita.com/niwasawa/items/0834e77b0690a5c8501d https://cosol.jp/techdb/2019/05/use_oracle_database_no_charge/ PostgreSQL 12 docker pull postgres:12-alpine https://hub.docker.com/layers/postgres/library/postgres/12-alpine/images/sha256-04da9831116872801b0ad9ce83a5577ee4779b3e8332a1dc2ec8df7ff95d04e9?context=explore SQL Server 2017 $ docker pull mcr.microsoft.com/mssql/server:2017-latest https://hub.docker.com/_/microsoft-mssql-server MySQL vs Percona Server for MySQL vs MariaDB MySQLにはその派生版や別配布がある。Percona Server for MySQLやMariaDBがそれだ。 それぞれの比較表でわかりやすいものがPerconaのサイトに掲載されていた。 https://www.percona.com/blog/2017/11/02/mysql-vs-mariadb-reality-check/
所要時間: 約 1分, 作成: 2021/3/25, 更新: 2021/3/25
ripgrep ripgrep.el rg.el emacs
ripgrep
ripgrepをインストールし、Emacsから利用できるように設定を行った。
所要時間: 約 2分, 作成: 2021/3/25, 更新: 2021/3/25
ふりかえり
ふりかえり
2021年の1月から3月までを振り返る。
所要時間: 約 1分, 作成: 2021/3/24, 更新: 2021/3/24
emacs compile vterm libvterm
compileコマンドでvtermを使いたい
compileコマンドでvtermを使うためにcompilation-startをモンキーパッチする。
所要時間: 約 1分, 作成: 2021/3/24, 更新: 2021/3/24
emacs libvterm
Emacsでlibvtermを使う
Emacsでvtermを使うためにlibvterm、libtool、cmake、libvtermを準備しvtermをインストールした。
所要時間: 約 1分, 作成: 2021/3/24, 更新: 2021/3/24
python json
PythonのEnumをjson.dumpでJSON形式に変換する
PythonのEnumをjson.dumpでJSON形式に変換するためのJSONEncoderの実装例を示す。
所要時間: 約 2分, 作成: 2021/3/24, 更新: 2021/3/24
python typing 型ヒント 型アノテーション
Pythonの型ヒント
型変数の例 from dataclasses import dataclass from functools import singledispatch from typing import Dict, Generic, List, NewType, Optional, TypeVar @dataclass class FooEvent: pass @dataclass class BarEvent: pass @dataclass class BazEvent: pass Event = TypeVar("Event", FooEvent, BarEvent, BazEvent) @singledispatch def as_custom_dict(ev: Event) -> Dict: return {} @as_custom_dict.register def _(ev: BazEvent) -> Dict: return {} def func_effect(ev: Event) -> Dict: return as_custom_dict(ev)
所要時間: 約 1分, 作成: 2021/3/24, 更新: 2021/3/24
bi
BIツール
Metabase インストールと起動 https://www.metabase.com/start/oss/ Docker インストール docker pull metabase/metabase 起動 docker run -d -p 3000:3000 --name metabase metabase/metabase Java インストール curl -O metabase.jar https://downloads.metabase.com/v0.38.2/metabase.jar 起動 java -jar metabase.jar homebrew インストール brew install metabase 起動 metabase Redash Superset Kibana
所要時間: 約 1分, 作成: 2021/3/23, 更新: 2021/3/23
aws ssm awscli fargate
AWS System Managerのセッションマネージャーとawscliを用いてFargateのコンテナとのセッションを開始する
セッションマネージャーを用いてCLIで接続できるか確認してみる。 既にFargateのクラスタ、タスクなどが設定/起動されセッションマネージャー の一覧にインスタンスが登録されていることを前提とする。 接続開始。 bash-5.1$ aws ssm start-session --target mi-00000000000000000 SessionManagerPlugin is not found. Please refer to SessionManager Documentation here: http://docs.aws.amazon.com/console/systems-manager/session-manager-plugin-not-found pluginが入っていないため失敗している。 ドキュメントのURLを表示してくるのでそれを確認する。 https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-troubleshooting.html#plugin-not-found 実際のインストール方法はこっちに記載があった。 https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html macOSを ...
所要時間: 約 2分, 作成: 2021/3/22, 更新: 2021/3/22
python airbrake pybrake errbit
pybrakeを用いてerrbitにエラーを送る
インストール pybrakeをインストールする。 pip install pybrake Requirement already satisfied: pybrake in MASK/lib/python3.8/site-packages (0.4.6) Requirement already satisfied: tdigest in MASK/lib/python3.8/site-packages (from pybrake) (0.5.2.2) Requirement already satisfied: accumulation-tree in MASK/lib/python3.8/site-packages (from tdigest->pybrake) (0.6.2) Requirement already satisfied: pyudorandom in MASK/lib/python3.8/site-packages (from tdigest->pybrake) (1.0.0) 環境変数を読み込む。 変数などは環境変数から読み込むようにした。通常はairbrakeのAPIへのURLは 必要ないが、errbitなどairbrakeのクローンとして動作するようなダミーサー バーを用いる場合はせていが必要になる。 import os AIRBRAKE_API_HOST = os.environ.get("AIRBRAKE_API_HOST", "https://api.airbrake.io") AIRBRAKE_ENVIRONMENT = os.environ["AIRBRAKE_ENVIRONMENT"] AIRBRAKE_PROJECT_ID = os.environ["AIRBRAKE_PROJECT_ID"] AIRBRAKE_PROJECT_KEY = os.environ["AIRBRAKE_PROJECT_KEY"] 設定 pybrake.No ...
所要時間: 約 1分, 作成: 2021/3/21, 更新: 2021/3/21
comment
gigazineで紹介されていた https://www.howtodeal.dev/ に目を通した。Developersの項目のほとんどに自分が当てはまってる気がしてくる。実際に厄介なエンジニアの一人になっていると思う。自分を見つめ直すいい機会なのでチェックリストでも作ってみることにする。最近は頭の切り替えが上手くいできなかったり仕事の内容を全く思い出せなかったりすることがある。もう無理かなぁと思うこともあるけれど正直これぐらいしかできることがない ...
所要時間: 約 1分, 作成: 2021/3/19, 更新: 2021/3/19
emacs aws awscli
AWS CLIを実行するためのEmacs Lisp
M-x でawscliを実行するために簡易な関数を書いた。 (autoload #'string-join "subr-x") (autoload #'term-ansi-make-term "term") (defvar aws-cli-buffer-name "A queue of strings whose echo we want suppressed.") (defvar aws-cli-buffer-name "*AWS*" "AWS CLI execution buffer name.") (defvar aws-cli-endpoint-url "http://localhost:4566" "AWS API endpoint.") (defvar aws-cli-profile "default" "Profile name in ~/.aws/config.") (defun aws-cli (line) "Execute AWS CLI command." (interactive "MCommand Line: ") (switch-to-buffer (funcall #'term-ansi-make-term aws-cli-buffer-name "bash" nil "-c" (string-join `("aws" "--no-paginate" "--endpoint-url" ,aws-cli-endpoint-url "--profile" ,aws-cli-profile ,line) " ")))) M-x aws-cli とするとサブコマンドを待ち受ける。=aws-cli-profile= の値 を切り替えることで使用するプロフィールを切り替えられる。送信するAPIの エンドポイントは aws-cli-endpoint-url で設定できる。 成長したらパッケージ化したい。オプシ ...
所要時間: 約 1分, 作成: 2021/3/17, 更新: 2021/3/17
macos keychainaccess
macOSのキーチェーンアクセス
Emacsが用意しているmacOSのキーチェーンアクセス用の関数 EmacsにはmacOSのキーチェーンにアクセスするための関数が用意されている。 ただこれがなかなかの曲者でどうやって使ったらいいのか全くわからない。 例えば以下の関数などがそれに当たるものでauth-source.elに収録されている。 auth-source-macos-keychain-search auth-source-macos-keychain-search-items auth-sources変数に macos-keychain-internet や macos-keychain-generic を指定することでauth-source-searchから利用す ...
所要時間: 約 2分, 作成: 2021/3/13, 更新: 2021/3/13
aws ecr
ECRのプライベートリポジトリのpullで若干はまる
通常プライベートなECRは認証なしではpullできない。 pullするためにはリポジトリの プッシュコマンドの表示 で表示される以下を実行する必要がある。 :REGION = :ACCOUNT_ID = aws ecr get-login-password --region :REGION | docker login --username AWS --password-stdin :ACCOUNT_ID.dkr.ecr.:REGION.amazonaws.com https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/registry_auth.html の説明は非常にわかりにくい説明になっているため、初見で実行してもうまくいかなかった。 おそらくどこかの手順で間違えたんだと思う。
所要時間: 約 1分, 作成: 2021/3/12, 更新: 2021/3/12
社会
国家のページ
コード 俗称 ウェブサイト AUS オーストラリア https://www.australia.gov.au/ BRA ブラジル http://www.brazil.gov.br/ CAN カナダ https://www.canada.ca/ CHN 中華人民共和国 http://jpn_cpc.people.com.cn/ FRA フランス https://www.gouvernement.fr/ GBR イギリス https://www.gov.uk/ IND インド https://www.india.gov.in/ ITA イタリア https://www.governo.it/ JPN 日本 https://www.japan.go.jp/ PHL フィリピン https://www.gov.ph/ TWN 台湾 https://www.taiwan.gov.tw/ USA アメリカ合衆国 https://www.usa.gov/ VNM ベトナム http://www.vietnam.gov.vn/ 国のコード https://ja.wikipedia.org/wiki/ISO_3166-1
所要時間: 約 1分, 作成: 2021/3/11, 更新: 2021/3/11
raspberrypi gpio
RaspberryPIのGPIOピン配置
RaspberryPIを触る機会があったのでGPIOピン配置をメモしておく。 ピン配置 RaspberryPI 2 Model B Pin Name - Name Pin 01 3.3V - 5V 02 03 GPIO2/SDA1 I2C - 5V 04 05 GPIO3/SCL1 I2C - Gnd 06 07 GPIO4/GPCLK0 1 Wire - GPIO14/UART0_TXD 08 09 Gnd - GPIO15/UART0_RXD 10 11 GPIO17 - GPIO18/PWM_CLK 12 13 GPIO27/PCM_DOUT - Gnd 14 15 GPIO22 - GPIO23 16 17 3.3V - GPIO24 18 19 GPIO10/SPI0_MOSI - Gnd 20 21 GPIO9/SPI0_MISO - GPIO25 22 23 GPIO11/SPI0_SCLK - GPIO8/SPI0_CEO 24 25 Gnd - GPIO7/SPI0_CE1 26 27 GPIO0/ID SD - GPIO1/ID SC 28 29 GPIO5 - Gnd 30 31 GPIO6 - GPIO12 32 33 GPIO13 - Gnd 34 35 GPIO19 - GPIO16 36 37 GPIO26 - GPIO20 38 40 Gnd - GPIO21 41 ピン配置に関するドキュメント ピンの配置については公式のドキュメントがある。 https://www.raspberrypi.org/documentation/usage/gpio/README.md
所要時間: 約 1分, 作成: 2021/3/6, 更新: 2021/3/6
emacs
Emacs28を使っているとforeman-modeがプロセス起動時にエラーする
Emacs28を使っているとforeman-modeがプロセス起動時にエラーすることに気 がついた。とりあえずさっと修正できた。 https://github.com/collective-el/foreman-mode/commit/856293d879f8aec0684f05cad772d9977213bc03 可能であればアップストリームに反映するべきだけれど人とコミュニケーショ ンすることに煩わしさを感じるなら無理にアップストリームに入れる必要もな いのかなと思った。必要な人が必要なときに必要な修正をとりりれればいいだ けだと思う。 まあ今回の修正はそもそも雑すぎる修正(おそらくEm ...
所要時間: 約 1分, 作成: 2021/3/6, 更新: 2021/3/6
virtualbox
VirtualBoxメモ
インストール brew install virtualbox --cask マニュアル マニュアルは梱包されている。 /Applications/VirtualBox.app/Contents/MacOS/UserManual.pdf 仮想ハードドライブ 気になる項目。 ダイナミックサイジング スナップショット パフォーマンス VDI - VirutalBox Dis Image VirtualBox独自のディスクイメージ ホストOSにシステムファイルとして組み込まれる VHD - Virutal Hard Disk Microsoft社がOpen Specification Promiseに基づいて策定した仮想ディスクイメージ形式。 ファイル拡張子は .vhd 。 VMDK - Virtual Machine DisK VMware社が策定した仮想 ...
所要時間: 約 2分, 作成: 2021/3/4, 更新: 2021/3/4
vpn freesoftware opensource
Virtual Private Network
VPN実装 WireGuard https://www.wireguard.com/ 安全 使いやすい シンプル https://blog.symdon.info/posts/1615012512/ クロスプラットフォーム 以下の環境をサポートしている。 Windows、 macOS BSD iOS Android 利用可能な暗号化プロトコル Noiseプロトコルフレームワーク Curve25519 ChaCha20 Poly1305 BLAKE2 SipHash24 HKDF などが利用可能。 保守的で合理的な選択を行い、暗号学者によってレビューされている。 なぜハイパフォーマンスなのか? 非常に高速な暗号化プリミティブWireGuardがLinuxカーネル内に存在する。 適正 スマートフォンなど ...
所要時間: 約 2分, 作成: 2021/3/4, 更新: 2021/3/4
emacs golang gotemplate
go-template-modeのインストール
go-templateのためのメジャーモードがないかと探していたらGistに簡易なものがあった。 https://gist.github.com/anonymous/1654113 が最初だが、Forkされたもの https://gist.github.com/grafov/10985431 のほうが状態がよさそうだったのでそちらを使うことにした。 (el-get-bundle gist:10985431:go-template-mode :type "git") (require 'go-template-mode)
所要時間: 約 1分, 作成: 2021/3/2, 更新: 2021/3/2
emacs term.el
Emacsでコマンドを実行するための関数をカスタマイズした
ansi-termを使ってターミナルエミュレータを起動していたが、引数を直接渡せないなどの細かい挙動が気になりだした。 考えつく限り自分の要求に合うように関数の挙動を変更した。 起動ごとに新たなプロセスとバッファを作成する。 ただしすでに同じものがある場合、何もしない。 バッファ名は実行しているコマンドとワーキングディレクトリで特定できるようにする。 同一コマンド同一ディレクトリの場合、同じような作業をやっ ...
所要時間: 約 1分, 作成: 2021/3/2, 更新: 2021/3/2
comment
Hugoのテーマとしてhugo-PaperModを用いていたが、カスタマイズしたい箇所が増えてきた。 本家のリポジトリをフォークして、そこに切り替えてみたがトップページが思いっきり崩れた。 なので今まで使っていたリビジョンに戻してそこから分岐することにした。 https://github.com/TakesxiSximada/hugo-PaperMod
所要時間: 約 1分, 作成: 2021/3/1, 更新: 2021/3/1
comment
とても孤独感にさいなまれることがある。すごいつらい。 こういうときに支えというものの大切さを感じる。
所要時間: 約 1分, 作成: 2021/3/1, 更新: 2021/3/1
comment
郵便/小包
郵便局 https://www.post.japanpost.jp/send/fee/kokunai/one_two.html https://www.post.japanpost.jp/send/fee/index.html https://www.post.japanpost.jp/service/standard/one_price.html https://www.post.japanpost.jp/send/fee/kokunai/index.html クロネコヤマト https://www.kuronekoyamato.co.jp/ytc/search/payment/simulation.html?service=TK 佐川急便 サイズ名 3辺計(縦・横・高さ) 重量 60サイズ 60cmまで 2kgまで 80サイズ 80cmまで 5kgまで 100サイズ 100cmまで 10kgまで 140サイズ 140cmまで 20kgまで 160サイズ 160cmまで 30kgまで https://www.sagawa-exp.co.jp/send/fare/list/sagawa_faretable/attention.html
所要時間: 約 1分, 作成: 2021/3/1, 更新: 2021/3/1
emacs email
EmacsでEmailを送信する
SMTP 予めwhalebrewでMailHogがインストールされているものとする。 https://blog.symdon.info/posts/1614485711/ MailHogを起動する。 $ mailhog 2021/02/28 04:45:28 Using in-memory storage 2021/02/28 04:45:28 [SMTP] Binding to address: 0.0.0.0:1025 [HTTP] Binding to address: 0.0.0.0:8025 2021/02/28 04:45:28 Serving under http://0.0.0.0:8025/ Creating API v1 with WebPath: Creating API v2 with WebPath: EmacsのSMTPの設定を行う。 (setq smtpmail-smtp-server "host.docker.internal") (setq smtpmail-smtp-service 1025) (setq send-mail-function #'smtpmail-send-it) /etc/hostsには以下を設定しておく。 127.0.0.1 host.docker.internal M-x mail を実行してメール編集バッファに内容を記述し M-x mail-send-and-exit (C-c C-c) を実行する。 SMTPでMilHogに対しメールが送信される。 以下はMail ...
所要時間: 約 2分, 作成: 2021/2/28, 更新: 2021/2/28
docker whalebrew
whalebrewを使う
whalebrewを使うとDockerイメージをネイティブのコマンドのように扱うことができる。 インストール 今回はHomebrewを用いてmacOSにインストールする。 $ brew install whalebrew whalesayを使ってみる DockerイメージをPullし、コマンドを生成する。 $ whalebrew install mailhog/mailhog:v1.0.1 実行する。 bash-5.1$ whalesay cool ______ < cool > ------ \ \ \ ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ MailHogを使う Dockerイメージを ...
所要時間: 約 3分, 作成: 2021/2/28, 更新: 2021/2/28
emacs el-get
Emacs 28でel-getをrequireしようとするとdefine-obsolete-function-aliasでエラーする
開発版版のEmacs (28.0.50) をソースからビルドして使っている。 el-getをrequireしようとしたところ以下のエラーが発生した。 Debugger entered--Lisp error: (wrong-number-of-arguments (3 . 4) 2) #f(compiled-function (obsolete-name current-name when &optional docstring) "Set OBSOLETE-NAME's function definition to CURRENT-NAME and mark it obsolete.\n\n(define-obsolete-function-alias \\='old-fun \\='new-fun \"22.1\" \"old-fun's doc.\")\n\nis equivalent to the following two lines of code:\n\n(defalias \\='old-fun \\='new-fun \"old-fun's doc.\")\n(make-obsolete \\='old-fun \\='new-fun \"22.1\")\n\nWHEN should be a string indicating when the function was first\nmade obsolete, for example a date or a release number.\n\nSee the docstrings of `defalias' and `make-obsolete' for more details." #<bytecode 0x155f8ed4497b9d3b>)('el-get-package-status 'el-get-read-package-status) (define-obsolete-function-alias 'el-get-package-status 'el-get-read-package-status) eval-buffer(#<buffer *load*-95274> nil "/usr/local/ng/el-get/el-get-status.el" nil t) ; Reading at buffer position 7064 load-with-code-conversion("/usr/local/ng/el-get/el-get-status.el" "/usr/local/ng/el-get/el-get-status.el" nil t) require(el-get-status) eval-buffer(#<buffer *load*> nil "/usr/local/ng/el-get/el-get.el" nil t) ; Reading at buffer position 8196 load-with-code-conversion("/usr/local/ng/el-get/el-get.el" "/usr/local/ng/el-get/el-get.el" nil t) require(el-get) (progn (require 'el-get)) eval((progn (require 'el-get)) t) elisp--eval-last-sexp(nil) eval-last-sexp(nil) funcall-interactively(eval-last-sexp nil) #<subr call-interactively>(eval-last-sexp nil nil) apply(#<subr call-interactively> eval-last-sexp (nil nil)) call-interactively@ido-cr+-record-current-command(#<subr call-interactively> eval-last-sexp nil nil) ...
所要時間: 約 2分, 作成: 2021/2/28, 更新: 2021/2/28
python scikit-learn ml gaussiannaivebayes ナイーブベイズ
scikit-learnを用いてガウシアンナイーブベイズでアイリスのクラスタリングを行う
import matplotlib.pyplot as plt from sklearn import datasets from sklearn.naive_bayes import GaussianNB データをロード iris = datasets.load_iris() 萼のデータでプロット X = iris.data[:, :2] plt.figure(2, figsize=(8, 6)) plt.scatter(X[:, 0], X[:, 1], c=iris.target, cmap=plt.cm.Set2) plt.show() 学習 model = GaussianNB() model.fit(iris.data, iris.target) テストデータ test_data = np.array([ [5.1, 3.5, 1.4, 0.2], [1, 4, 2, 0.2], [6.7,3.0,5.2,2.3], ]) 分類 test_result = model.predict(test_data) プロット plt.figure(2, figsize=(8, 6)) plt.scatter(test_data[:, 0], test_data[:, 1], c=test_result, cmap=plt.cm.Set2) plt.show()
所要時間: 約 1分, 作成: 2021/2/27, 更新: 2021/2/27
emacs
Emacsにダミーサーバーの機能を追加する
(setq http-proc (make-process :name "TESTING" :buffer (get-buffer-create "*TESTING*") :command '("python" "foo.py"))) (process-send-string http-proc "OK\r\n\r\n") (process-send-eof http-proc) (signal-process http-proc 1) (setq foo (start-process "TESTING" "*TESTING*" "python" "foo.py")) (process-send-string foo "aaaaaaaaaaaaaaaaaaa\n") (process-send-eof foo) (defun http-server-open-edit-buffer () (interactive) (switch-to-buffer (get-buffer-create "*HTTP SERVE EDIT*")) (json-mode)) (defun http-server-send-region-to-process () (interactive) (process-send-region foo (point-min) (point-max)) (process-send-eof foo) (process-send-eof foo)) import sys import socket soc = socket.socket() soc.bind(("0.0.0.0", 3131)) soc.listen(1) try: while True: conn, addr = soc.accept() buf = conn.recv(1024) print(buf.decode()) print("<CONNECTION WAITING>") data = sys.stdin.read().encode() conn.send(data) conn.close() print("<CONNECTION CLOSED>") finally: soc.close() print("Closed!!")
所要時間: 約 1分, 作成: 2021/2/22, 更新: 2021/2/22
emacs lisp
change-case.elのversion 9を公開した
change-case.elのversion 9を公開した。これは以前から作成していたもので、 パスカルケースやキャメルケース、スネークケースといった記法を相互に変換 するためのライブラリだ。以下の記法に対応している。 記法 例 スネークケース snake_case ケバブケース kebab-case パスカルケース PascalCase キャメルケース camelCase ドッテドケース1 dotted.case パスケース2 path/case version 8にはパスカルケースでの扱いが正しくできないバグが含まれていた がversion 9ではそ ...
所要時間: 約 1分, 作成: 2021/2/21, 更新: 2021/2/21
emacs
process-environmentの復元
Emacsを使って複数のprojectで開発しているとprocess-environmentを頻繁に 書きかえる必要が出てくる。projectの切り替えはprojectileでやってるので projectの切り替えのタイミングで設定を戻すようにしていたが、任意のタイ ミングでそれを行えると良さそうだなぁと思う。ちなみに全く手間ではない。
所要時間: 約 1分, 作成: 2021/2/11, 更新: 2021/2/11