読者です 読者をやめる 読者になる 読者になる

水底

ScalaとかC#とかネットワークとか

Scalaで競技プログラミングするためのTips

競プロ初心者作

気が向いたら更新していくつもり

続きを読む

Scalaで競技プログラミングに入門したかった感想

ただの感想です. 小技集的なのはそのうち別記事でまとめる予定.

(追記: まとめた)

amaya382.hatenablog.jp

続きを読む

型クラスの雰囲気をつかんでScala標準ライブラリの型クラスを使ってみる回

Scalaで型クラスと言うとScalaz!?となるかもしれませんが, Scala標準ライブラリでも使われています. 提供されている型クラスが意外と知られていない (?) みたいなのでユースケースを交えて簡単にまとめたいと思います.

※ ゆるふわです. 標準ライブラリの範囲なのでモから始まるアイツとかは出てきません.

続きを読む

Dottyによる変更点と使い方

Dottyで何ができるようになるのかとその使い方を簡単にまとめたいと思います. 理論的な部分は深掘りしません.

f:id:amaya382:20170429233234p:plain

以下ちょっと長め. 調べきれてない点も多々あるので, 抜けや間違いがあったら教えてください.

続きを読む

複数のコマンドの出力をまとめてリダイレクトする2つの方法

1. (), {} の利用

(), {} で囲んでまとめてリダイレクト先を指定する. 丸括弧の場合はサブシェルで, 波括弧の場合はカレントシェルで実行される.

{
  command1
  command2
} >> log 2>&1

2. exec の利用

exec は現行プロセスを別コマンドのプロセスに置換するコマンドである. このとき, 引数を省略してリダイレクトのみ記述することで現行プロセス (shell) のリダイレクト先を上書きすることができる.

exec >> log 2>&1
command1
command2

ちなみに元に戻す方法が見当たらないけどどうやるのだろうか… (exec 1>&1 2>&2 とかで戻ってくれても良さそうだがうまくいかない)

まとめ

exec を使うと副作用が怖いので {} (or ()) でまとめてリダイレクトの方が無難っぽい (?)

sh・bash・zsh等, shellの違いでハマりやすい部分とか

前提として

sh の実体は環境によって POSIX互換bash (bash --posix) であったり, dash であったり, busybox であったりと様々である (ls -l `which sh` とすれば実体がわかる). 唯一の制約は POSIX互換であること だ (※どこぞの今はなきお行儀が悪いOSを除けば). そのためシバンsh を利用する場合は, 最低限のPOSIX互換shell上で動作するように書かれるべき で, 例えば bash 拡張を用いる時はシバンbash を指定するべきだ. しかしながら, シバンsh を指定しているにも関わらずPOSIXの範囲を超えた命令を利用しても動いてしまうケースもままあり, 意識しないと難しい.

ハマりやすい差異の一例

空白 (正確には区切り文字) が含まれた変数

変数の展開され方が異なる

# bash, bash --posix, dash, busybox
: > 'a b'
x='a b'
mv $x c # error (`mv a b c` と解釈される)
ls # -> 'a b'
# zsh
: > 'a b'
x='a b'
mv $x c # (`mv 'a b' c` と解釈される)
ls # -> c

文字列の比較

== による文字列比較はPOSIX互換のものではない

# dash
[ 'a' = 'a' ] && echo 'ok' || echo 'ng' # -> ok
[ 'a' == 'a' ] && echo 'ok' || echo 'ng' # error -> ng
# zsh
[ 'a' = 'a' ] && echo 'ok' || echo 'ng' # -> ok
[ 'a' == 'a' ] && echo 'ok' || echo 'ng' # error
# bash, bash --posix, busybox
[ 'a' = 'a' ] && echo 'ok' || echo 'ng' # -> ok
[ 'a' == 'a' ] && echo 'ok' || echo 'ng' # -> ok

プロセスリダイレクト

これは bashzsh 固有の機能の一つ

# bash --posix, dash, busybox
cat <(echo 'a') # error
# bash, zsh
cat <(echo 'a') # -> a

結論

shellは方言や実装で微妙に違うところが多すぎて厳しい

いい感じの深層学習に関する資料を貼るだけ

Chromeのタブにスタックされつつあったのでメモして閉じる作戦. 折角なので別途読んだものもまとめて追加してる.

理論系中心でふわふわした某プログラマのための技術情報共有サービスのようなソースはなし. 基本的に最新の事柄を扱っているもの. 結構重複が多い.

続きを読む