かすみん日記

暇なときに何か喋ります

【Git】error: unknown option `initial-branch=main'

gitでエラーが出た;

% git init --initial-branch=main
error: unknown option `initial-branch=main'
usage: git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [<directory>]

    --template <template-directory>
                          directory from which templates will be used
    --bare                create a bare repository
    --shared[=<permissions>]
                          specify that the git repository is to be shared amongst several users
    -q, --quiet           be quiet
    --separate-git-dir <gitdir>
                          separate git dir from working tree

--initial-branchオプションをご存知でない!?

gitのバージョンが古いだけでした。

gitをアプデしましょう。

以上。

蛇足

エラー吐いたときのGitのバージョン;

% git --version
git version 2.24.1

Gitは、どうやら、Homebrewでインスコしてた模様;

% where git
/usr/local/bin/git  <- Homebrew
/usr/bin/git        <- macOSランタイム?

% ls -go /usr/local/bin/git
lrwxr-xr-x  1   28 12 20  2019 /usr/local/bin/git@ -> ../Cellar/git/2.24.1/bin/git

% ls -l /usr/bin/git
-rwxr-xr-x  76 root  wheel  167120  5 10 06:30 /usr/bin/git*

最新のバージョンを確認します。

まずはbrew updateでHomebrew(自身)を最新版にアプデします;

% brew update
...

% brew -v
Homebrew 3.5.4
Homebrew/homebrew-core (git revision 1abcad8993b; last commit 2022-07-09)
Homebrew/homebrew-cask (git revision 0ec7c70cf3; last commit 2022-07-09)

Gitの最新安定版は2.37.0のようです;

% brew outdated git
git (2.24.1) < 2.37.0

% brew info git
git: stable 2.37.0 (bottled), HEAD
Distributed revision control system
https://git-scm.com
/usr/local/Cellar/git/2.24.1 (1,554 files, 45.5MB) *
  Poured from bottle on 2019-12-20 at 23:31:19
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/git.rb
License: GPL-2.0-only
==> Dependencies
Required: gettext ✔, pcre2 ✘
==> Options
--HEAD
    Install HEAD version
==> Caveats
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.
Subversion interoperability (git-svn) is now in the `git-svn` formula.

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions

Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/git
==> Analytics
install: 267,859 (30 days), 859,304 (90 days), 3,005,421 (365 days)
install-on-request: 262,165 (30 days), 840,650 (90 days), 2,942,147 (365 days)
build-error: 36 (30 days)

というわけで、Gitをアプデします;

% brew upgrade git

以上で、Gitをアプデできました;

% git --version
git version 2.37.0

--initial-branchオプションもちゃんと使えるようになっていました;

% git init --initial-branch=main
Initialized empty Git repository in /Users/hoge/Desktop/test/.git/

めでたしめでたし

参考

qiita.com

【macOS Monterey】codeコマンドを使えるようにする(Visual Studio Code)

Visual Studio Code(以下vscode)をターミナル上から起動するためのcodeコマンドを使えるようにします。

※以下はズルいので無しです:

alias code='open -a "Visual Studio Code"'

Windowsだとvscodeをインストールするだけで、codeコマンドにも自動でパスが通るようです。

なので、以下はmacOS(特にMonterey)の人向け内容です。

環境

% sw_vers
ProductName:    macOS
ProductVersion: 12.4    # Monterey
BuildVersion:   21F79

% code -v
1.62.3
ccbaa2d27e38e5afa3e5c21c1c7bef4657064247
x64

% date 
2022年 7月 4日 月曜日 06時44分03秒 JST

手順

まず、vscodeは事前にインストールしておいてください。

標準でcodeコマンドが使えないか確認(最新バージョンならできるかも):

% code
## -> 成功すればvscodeアプリが起動する

ダメだったら、コマンドが見つからないとエラーが出る:

% code
zsh: command not found: code

vscodeを起動して、cmd + shift + Pで表示される窓にshellと入力します。

表示されるサジェストから、codeコマンドをインストールします。

ターミナルを起動して、codeコマンドが使えればOK。

% code
## -> vscodeアプリが起動するハズ?

成功した人は以上、成功しなかった人は以下に続く。

pythonコマンドのパスが通ってない

私の環境では以下のようなエラーが出ました:

% code
/usr/local/bin/code: line 6: python: command not found
/usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory

pythonコマンドが見つからないということですが、macでは標準でpython 2系がインストールされていたような?

と思いましたが、Montereyではpythonが削除されたようです。

なので、pythonをインストールしていない人はインストールします。

※覚えてない人はwhereコマンドで探してみて下さい:

where python python2 python3

homebrewでインストールするなら:

brew install python@3.9

多分、/usr/local/Cellar/python@3.9/以下に、pipとかも含めてインストールされます。

また、おそらく、シンボリックリンク/usr/local/bin/python3が作られるはずです。

% where python3
/usr/local/bin/python3    <- たぶんこれ
/usr/bin/python3          <- こっちはXcodeでインスコされたやつ

リンク先はls -gols -l)で確認できる:

