@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Windowsで同じアプリケーションのすべてのウィンドウを手前に表示する

tl;dr

AutoHotKeyで解決する例を見つけたのでそれを導入。 Alt+PrintScrernを押すと今開いているウィンドウと同じアプリケーションのウィンドウが順にパカパカ切り替わって全部手前に表示される。

!PrintScreen::
WinGetClass, class, A
WinGet, currentWindowId ,, A
WinGet, id, list, ahk_class %class%
Loop, %id%
{
    this_id := id%A_Index%
    WinActivate, ahk_id %this_id%
}
WinActivate, ahk_id %currentWindowId% ;bring the current window back to front
return
続きを読む

WSLgでEmacsを使う

tl;dr

# install packages for build
sudo apt install -y build-essential libgtk-3-dev libgnutls28-dev libtiff5-dev libgif-dev libjpeg-dev libpng-dev libxpm-dev libncurses-dev texinfo autoconf adwaita-icon-theme-full
cd /tmp
# clone source only emacs 29
git clone --single-branch --branch emacs-29 git://git.sv.gnu.org/emacs.git
cd emacs
./autogen.sh
./configure --with-pgtk
make -j8
sudo make install
# install jp font (Takao)
sudo apt install -y fonts-takao
sudo fc-cache -fv
# fc-list | grep -i takao
# IPA font
sudo apt install -y fonts-ipafont
sudo fc-cache -fv
# fc-list | grep -i ipa

Emacs上でWSLg上のEmacsかどうか区別するならこんな感じ(Takaoフォントの設定例)

(when (and (eq system-type 'gnu/linux)
           (eq window-system 'pgtk)
           (getenv "WSLENV"))
  ;; Takaoフォントの利用
  (set-fontset-font t 'japanese-jisx0208 "TakaoGothic")
  (add-to-list 'face-font-rescale-alist '(".*Takao .*" . 0.85))
  ;; M-wでwindowsのクリップボードにコピーする
(defun copy-selected-text (start end)
  (interactive "r")
    (if (use-region-p)
        (let ((text (buffer-substring-no-properties start end)))
            (shell-command (concat "echo '" text "' | clip.exe")))))
  (global-set-key (kbd "M-w") 'copy-selected-text)
  ;; Teach Emacs how to open links in your default Windows browser
  (let ((cmd-exe "/mnt/c/Windows/System32/cmd.exe")
        (cmd-args '("/c" "start")))
    (when (file-exists-p cmd-exe)
      (setq browse-url-generic-program  cmd-exe
            browse-url-generic-args     cmd-args
            browse-url-browser-function 'browse-url-generic
            search-web-default-browser 'browse-url-generic)))
)
続きを読む

Dockerfileでbashの新しいものを用意する

tl;dr

FROM amazon/aws-cli:latest as build

RUN yum update -y \
        && yum install -y make gcc tar gzip

# bash 5.2 for zoxide <Space>+<Tab>
ENV VER_bash=5.2
RUN yum install -y ncurses-devel
RUN curl -O http://ftp.gnu.org/gnu/bash/bash-${VER_bash}.tar.gz \
        && tar xf bash-${VER_bash}.tar.gz \
        && cd bash-${VER_bash} \
        && ./configure --with-curses \
        && make \
        && make install \
        && rm -rf bash-${VER_bash}.tar.gz bash-${VER_bash}

FROM amazon/aws-cli:latest

COPY --from=build /usr/local/bin/bash /usr/local/bin/bash
ENTRYPOINT /usr/local/bin/bash
続きを読む

docker-composeとhaproxyでアプリケーションを冗長化する

tl;dr

アプリケーション側のdeploy設定でレプリカ数を指定して、LBとしてhaproxyを置くことで実現した。冗長というよりも負荷分散かもしれない。

  • docker-compose.yml
version: '3.7'
services:
  app:
    ...
    deploy:
      mode: replicated
      replicas: 4
    expose:
      - "8080"
  lb:
    image: haproxy:lts-alpine
    restart: always
    ports:
      - "8080:8080"
    depends_on:
      - app
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
  • haproxy.cfg
defaults
  mode http
  timeout client 10s
  timeout connect 5s
  timeout server 10s 
  timeout http-request 10s

frontend myfrontend
  bind 0.0.0.0:8080
  default_backend myservers

backend myservers
  server-template server 5 app:8080 check resolvers mydns init-addr none

resolvers mydns
  parse-resolv-conf
続きを読む

WSL内のdockerコンテナからWindowsのクリップボードにコピーする

tl;dr

  • WSL上で clip.exe を使うとWindows上のクリップボードにコピーできる
  • WSL上でパイプを作って、そこにコンテナから書き込むことでパイプ内のテキストを読み取れる

この2つを組み合わせてパイプに書き込まれたらクリップボードにコピーする流れを無限ループで動かす。

具体的なスクリプトなどはここにまとめた。README見ればだいたいできるはず。

github.com

続きを読む

新しいプロセスでExcelを起動する

tl;dr

PowerShellで以下を実行すればよい

(New-Object -ComObject Excel.Application).Visible = $true

続きではショートカットを作ってスタートメニューやPower ToysのPower Runから呼び出せるようにしている。

続きを読む