js/jqueryでHTMLの箇条書きの行数をだす

こう言う感じのHTMLがあったとして

<ul id="hoge">
  <li>aaa</li>
  <li>bbb</li>
  <li>ccc</li>
  <li>ddd</li>
  <li>eee</li>
</ul>

<li>が何個あるか知りたいって時のオペレーション。知らなかったのでメモ

生のjs

document.getElementById("hoge").children.length;

jQuery

$('#hoge li').length

singularityのbind

singylarity結構便利でデフォルトでホームディレクトリと/tmpがコンテナにバインドされる。 とはいえ/mnt/以下にデータを書き出したい場合などは、singularityのコンテナに明示的に/mnt以下などをバインドする必要がある。

ちなみにバインドしなくてもシンボリックリンクでなんとかなるかなと思ったけど、それはsingularityの内部から解決することができなかった。

sylabs.io

bindの方法自体は↑のドキュメントにある感じで極めてシンプルで、 --bindの後ろにhost:containerの順でパスを書くとマウントされる。

$singularity run --bind /mnt/hdd1:/hdd1 hoge.sif

あんまし使っていないけどdockerと同じでread onlyにするフラグなどもあるらしい。

よくみたら環境変数SINGULARITY_BINDディレクトリをカンマ区切りでおくと自動的にバインドされるらしい。

docker-compose upじゃなくてdocker compose up

なんか今日docker for macがアップデート入った。 今まで通りdocker-compose upしたらこんな感じの表示が出た

$ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`

なんかdocker compose upしてみろとか描いてあったので使ってみた

$ docker compose up
[+] Running 0/1

もうちょっと煌びやかな感じの表示が出ていた。 それっぽいコンテナの起動ログが出た後に

The new 'docker compose' command is currently experimental. To provide feedback or request new features please open issues at https://github.com/docker/compose-cli
Error response from daemon: Duplicate mount point: /xxxx/hoge

とかでて死亡していた。実験的か。

docker-composeはpython製で、dockerコマンド自体はgolang製だったと思うのだけど、docker compose upはどっちの言語で実装されているのだろうと思って、メッセージにあったURLをふむとどうもdocker compose upgolangらしい。 docker-composeいれるのめんどうなのでdockerコマンドに内包されると便利そうだけど、微妙に機能が違うとかありそう。しばらくはdocker-compose upで問題ない気がする。

HTMLのデータ属性

知らなかったのでメモ

developer.mozilla.org

developer.mozilla.org

www.webprofessional.jp

実際にMSDNのページにある例題を手打ちして確認したのだけど、JavaScript*. dataset.*で値を取れるのなかなか面白かった。 webアプリ読んでいて、データ格納用のattrかな〜みたいなざっくりした認識だったのだけど、まさかデータ属性というまんまの名前がついていたとは...。

JavaScriptなんでもできるな...と思っていたところ、CSSもdata属性に応じて色々当てられるので、自分が思っていたよりも奥深い気がする。MSDNチュートリアル全部やるべきだな...。

vscodeのgithub extensionsで今開いているファイルのGitHubのURLをひらく

だいたいほとんど素のvimで生活していたんだけど、最近はvscode使ったりしている。 だいたいいじるコード全部GitHubで管理されていて、scrapboxとかslackでコードについて言及したい時はGitHubのURLを貼りたくなる。

vimの時はhubかなんかのコマンド経由でURLをパッと出していた気がするのだけど、vscodeだと気合いで手作業でURL作っていた。 めんどいなーと思って雑にググったところQiitaのエントリが出てきたのでこれいれるかーとなっていた。

qiita.com

と思ってextensionsのボタンからGitHubで検索したところ、なんか公式のような顔をしているやつが出てきた。 f:id:anatofuz:20210414192932p:plain

説明をみてる感じコマンドパレットでいろいろできそうなので、インストールして、コマンドパレットにGithubといれたところ f:id:anatofuz:20210414193035p:plain

こんな感じのいかにもなメニューが出てきて、押すといい感じにGitHubでファイル開いてくれた。 もちろんブランチも考慮されるので、GitHubに今いじってるのと同じブランチがあれば一発でソースコードが出てきて便利。 これで生活の質が向上した気がする。いろいろextensions探したい。

社会人になったのでディレクトリに応じてgitの設定を変える

ついに社会人になり、主戦場がmercurialからgitになりました。 gitは今まで脳死anatofuz@gmail.comでcommitしていたのですが、娑婆にでると会社のドメインでcommitする必要性が出てきます。

しかし一般的な趣味プロダクトとかで会社のドメインを使うと不要な怒られが発生する可能性がある...!! 会社のプロダクトに関するものだけ会社のドメインを利用したい...!! という感じで、ディレクトリに応じてgitの設定を切り替えるようにしてみます。

リポジトリ管理

ディレクトリごとに設定を切り替える場合はリポジトリをローカルでどうやって管理するかが重要になってきます。 こういうときはghqを使うと良い感じにURLに応じてディレクトリを掘ってくれるので、会社のドメインに応じたディレクトリを勝手に作ってくれます。

今回は github.com/borderShojiみたいな会社グループのリポジトリをcloneしてきたと仮定して、ghqのルートディレクトリを~/srcとします。 つまりgithub.com/borderShoji/narutoみたいなリポジトリをcloneしたローカルディレクトリは~/src/github.com/borderShoji/narutoとなります。

~/.gitconfigの設定

次はgit全体が見る ~/.gitconfigの設定を書き換えます。

すでにgitconfigにはuserに関する次のような設定が書かれているものとします。

[user]
  name = AnaTofuZ
  email = anatofuz@gmail.com
  username = AnaTofuZ
  signingkey = XXXXX

この設定がある場合、このマシンで行われる全てのgitのオペレーションはこのuser情報が利用されます。

さて最近のgitはconditional includes機能があり、ディレクトリごとで設定ファイルを独自定義できるようになっています。

ここで、先程のgithub.com/borderShojiディレクトリ以下のgitリポジトリに対して設定を独自定義し、デフォルトの設定を上書きするような記述をgitconfigに書いてみます。

[includeIf "gitdir:~/src/github.com/borderShoji/"]
   path = ~/.gitconfig.bordershoji

ここでのポイントはincludeIfの末尾に必ず/をつけるです。/があるとzshでいうところの**/*が書かれているのと等価になり、ディレクトリを再起的にたどってくれますが、/がないとピンポイントでそのディレクトリだけになってしまいます。

あとは~/.gitconfig.bordershojiに上書きしたいgitの設定を描きます。

[user]
  email = anatofuz@borderShoji.net
  signingkey = FFFFFFFFF

こうすると何も考えずにgitの設定がディレクトリごとに代わり、社会性を得ることができます。これで安心!!!!!!

サブルーチンのエイリアスを型グロブで作る

知らなかったのでメモ。

#!/usr/bin/env perl
use strict;
use warnings;

sub hoge {
  print "hello\n";
}

*foo = \&hoge;

foo();

この例題を実行すると元気にhelloと表示される。 これは型グロブを使ってhogeサブルーチンのエイリアス的にfooを登録している。 代入しているのはサブルーチンリファレンスなので参照している実態は同じとなる。

また代入先も変数そのものではなくて型グロブに対してなので、呼び出しが$foo->()ではない。

世間で使われているものだとSmart::Argsに使われていた。

metacpan.org

よくみたら公式ドキュメントにそれっぽい記述があった。 これができるのも面白いけどuse strict環境で普通に実行できたのがびっくり。。。。