% ls -go /usr/local/bin/python3
lrwxr-xr-x  1   38  9 13  2021 /usr/local/bin/python3@ -> ../Cellar/python@3.9/3.9.7/bin/python3

以上でpythonのインストールは確認できたが、まだやることがある。

今、python3コマンドで、インストールしたpythonを実行できる環境にあるが、codeコマンド実行に失敗したときを思い出すと、以下のようなエラーであった:

python: command not found

つまり、code内で呼んでいるのは「python」コマンド。

なので、pythonコマンドでもインストールしたpythonが呼ばれるように、シンボリックリンクを作成する:

## ln -s リンク先 リンク元
ln -s ../Cellar/python@3.9/3.9.7/bin/python3 /usr/local/bin/python

第1引数で指定してるpythonの実行ファイル(あるいはシンボリックリンク)は、各自の環境に合わせて修正して下さい。

第2引数の方は、シンボリックリンクのファイルですが、ファイル名は必ずpythonとし、配置する場所はパスが通っているところであればどこでも良いです。

以上で、任意ディレクトリからpythonコマンドが利用できるので、codeコマンドも実行できるようになっているはずです。

% code
## -> 今度こそvscodeアプリが起動するハズ

codeコマンドの中身

vscodeのコマンドパレットからcodeコマンドをインストールすると、/usr/local/bin/code/Applications/Visual Studio Code.app/Contents/Resources/app/bin/codeシンボリックリンクが作られるようです。

% ls -go /usr/local/bin/code
lrwxr-xr-x  1   68  7  2 15:40 /usr/local/bin/code@ -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code

そして、codeの実体はただのシェルスクリプトです。

中身は以下で全てです:

#!/usr/bin/env bash
#
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.

function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; }
CONTENTS="$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")"
ELECTRON="$CONTENTS/MacOS/Electron"
CLI="$CONTENTS/Resources/app/out/cli.js"
ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --ms-enable-electron-run-as-node "$@"
exit $?

確かに、エラーメッセージ通り6行目でpythonコマンドを実行しています。 これが見つからなくてエラーが出ていました。

シンボリックリンクを作成する代わりに、codeファイル自体を弄っても対応できますが、まあ前者にしておきましょう。

試行錯誤:エイリアスじゃダメ

そもそも、私の環境ではpythonコマンドが使えました!

というのも、pythonという名前でエイリアスを作成していたんですよね:

alias python='/usr/local/bin/python3'

でも、これはzsh用の設定ファイル~/.zshrcにしか書いていませんでした。

codeで呼ばれるシェル(shebang)はbashなので、bash用の設定ファイル.bash_profileにもエイリアスを追加してみましたが、それでもダメでした。

結局、よくわからないのですが、エイリアスじゃダメっぽいです。

実際、codeのファイル内に直接aliasコマンドを書いてみましたが、それでもcommand not foundでした。

というわけで、このあたりの仕様がエイリアスシンボリックリンクの使い分け方になるのかなと思います。

余談:macpython

昔はmacOSに標準でpython 2系がインストールされていて、pythonコマンドが使えたはずです。

どうやらMontereyのバージョンからランタイムpythonが削除されたようです。

なので、これからは自分でインストールする必要があるようです。

おわりに

長くなりましたが以上です。

何でこんなに長いんでしょう。

参考

同様の内容の記事

maku.blog

qiita.com

qiita.com

macOS MontereyとランタイムPython

applech2.com

シェル

www-creators.com

penpen-dev.com

【nodebrew】Use of uninitialized value $a1 in numeric comparison (<=>) at ... の解消

nodebrew listなどを実行すると以下のように、頭になんかメッセージが出力される;

% nodebrew list     
Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/<hoge>/.nodebrew/current/bin/nodebrew line 678.
Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/<hoge>/.nodebrew/current/bin/nodebrew line 678.
.DS_Store
v12.22.6
v15.9.0
v18.4.0

current: v18.4.0

<hoge>は各自のユーザ名に置き換えてください。

これを解消するには、/Users/<hoge>/.nodebrew/node/にある.DS_Storeを削除すればいい;

rm /Users/<hoge>/.nodebrew/node/.DS_Store 

以上。以下蛇足。

環境

geniusium.hatenablog.com

手順

nodebrew list.DS_Storeが表示されちゃってることから察するように、この存在が原因。

実際;

% ls -a /Users/<hoge>/.nodebrew/node/
./         ../        .DS_Store  v12.22.6/  v15.9.0/   v18.4.0/

いますね。なので、rmコマンドなりで消してやれば良い;

rm /Users/<hoge>/.nodebrew/node/.DS_Store 

これでもう出なくなりました;

% nodebrew list                                  
v12.22.6
v15.9.0
v18.4.0

current: v18.4.0

参考

qiita.com

Macユーザーはロジクール製品を買わないように

ロジクールのmx ergoというマウスを使っていますが、これのBluetooth接続によってMacのスリープ状態が自動的に解除されます。

Macをスリープ状態しなたいのなら、その度にロジクールマウスの電源を切るなどの対応をしないといけません。

夜中だろうがいつだろうが、勝手にMacのスリープ状態を解除し、モニターを点灯させます。

