タグ

ブックマーク / kiririmode.hatenablog.jp (9)

  • シェルスクリプトにおける [ と [[ - 理系学生日記

    シェルスクリプトで条件分岐を書くとき、[ を使ったり [[ を使ったりすることになると思います。 POSIX の test にも記載がありあすが、[ は test と同じ機能を持つことになっており、同じ実装であることも多いです (ただし、[ として実行されるか、test として実行されるかに依って挙動が変わり得る)。 一方で、[[ は POSIX で定義はされていない、Bash 等の高機能シェルでの拡張になります。 [ と [[ は、当然ながら同じような機能を持っています。そりゃ、後者は前者の拡張ですからね。一方で、「拡張」であるが故に、[ と [[ で異なる挙動も存在します。 演算子 たとえば比較の演算としては以下のような挙動のちがいがあったりします。なお、[ への有無については、POSIX 定義という観点であって、シェル実装によっては普通に使えるものもあります。 機能 [ [[ 備考

    シェルスクリプトにおける [ と [[ - 理系学生日記
  • スレッドダンプを解析する地獄とFastThreadというWebサービス - 理系学生日記

    スレッドダンプというと、JVM 言語に関する運用でマジで困ったときの頼みの綱みたいなイメージある。マジで困ったとき、じゃなくて、カジュアルに見れば良いんだけど、スレッドダンプのフォーマットが異常すぎてつらくなる。 そもそもなんなんだこのゴミみたいなフォーマットは。 一体誰がどういう思想の元でこのフォーマットを決めたのかさっぱり分からないし、人類を苦しめるために未来から来た AI が勝手に策定したのではないか。 "[ThreadPool Manager] - Idle Thread" #42 daemon prio=5 os_prio=31 tid=0x000000012a3a7800 nid=0x15503 in Object.wait() [0x000070000ab66000] java.lang.Thread.State: WAITING (on object monitor) at

    スレッドダンプを解析する地獄とFastThreadというWebサービス - 理系学生日記
  • Docker ComposeでPostgresバックエンドのgitbucket/redmineを構築する - 理系学生日記

    Redmine をマジメに使ったことがなかったのですが、使う機会が多くなってきているので、ちょっと慣れとかないと厳しいなぁと思っておりました。 とりあえずを買ったは良いのですが、手元で確認したいというのと、同じく良く使われるようになってきている Gitbucket も手元で使いたい、 それに、せっかくだったら全部 Postgresql をバックエンドにしておきたいという思いもありました。 というわけで、これらの環境を手元にサクっと構築できるように、Docker Compose で立ち上げられるようにしておくか、というのがエントリの趣旨になります。 これにより、以下のコマンドで、redmine と gitbucket が動き出します。 $ docker-compose run -d ベースとなるコンテナ ベースとしたのは以下のコンテナです。 コンテナ URL redmine:3.3.3

    Docker ComposeでPostgresバックエンドのgitbucket/redmineを構築する - 理系学生日記
  • プラグインインストール済のJenkins Dockerイメージを作成する - 理系学生日記

    Jenkins には Docker 公式のイメージ があったりして、セットアップが非常に容易になっています。 で、いざ docker run して立ち上げてみたら、いきなり Plugin をインストールしろやみたいな画面になるし、仕方ないなぁお勧めプラグインでもインストールしてやるかみたいな感じでボタン押したら、大量のプラグインのインストールが走ってずいぶん時間待たされることになりました。 こんなのは全然軽量じゃない、もっと迅速に Jenkins と遊びたいんや!! というわけで、お勧めプラグインをインストール済のイメージを作りましょう。 お勧めプラグイン一覧の作成 お勧めプラグインをインストールしておくためにはお勧めプラグイン一覧が必要なわけですが、これは Jenkins の Jenkins Script Console で以下のような Groovy スクリプトを書いて実行すれば良いです

    プラグインインストール済のJenkins Dockerイメージを作成する - 理系学生日記
  • BashのGlobに関わるオプション - 理系学生日記

    前に Bash の Glob に関するエントリを書きました。 他にも Glob には様々な応用があります。 あまり知られていないような使い方も多いので、それらをご紹介していくコーナーです。 extglob Glob で正規表現と not 条件を表現できるようになる。 詳細については、 BashのGlobは積極的に利用しましょう - 理系学生日記 に書きました。 nullglob 通常、Glob を指定したもののそれが合致するファイル/ディレクトリが存在しない場合、Bash は指定した Glob をファイル名として解釈します。 何を言っているかというと、これを見れば分かって頂けるでしょうか。 # *.hoge というファイルが存在しないので、Bash は '*.hoge' というファイル名をそのままコマンドに渡す $ ls *.hoge ls: cannot access '*.hoge':

    BashのGlobに関わるオプション - 理系学生日記
  • BashのGlobは積極的に利用しましょう - 理系学生日記

    bash には glob というものがあります。glob ってなによっていう人も ls *.sh とかを展開する bash の機能ですよっていうと分かるかと思います。 この glob の機能って多用されますがあまりマニュアルとか読んだ人もいないと思うので、簡単にまとめてみます。 1. Pattern Matching Glob のパターンマッチングに使用できる文字のパターンっていうのは、通常、次の文字です。 *: 何にでもマッチする ?: 任意の一文字にマッチする [...]: [ と ] の間に記述された任意の文字にマッチする。これはちょっとややこしいので、もうちょっとまとめます。 [...] [...] の ... には通常として文字の集合を指定できますが、多少表現力のあるものも指定できます。 次のように、ハイフン- で指定された範囲のみにマッチさせたりできますし、 $ ls test

    BashのGlobは積極的に利用しましょう - 理系学生日記
  • init-loader.el で特定環境用に設定ファイルを分ける - 理系学生日記

    emacs の設定ファイル、1 ファイルだけに書いてるとどうしても長くなるし ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; キーバインド (global-set-key ....) (global-set-key ....) (global-set-key ....) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; anything みたいにコメントで境界付けたりしだしてカッコよくない。設定ファイルの上部にキーバインド設定用の領域があるのに、それを忘れてしまって設定ファイルの下の方にもキーバインド用の設定領域を作るとかなって、マジにダサくなるし保守しづらくなる。このあたりの話、1,000 行のコードを 1 つの関数で書くとかそ

    init-loader.el で特定環境用に設定ファイルを分ける - 理系学生日記
  • Transfer-Encoding: chunked について - 理系学生日記

    Tomcat をコンテナとした Servlet のコード上で Content-Length ヘッダを設定していたのですが、なぜか HTTP レスポンスのヘッダには Content-Length が出力されないという事象が確認されました。 これは一体なぜなのだろうと調べていると、当該レスポンスのヘッダに Transfer-Encoding: Chunked が出力されていることに気付きました。 Chunked は HTTP/1.1 で定義されている方式です。RFC 2068 には以下のような記述があり、Chunked と Content-Length を共存させてはいけない (MUST NOT) ことが分かります。) Messages MUST NOT include both a Content-Length header field and the "chunked" transfer

    Transfer-Encoding: chunked について - 理系学生日記
  • シェルを作ってみた - 理系学生日記

    字句解析 先日友人とご飯をべてるときにシェルの話になって,「シェル作るときって字句解析がメンドくさいよねー」って話になりました.シェルというと,fork だの dup だの pipe だのがミソみたいな感じですけど,個人的に一番メンドい印象があるのが字句解析だったりします.UNIX C プログラミングとかにもシェルの簡易実装例があるんですけど,そのソースはこんな感じで,空白をデリミタとして分割するだけの形になっています. void parse( char *buf, char **args ) { while ( *buf != NULL ) { while ((*buf == ' ') || (*buf == '\t')) *buf++; *args++ = buf; while ((*buf != NULL) && (*buf != ' ') && (*buf != '\t')) b

    シェルを作ってみた - 理系学生日記
  • 1