git svn clone svn+ssh://cvs.apgrid.org/grid/svnroot/sss -T trunk -b branches -t tagsこんな感じ。ただうまく行かない場合もある。切り分けができていない。
2021年12月25日土曜日
SVNからGitへの変換
こちらはsvn-gitを用いると簡単。このコマンドはsvn+sshプロトコルで使えるので、手元の計算機にsvn-gitをインストールできれば使える。macのbrewで入れた。
CSVからGitへの変換
CSVレポジトリからgitレポジトリへの変換。多分もう使うことがないであろうけど一応残しておこう。
csv2svnというツールを使う。なまえからわかるように本来はsvnに変換するツールなのだけど、svnだけでなくgitへも変換してくれるのだけど、使い方がわからん。。ドキュメントへのリンクが切れている。
このスクリプトを見たらなんとなくわかった。
#!/bin/bash -x TARGET=$1 mkdir ./$TARGET.git cd ./$TARGET.git git init ../../cvs2svn/cvs2git /grid/cvsroot/$TARGET | git fast-import git checkoutこのツール自体がpython 2系で書かれているので寿命がつきかけている。CSVを放置していたほうがわるいのだけど。。
2021年11月5日金曜日
Rustでdev 時にだけ出す出力
デバッグ時にだけ出力を出すようにしたい。Cでなら
#ifdef TEST #endif .. gcc -DTEST xxx.cとやっていたようなやつ。
Rustにはデフォルトで幾つかプロファイルがあり、普通にコンパイルするとdev
で
コンパイルされ、--release
をつけると
release
でコンパイルされる。
さらにもともと
debug_assertions
というコンパイルフラグ?が用意されているので
これを使うと良さそう。もともとは同名のアサートマクロのON/OFFに使うもの。
#[cfg(debug_assertions)] println!("xxxx");
と書いておくと、release
では実行され、dev
では実行されない。
このcfgの中に書いた文字列は、スペルミスしていても何も警告が出ないので要注意。
ちなみにこのあたりはCargo.tomlで設定できる。下のようにすると、releaseモードでも
出力されるようになる。こちらはハイフンで、cfgの中身はアンダースコアなのが
大変にはまりそう。。こちらもエラーでないし。
[profile.release]
debug-assertions = true
2021年5月26日水曜日
bibtex で人数が多いときに自動的に et al. にする
このページによくまとまっている。
このなぞ言語はスタック施行の言語で、仕様は
ここに書かれている。
's :=
で 変数sにスタックトップの値を取り出す。
条件
ブロック1
ブロック2
$if
で、条件が1になるときにはブロック1を、それ以外のときにブロック2を実行する。。らしい。
上のページに書かれている通りの変更はSpringerのbstファイルではうまく行かなかったので、若干修正。どうも呼び出されたときのスタックの状態の前提が違う?そんなことがあるだろうか。
FUNCTION {format.names}
{ 'bibinfo :=
duplicate$ empty$ 'skip$ {
's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
numnames #3 >
{
#2 'namesleft :=
{ namesleft #0 > }
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ " {\it et~al}." * }
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
{
{ namesleft #0 > }
{ s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
nameptr #1 >
{ namesleft #1 >
{ ", " * t * }
{ numnames #1 >
{ "" * }
'skip$
if$
t "others" =
{ " et~al." * }
{ ", " * t * }
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
if$
}
if$
}
2021年5月19日水曜日
S3+Cloud Frontで HTTPSサイトを運用
ググれば佃煮にするほど色々でてくるので、私が引っかかったところだけメモ
- ACMで証明書を作るときには N.Virginiaでつくること。なぜこんな制約があるのか全くわからないが。。
- フォルダ名で index.html が返されるようにするには、このページに書かれているように、CloudFrontのディストリビューションのOrigin Domain Name を省略形(S3.AWSみたいなやつ)ではなく、リージョン名入りの長い名前にする必要がある。
とりあえずできてよかったが無駄に消耗した。。github.io使ったほうが絶対楽だったな。
djangoのtemplateをスタンドアロンで使う際にfilterを登録する方法
11年前にもやっている
のだが、この方法ではいつの間にか動かなくなっていたので、ソースを読んで対策を講じてみた。
Engineというものを作ってやって、そのbuildinsに追加すれば良いらしい。
from django.template.engine import Engine
engine = Engine.get_default()
engine.template_builtins.append(register)
そして、Engineを指定して、Templateを作る。
Template(templateStr, engine=engine).render(Context(d0))
うむ、面倒だ。APIで公開されている方法でもないので、いつ変わるかわからないし。。もっと使いやすいテンプレートエンジンに移行すべきなのか。
コードの全体。
import os
os.environ["DJANGO_SETTINGS_MODULE"]="djangoSettings"
from django.template import Template, Context
from django import template
import django
register = template.Library()
@register.filter
def texEscape(value):
return value.replace("&", "\\&")
templateStr="""{% autoescape off %} {{ item|texEscape }}{% endautoescape %}"""
d0 ={"item":"&teststring"}
from django.template.engine import Engine
engine = Engine.get_default()
engine.template_builtins.append(register)
Template(templateStr, engine=engine).render(Context(d0))
結果は
' \\&teststring'
2021年5月15日土曜日
brew でinstall したappをspotlight 検索できるようにする
brewでapp形式のアプリをインストールすると/opt/homebrew 以下にバイナリができるようだ。これをApplication からsymbolic linkしておけばlauncherからは起動できるのだが、spotlight検索に引っかからない。私は常にspotlightから起動するので、大変不便。
調べてみたところ、Aliasなるものを作成して、それを/Applicationにコピーすれば良いことがわかった。XXX.appのあるフォルダをfinderで開いて、右クリックから[Make Alias]とする。するとXXX alias というエイリアスができるので、これを/Applicationに持っていって名前を変える。
aliasは、ファイルシステム的には普通のファイルのように見える。シンボリックリンクとほぼ同じことをやっているように見えるが、なぜこんなのが必要なのだろうか。OS 9時代からの遺物?
2021年4月29日木曜日
Mac のEmacsの整備
いつからかescやc-s, c-rでimeが英語モードに戻らなくなってしまって、非常に使いにくくなっていたのを
なんとか解決。
ESC はメタのプレフィックスとして手癖で使ってしまう。これは、karabinar-element で解決 ESC to ABCというのを入れた。
サーチの方は下のように、キーバインドを置き換える関数を作って解決。
もっといい方法はありそうだけど、とりあえず、これで使ってみよう。
(defun insert_revert (key)
(setq v (lookup-key (current-global-map) key))
(global-set-key key (lambda ()
(interactive)
(mac-select-input-source "com.apple.keylayout.ABC")
(funcall v))))
(insert_revert "\C-s")
(insert_revert "\C-r")
2021年3月26日金曜日
gnupgの共有暗号化を簡単な感じでつかう
カジュアルに暗号化をつかう。
% echo "to be encrypted" | gpg -c | base64
jA0EBwMCEtjToibU+8/o0kUBCb+uV9LvpwbT3vgF0AHb5hDoRhzbAadsGrgGSbW8uiqPOh2xc7EDRfKQmtNtM9e4f2xTu3AaGTystWDTx68FsSCff0Q=
% echo jA0EBwMCEtjToibU+8/o0kUBCb+uV9LvpwbT3v... | base64 -d | gpg -d -q -o -
to be encrypted
という感じ。
2021年3月4日木曜日
jupyter notebook から pythonコードへ変換
jupyter notebookで開発したものをpythonコードに変換する方法。
jupyter nbconvert というコマンドを使う。これは万能ツールでPDFなどにも変換できる。
このコマンドを外部コマンドとして実行するのは何かと不便なので、セルから実行するとよい。
その際、普通に書いておくと、変換コマンド自信が変換されたpython コードに入ってしまう。
そこで、下のようにオプションをつける。すると、#exclude_from_py というコメントが入ったセルは
変換されたものから削除される。で、変換するセル自体にもこのコメントをつけておけばいい。
#exclude_from_py
!jupyter nbconvert --RegexRemovePreprocessor.patterns="['#exclude_from_py']" --to script XXXX.ipynb
2021年1月4日月曜日
python で空きポートを探す
localhostで接続待ちできる空いているポートを探す。
要するに、serverportを作ってみて成功したらクローズして返すだけ。
import socketserver
def find_vacant_port(port_base, trial_count):
"""find vacant port for forwarding,
starts with port_base and test at most trial_count ports.
if it cannot find, it raise OSError"""
for i in range(trial_count):
try:
ss = socketserver.TCPServer(('127.0.0.1', port_base + i), None)
# found one
ss.server_close()
return port_base + i
except OSError:
pass
raise OSError("cannot find vacant port")
登録:
投稿 (Atom)