この現象が周知されてからもう半年ぐらい経ちますが、未だにロジクールマウスのソフトウェアアップデートによるバグ修正はありません。ソフトウェアアップデート自体は何度かありましたが、このバグを修正する気は無さそうです。

mx ergo 以外のロジクール製品でも同様の現象が確認されているようですが、ロジクールとしてはやはりこの問題に対応する気はなさそうです。

大抵のモノは代替が効くので、Macユーザーの方はできるだけロジクール製品は使わないようにしましょう。

【Java】配列のclone()について

Javaにおいて、配列に対してclone()というメソッドが使える。

clone()メソッドは、配列を「コピー」してくれるのだが、モノによってはshallow copyにもdeep copyにもなりうる。

1次元配列の場合は、deep copyになる。

public class Main {
  public static void main(String[] args) {
    int[] a = {0, 1, 2};
    int[] b = a.clone();

    b[0] = 9;

    for (int n : a) {
      System.out.printf("%d ", n);
    }
    System.out.println();
    for (int n : b) {
      System.out.printf("%d ", n);
    }
  }
}

結果:

0 1 2
9 1 2

しかし、2次元配列の場合は、shallow copyになる。

public class Main {
  public static void main(String[] args) {
    int[][] c = {{1, 2}, {3, 4}};
    int[][] d = c.clone();
    
    d[0][0] = 9;
    
    for (int[] nn : c) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
    System.out.println();
    for (int[] nn : d) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
  }
}

結果:

9 2 
3 4 

9 2 
3 4 

2次元配列をdeep copyしたいなら、1次元ずつcloneする。

public class Main {
  public static void main(String[] args) {
    int[][] c = {{1, 2}, {3, 4}};
    int[][] d = new int[c.length][c[0].length];
    for (int i = 0; i < c.length; i++){
      d[i] = c[i].clone();
    }
    
    d[0][0] = 9;
    
    for (int[] nn : c) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
    System.out.println();
    for (int[] nn : d) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
  }
}

結果:

1 2 
3 4 

9 2 
3 4 

結局、clone()メソッドを使ったところで、愚直なdeep copyよりforループが1つ少なくて済むだけという話。

愚直なdeep copy

public class Main {
  public static void main(String[] args) {
    int[][] c = {{1, 2}, {3, 4}};
    int[][] d = new int[c.length][c[0].length];
    for (int i = 0; i < c.length; i++){
      for (int j = 0; j < c.length; j++){
        d[i][j] = c[i][j];
      }
    }
    
    d[0][0] = 9;
    
    for (int[] nn : c) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
    System.out.println();
    for (int[] nn : d) {
      for (int n : nn){
        System.out.printf("%d ", n);
      }
      System.out.println();
    }
  }
}

というわけで、この記事にはオチがないです。

以上。

参考

fksekiguchi.sakura.ne.jp

www.sejuku.net

【IIS, APS.NET】aspxサイトが文字化けする【Windows10】

現象

Windows標準搭載のWebサーバーであるIISを起動し、ASP.NETで書かれたaspxファイルをブラウザで表示されると文字化けした。

aspxファイルの文字コードはUFT-8。

その場しのぎ

aspxファイルの文字コードを、UFT-8じゃなくてUTF-8 with BOMにする。

一応これで文字化けはしなくなるが...

解決(一応)

IISマネージャーを開いて、サイドバーから今作業している仮想ディレクトリ(とか)を選択。

「○○ホーム」が表示されたら、「.NET グローバリゼーション」というアイコンがあるので、ダブルクリックで開く。

エンコード」の「ファイル」のところが、私の環境では(デフォルトでは?)shift_jisになってたのでutf-8にして、右側にある「適用」を押す。

そうしたら物理ディレクトリにweb.configファイルが生成される。

以上の作業の後、ブラウザでページを更新したら、文字化けが治った。

なぞ

文字化けが治った後、web.configファイルを削除したら、IIS上での設定の表示がshift_jisに戻ったが、ブラウザでページを更新してももう文字化けの現象は再現できなかった。

意味がわからない。

上記手順と文字化けの因果関係は確かなものだと思うが、なにがなにやらわからん。

とりあえず、以上。

参考

stackoverflow.com

固定IPの確認方法

「あなたの固定IPを教えてくれ」と言われたら、それは多分グローバルIPアドレスのことを聞かれているのだと思います。

グローバルIPアドレスはインターネットプロバイダから提供されるやつです。

グローバルIPアドレスは動的な場合もあるようですが、普通は固定IPです。

グローバルIPアドレスを確認するには、下記サイトへアクセスするのが最も簡単なようです:

www.cman.jp

JavaScriptグローバルIPアドレスを取得して表示しているようです(ソースまでは確認していませんが)。

MacWindowsの設定アプリやシステム情報からグローバルIPアドレスを確認する方法はわかりませんでした。

Macでいろいろと探しましたが、プライベートIPアドレスしか確認できませんでした。

以上です。

参考

固定IPと動的IPの解説が書かれています。

上のリンクもこのページから引っ張ってきました。

www.cman.jp