Quantcast
Channel: My Future Sight for Past
Viewing all 265 articles
Browse latest View live

括弧の名称・用法一覧

$
0
0

約物である括弧(かっこ)の名称をまとめた。

文章を書いたり,プログラムを書いていると以下のような括弧を頻繁に使用する。

  • (),()
  • [],「」
  • <>,〈〉
  • {}

これらの記号の名称が日本語や英語で何なのかわからなかった。調べ物するときや議論するときに名前がないと何を指しているのかわからず不便である。そのため,これらの括弧について以下の項目を表にまとめた。

  • 記号
  • 日本語と英語の名称
  • 日本語での用法

    まとめた一覧を括弧の名称一覧に示した。この表では日本語で使われる括弧をだいたい網羅していると思われる。英語や日本語の名称はWikipediaやUnicodeでの名称を用いている。

    括弧の名称一覧
    全角記号半角記号名称(英語)名称(日本語)日本語での用法
    ()()parentheses, brackets, parens, round brackets, soft brackets, circle brackets丸括弧,小括弧,パーレン語句の読み。説明。読み飛ばせる追記事項。
    ⦅⦆
    double parentheses, white parentheses二重丸括弧,二重パーレン注記。特になし。
    「」「」corner brackets鉤括弧会話。題名や短い引用。
    『』
    white corner bracket二重鉤括弧,二重鉤,白括弧鉤括弧の中にさらに引用するとき。書名など。通常の鉤括弧とは意味が異なる場合。
    [][]brackets, square brackets, closed brackets, hard brackets角括弧,大括弧,ブラケット特になし。
    〚〛
    white square brackets二重角括弧特になし。
    {}{}braces, flower brackets, French brackets, definete brackets, swirly brackets, birdle brackets, Scottish brackets, squirrelly brackets, accolades, pointy brackets, fancy brackets, curly brackets, curl波括弧,中括弧,ブレース,ブレイス,カーリーブラケット,カール特になし。
    〔〕
    tortoise shell brackets 亀甲括弧(きっこうかっこ),亀甲,キッコー,亀の子括弧特になし。引用部分の補足説明。
    〘〙
    white tortoise shell brackets 二重亀甲括弧特になし。引用部分の補足説明。
    〈〉⟨ ⟩pointy brackets, angle brackets, triancular brackets, diamond brackets, tuples, chevrons, pointing angle brackets山括弧,山鉤,山パーレン,アングルブラケット特になし。引用符。

    <>inequality signs, pointy brackets, brackets, angle brackets, broken brackets, brokets不等号。ASCII文字しか使えない時に山括弧を書くときに使う。
    《》
    double angle bracket二重山括弧特になし。ルビ。
    «»
    pointing double angle quotaion markギュメ,二重山括弧引用記号特になし。
    【】
    black lenticular brackets隅付き括弧,隅付きパーレン,太亀甲,黒亀甲,墨付き括弧特になし。強調したい,目立たせたいとき。項目名。
    〖〗
    white lenticular brackets隅付き括弧(白)(すみつきかっこしろ)特になし。

    上記の表では使われている名称をできるだけ列挙している。そのため複数の名称があり,数が多くわかりにくい。そのため,プログラミングで頻繁に用いられる記号とよく使われていそうな名称を以下のプログラミングでよく使う括弧の名称一覧にまとめた。

    プログラミングでよく使う括弧の名称一覧
    全角記号半角記号名称(英語)名称(日本語)
    ()()parentheses, round brackets丸括弧
    [][]square brackets角括弧
    {}{}braces, curly brackets波括弧
    〈〉⟨ ⟩, <>angle brackets山括弧

    これで括弧の名称で迷うことはなくなるだろう。

    括弧とその名称・用法は全て以下のWikipediaの情報を元に表にまとめた。

    参考文献:

    • 括弧 - Wikipedia http://ja.wikipedia.org/wiki/括弧
    • Bracket - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/Bracket

    How to create .deb package file for Ubuntu, Debian single binary

    $
    0
    0

    Ubuntuなどで使えるDebianパッケージファイル(.deb)の作成方法を記す。

    自作プログラムなどを配布して他のUbuntuなどで簡単に使ってもらう方法がないか考えた。シェルスクリプトでコピーや削除を自動的に行うようにしていたが,どうしても端末からコマンドを入力する必要があり煩雑だと感じた。そこで,Ubuntuで一般的にパッケージのインストールで使われているDebianパッケージファイル(.debファイル)を作りたいと考えた。

    うまく成功したので手順をここでまとめる。

    前提

    MoeCalcという独自パッケージを以下のディレクトリにインストールする。

    /opt/MoeCalc

    今回はソースコードは配布せずビルド済みのバイナリのみを配布する。

    環境の用意

    以下のコマンドでパッケージ化に必要なコマンド類をインストールする。

    sudo apt-get install build-essential libgtk2.0-dev dpkg-dev debhelper devscripts fakeroot lintian dh-make

    dh_makeでのパッケージひな形の作成に使用する名前やメールアドレスを環境変数に設定する。

    export DEBEMAIL="e-mail@example.com"
    export DEBFULLNAME="Ken SENOO"

    メールアドレスは公開するつもりでないなら,メールアドレスの形式なら何を書いてもいい。

    参考:Ubuntu Manpage: dh_make - prepare Debian packaging for an original source archive http://manpages.ubuntu.com/manpages/lucid/man8/dh_make.8.html

    パッケージングディレクトリの用意

    パッケージ化したいファイル一式を以下の命名規則のディレクトリに格納。

    パッケージ名-バージョン番号

    例:moecalc-v0.4

    mkdir -p ~/tmp; cd ~/tmp
    wget -nc https://github.com/lamsh/MoeCalc/releases/download/v0.4/moecalc-v0.4.tar.gz
    tar zxf moecalc-v0.4.tar.gz
    mv moecalc-v0.4 moecalc-0.4
    パッケージひな形の作成

    パッケージ化したいディレクトリに移動して以下のコマンドを入力。

    cd moecalc-0.4
    dh_make -n -s

    -nオプション:origファイルの作成しない。

    -sオプション:シングルバイナリのパッケージングを選択。このオプションを付けなければ,パッケージングの種類を確認してくる。

    -cオプション:ライセンスのひな形を選択。既定はGPL3。

    コマンドを入力すると以下のように確認してくるのでEnterを入力。

    Maintainer name  : Ken SENOO
    Email-Address : e-mail@example.com
    Date : Sat, 02 May 2015 15:23:19 +0900
    Package Name : moecalc
    Version : 0.4
    License : gpl3
    Type of Package : Single
    Hit <enter> to confirm:
    不要ファイルの削除

    dh_makeで作ったひな形の中には使わないファイルもたくさんあるので削除しておく。

    rm debian/{*.ex,*.EX,README.Debian,README.source}
    debian/controlの編集

    controlファイルでパッケージの各種情報を記入する。Ubuntu Sotfware Centerで表示されたりいろんなところでここの情報が参照される。重要なファイル。

    cat debian/control
    Source: moecalc
    Section: unknown
    Priority: optional
    Maintainer: Ken SENOO <e-mail@example.com>
    Build-Depends: debhelper (>= 8.0.0)
    Standards-Version: 3.9.4
    Homepage: <insert the upstream URL, if relevant>
    #Vcs-Git: git://git.debian.org/collab-maint/moecalc.git
    #Vcs-Browser: http://git.debian.org/?p=collab-maint/moecalc.git;a=summary

    Package: moecalc
    Architecture: any
    Depends: ${shlibs:Depends}, ${misc:Depends}
    Description: <insert up to 60 chars description>
    <insert long description, indented with spaces>
    修正すべき箇所は主に以下4箇所。
    • Section:aptitudeなどでソートしたりするときに使う分類。困ったらmiscと書いておく。
      • Debian JP Project - Debian ポリシーマニュアル - Debian アーカイブ http://www.debian.or.jp/community/devel/debian-policy-ja/policy.ja.html/ch-archive.html#s-subsections
    • Maintainer:メンテナーの名前とメールアドレスを記入。最初に環境変数で設定しているので変更は不要。
    • Homepage:パッケージに関係のあるURLを記入。日本語はうまく認識されない。
    • Description:ソフトウェアセンターなどで表示される説明文を記入。

    今回は以下のように記入した。

    Source: moecalc
    Section: misc
    Priority: optional
    Maintainer: Ken SENOO <e-mail@example.com>
    Build-Depends: debhelper (>= 8.0.0)
    Standards-Version: 3.9.4
    Homepage: http://moebuntu.wiki.fc2.com/wiki/%E8%90%8C%E3%81%88%E9%9B%BB%E5%8D%93%E3%81%B7%E3%82%8D%E3%81%98%E3%81%87%E3%81%8F%E3%81%A8
    #Vcs-Git: git://git.debian.org/collab-maint/moecalc.git
    #Vcs-Browser: http://git.debian.org/?p=collab-maint/moecalc.git;a=summary

    Package: moecalc
    Architecture: any
    Depends: ${shlibs:Depends}, ${misc:Depends}
    Description: An open-source calculator for moebuntu.
    This package provides 'moecalc' command.

    ソフトウェアセンターでは以下の図のようにcontrolファイルの中身を使って説明文を表示している。

  • debian/copyrignt
  • copyrightファイルで著作権情報を記述。

    cat debian/copyright

    必要に応じて編集する。今回は変更していない。

  • debian/changelog
  • 必要に応じてdebian/changelogファイルを修正する。今回は編集しなくても問題ない。

    編集する際はdchコマンドを使えばうまくできる。

  • debian/install

    今回はシングルバイナリの配布なので,Makefileは使わずにインストール先を個別に指定する。そのため,インストール先の指定ファイルの作成する。

  • 具体的にはパッケージング中に実行されるdh_installでインストールするファイルとそのインストール先を指定する。dh_installの設定には以下の2ファイルを使う。

    • install
    • <package>.install

    <package>にはパッケージ名(今回はmoecalc)が入る。

    上記2ファイルの書式は以下のようにインストール元 インストール先とする。

    src/bar usr/bin

    インストール先は/からの相対パスにする。

    具体的には今回は以下のようにdebian/installファイルを作成した。

    echo '
    moecalc opt/MoeCalc
    moecalc.png opt/MoeCalc
    bg.jpg opt/MoeCalc
    moecalc.desktop usr/share/applications
    nw.pak opt/MoeCalc
    icudtl.dat opt/MoeCalc
    '> debian/install
    debian/links

    アプリケーションで使用する画像の格納場所を/opt/MoeCalcにしている。一方システムのPATHとして認識されるために/usr/binにプログラムを配置したい。起動元プログラムの位置関係を維持するためにシンボリックを/usr/binに貼り付けることで対処する。

    具体的にはパッケージング中に実行されるdh_linkでシンボリックリンクする元ファイルと貼り付け先を指定する。設定にはinstallと同じように以下の2ファイルを使う。

    • links
    • <package>.links

    以下のようにしてdebian/linksファイルを作成した。

      echo '
      /opt/MoeCalc/moecalc usr/bin/moecalc
      '> debian/links
      debian/rules

      パッケージングの時にdh_stirpコマンドを実行してバイナリを圧縮している模様。そのため,既にupxコマンドで圧縮されたバイナリがあるとここで以下のエラーメッセージが表示される。

      dpkg-buildpackage -us -uc
      ...................
      dh_strip
      strip: error: the input file 'debian/moecalc/opt/MoeCalc/moecalc' has no sections
      dh_strip: strip --remove-section=.comment --remove-section=.note debian/moecalc/opt/MoeCalc/moecalc returned exit code 1
      make: *** [binary] Error 29

      このエラーが出ると,バイナリがうまくパッケージ化されない。これを防ぐため,upxで圧縮されたバイナリをdh_stripの対象から除外する。

      debian/rulesの末尾に以下の内容を追記する(行頭はタブ)。

      echo '
      override_dh_strip:
      dh_strip --exclude moecalc
      '>> debian/rules

      参考:build - debuild creates link instead of copying binary file - Stack Overflow http://stackoverflow.com/questions/21142719/debuild-creates-link-instead-of-copying-binary-file

      パッケージ化

      ここまでできれば以下のコマンドでパッケージングを行う。

      dpkg-buidpakcage -us -uc

      -us:.dscファイルにGPGでサインしないオプション

      -uc:.changesファイルにGPGでサインしないオプション

      パッケージングを行うコマンドはこの他にもいくつかある。
      • fakeroot
      • debuild

      内部でdpkg-buidpackageを使っているのでdpkg-buildpackageを使えばよい。このほうがエラーメッセージがなどが表示されてわかりやすい。

      パッケージングは以下のディレクトリに仮想的なインストールディレクトリを作り,そこにパッケージを配置してパッケージファイルを作成している模様。

      debian/moecalc/
      |--DEBIAN/
      |--opt/
      +--usr/

      パッケージングがうまくいっているかはここにうまくファイルが格納されているかでも確認できる。パッケージ化が成功するとパッケージ化ディレクトリの外にパッケージファイル類が生成される。

      ls ../
      moecalc-0.4/ moecalc_0.4.tar.gz moecalc_0.4_amd64.deb
      moecalc-v0.4.tar.gz moecalc_0.4_amd64.build
      moecalc_0.4.dsc moecalc_0.4_amd64.changes

      moecalc_0.4_amd64.debファイルがパッケージファイルとなる。

      このファイルを右クリック▷Ubuntuソフトウェアセンターで開くことでインストールできる。アンインストールは他のパッケージと同様にUbuntuソフトウェアセンターから検索してアンインストールできる。

      これでひとまずバイナリファイルのパッケージ化がうまくできた。改善点としてはPPAへの登録方法やスクリーンショットの登録方法などがあるだろう。今後必要に応じて調査していきたい。

      パッケージ化にあたって以下の情報が非常に参考になった。

      参考情報:
      • 独学Linux : シンプルなソースコードからdebパッケージを作成する方法 http://blog.livedoor.jp/vine_user/archives/51940442.html
      • Rodin, Josip & Aoki, Osamu  (2014) : Debian 新メンテナーガイド. https://www.debian.org/doc/manuals/maint-guide/.

      Install Apache HTTP Server 2.4 from source on Ubuntu14.04

      $
      0
      0

      CMSなど自分でサーバーをたてるときに使われるApche HTTP Server 2.4をソースからのインストール方法を記す。

      基本的にソースコードをダウンロードしてコンパイルするだけで済むが,依存関係としてAPRとapr-utilが必要だ。これらがないとconfigureで以下のエラーが出る。

      checking for APR... no
      configure: error: APR not found. Please read the documentation.

      APRとapr-utilのソースをダウンロードして適切な場所に配置して,configureに--with-included-aprオプションをつけておけばおけば一緒にビルドしてくれる。

      参考:ガイド: Compiling and Installing - Apache HTTP Server Version 2.4 http://httpd.apache.org/docs/2.4/en/install.html

      これを踏まえるとインストールは以下のコマンドで完了する。

      VER=2.4.12
      cd ~/local/src
      wget -nc http://ftp.riken.jp/net/apache//httpd/httpd-$VER.tar.bz2
      tar jxf httpd-$VER.tar.bz2
      cd httpd-$VER

      cd srclib/
      wget -nc http://ftp.riken.jp/net/apache//apr/apr-1.5.2.tar.bz2
      tar jxf apr-1.5.2.tar.bz2
      mv apr-1.5.2 apr

      wget -nc http://ftp.riken.jp/net/apache//apr/apr-util-1.5.4.tar.bz2
      tar jxf apr-util-1.5.4.tar.bz2
      mv apr-util-1.5.4 apr-util

      cd ../
      ./configure --prefix=$HOME/local/apache2 --with-included-apr # default /usr/local/apache2
      make && make install

      今回はApacheを~/local/apache2にインストールした。

      以下のコマンドでApacheのサーバーを起動して動作を確認する。

      sudo ~/local/apache2/bin/apachectl -k start

      ブラウザでhttp://localhostのアドレスにアクセスして"It works!"と表示されれば成功だ。

      apachectlは管理者権限で実行しないと以下のエラーが出るので注意する。

      senooken% 0-0: ~/local/apache2/bin/apachectl -k start
      AH00558: httpd: Could not reliably determine the server's fully qualified domain
      name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this
      message
      (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
      (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
      no listening sockets available, shutting down
      AH00015: Unable to open logs

      参考:

      • 配布元: Download - The Apache HTTP Server Project http://httpd.apache.org/download.cgi#apache24
      • 自明かもしれない: Apache 2.4 系をソースからインストールします http://tt4cs.blogspot.jp/2013/01/apache-2.4-installation.htm

      nkfによる文字エンコーディング・改行コードのディレクトリ再帰的な一括変換

      $
      0
      0

      nkfコマンドを使って現在ディレクトリ以下のファイルを指定した文字エンコーディング・改行コードに一括変換する方法を記す。

      日本語のテキストファイルを扱っていると,Shift_JISやCP932,EUF-JPといった文字エンコーディングが混在していたり,改行コードにCR+LFが混ざっていたりして処理の問題となることがある。この問題を解消するためにディレクトリを再帰して全ファイルを指定した文字エンコーディング・改行コードに変換する。

      文字エンコーディングと改行コードの変換にはnkfを使用する。以下に示す通りfindコマンドで現在ディレクトリから再帰的にファイルを列挙してnkfで変換する。最も汎用性が高いのでこの方法がおそらくベストだ。

      find . -type f -exec nkf -w -Lu --overwrite {} \;

      この例では,文字エンコーディング:UTF-8,改行コード:LFとなるようにnkfの変換オプションを指定している。findコマンドのオプションの-nameなどでさらに変換対象を絞ることも可能だ。

      なお,処理対象ファイルが多い場合,以下に示すようにxargsコマンドで検索対象をnkfに引き渡したほうが処理を高速にできる。

      find . -type f | xargs nkf -w -Lu --overwrite {} \;

      また,zshとbash4以降で導入されたglobstarという機能を使えば,短く書ける。

      nkf -w -Lu --overwrite **/*.py

      特定ディレクトリやファイルを避けたければ以下のようにして除外する。

      nkf -w -Lu --overwrite **/!(.|..)

      しかし,globstarを使うやり方(**/*)だとディレクトリに対してnkfを実行することがありえ,.nkftmp*というような不要なファイルが生成されてしまう。したがって,最初に示したfindコマンドを使う方法がよい。

      参考:

      • nkfを使って、ディレクトリ以下のファイルを「EUC-JP」⇒「UTF-8」に一括変換する。 - カサヒラボ http://d.hatena.ne.jp/kasahi/20070926/1190833699
      • 文字コードの変換 – 片っ端からメモってみる http://www.parlia.net/weblog/post/722.html/

      Install Guest Additions for CentOS 7 on VirtualBox 4.3.12

      $
      0
      0

      VirtualBox4.3.12にCentOS7をインストールしたが,Guest Additionsをインストールできなかった。この解決策を記す。

      VirtualBoxで仮想化により別のOSを使うとき,Guest Addtionsを一緒にインストールするとクリップボードのやりとりやマウスポインタの統合,フルスクリーンにでき便利だ。Guest Additionsのインストール手順は以下のサイトなどで解説されている。

      VirtualBox環境構築:CentOS - Guest Additions導入 http://nextindex.s141.xrea.com/virtualbox/centos_GuestAddition.html

      Guest Additionsのインストールに必要なパッケージは以下のコマンドでインストールできる。カーネルの更新が必要なので最後にPCを再起動している。

      sudo yum update
      sudo yum -y install gcc make kernel kernel-dev
      sudo shutdown -r now

      VirtualBoxのメニューからデバイス▷Guest AdditionsのCDイメージを挿入からGuest Additionsのインストールプログラムを実行すると以下のエラーが出る。

      cd /run/media/senooken/VBoxGuestAdditions-4.3.12
      sudo ./VBoxLinuxAddtions.run
        Building the main Guest Additions module                   [FAILED]
      (Look at /var/log/vboxadd-install.log to find out what went wrong)

      示されているとおりに/var/log/vboxadd-install.logを見ると以下のエラーメッセージが出ている。

      /tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.c:1542:26: error: 'struct mm_struct' has no member named 'numa_next_reset'
                       pTask->mm->numa_next_reset = jiffies + 0x7fffffffffffffffUL;
                                ^
      make[2]: *** [/tmp/vbox.0/r0drv/linux/memobj-r0drv-linux.o] Error 1
      make[1]: *** [_module_/tmp/vbox.0] Error 2

      この現象は例えば以下のサイトでも報告されている。

      ぷにおちゃん ~ CentOS 7でVBoxGuestAdd-inが失敗した時の対処方法 http://punio.org/blog/201408041942VVAW.html

      Ubuntu 14.04ではこのエラーは出なかったのでCentOS 7特有の現象と考えられる。対処方法は以下のサイトで解説されている。

      密かなITエンジニアの備忘録:VirtualBoxにCentOS7をインストールする http://blog.livedoor.jp/yoka3/archives/16042340.html

      memobj-r0drv-linux.cのソースコードを修正してやる。

      cd /opt/VBoxGuestAdditions-4.3.12/src/vboxguest-4.3.12/vboxguest/r0drv/linux
      sudo vi memobj-r0drv-linux.c

        1536, 1541行目
         変更前 ~ KERNEL_VERSION(3, 13, 0)
         変更後 ~ KERNEL_VERSION(3, 10, 0)

      変更後以下のコマンドを実行することでGuest Additionをインストールできる。

      sudo /etc/init.d/vboxadd setup

      なお、ここでまたsudo ./VBoxLinuxAdditions.runを実行してしまうと、memobj-r0drv-linux.cが修正前の状態に戻ってしまうので要注意。最後に再起動すればGuest Addtionsのインストールは完了。

      これでVirtualBox上にCentOS 7をインストールし,Guest Addtionsによりマウスの統合やフルスクリーンにでき快適になった。

      なお,このインストールでOpenGL関係のビルドはエラーとなるかもしれないが,特に困らないので今回は放置する。

      Solution of "Requires installation of untrusted packages" for updating Ubuntu package

      $
      0
      0

      Software Updaterでインストールしたソフトをアップデートしようと[Install Now]を押下すると以下の画像のように「Requires installation of untrusted packages」というエラーがでてしまい,ここ何か月かUbuntu 14.04の更新を放置していた。

      おそらく外部リポジトリからインストールしたパッケージを更新しようとしてエラーになっているのだろう。

      いい加減更新したいなと思って少し考えた。とりあえず以下のように[Other updates]の☑を外して[Install Now]を押下するととりあえず進んだ。

      ひとまず標準のリポジトリからインストールしていたパッケージを更新できたのでよしとする。外部パッケージの更新はまた今度検討する。

      Management of empty directory for Git

      $
      0
      0

      Gitで空ディレクトリを管理する方法をまとめる。

      プロジェクトのディレクトリ構造を維持したり,一時ファイルの管理のために空ディレクトリをGitでも管理したいことがある。しかし,Gitではファイルのみが管理対象となるため空ディレクトリを管理できない。そのため,空ディレクトリの管理には何らかのファイルを配置して行う。

      配置するファイル内容により,空ディレクトリの管理方法には以下の2通りがある。

      1. 空ファイルの追加
      2. .gitignoreで指定

      空ファイルの追加

      管理したい空ディレクトリに空ファイルを追加して,トップディレクトリの.gitignoreでからファイル以外を無視する。空ファイルの名前はなんでもよく,とくに決まっていない。慣例として以下のどれかが使われているようだ。

      • .gitkeep
      • .gitignore
      • empty

      .gitkeepというファイル名がRails関係などでよく使われているらしい。.gitignoreだと本来の.gitignoreと役割を勘違いする可能性があるらしい。emptyだとわかりやすい。

      例:

      mkdir tmp
      touch tmp/empty
      git add tmp/empty
      利点
      • 無視ディレクトリだとわかりやすい。
      欠点
      • 空ディレクトリにファイルが追加される場合,上位の.gitignoreで追加されたファイルを無視する必要がある。

      例えば,以下のような.gitignoreを配置する必要がある。

      tmp/*
      !empty

      .gitignoreで指定

      空ディレクトリに以下の内容の.gitignoreを追加する。

      *
      !.gitignore
      利点
      • 上位の.gitignoreを気にしなくてよく,シンプル。
      欠点
      • 無視ディレクトリだと気づかれにくい。

      まとめ

      空ディレクトリの用途に合わせて,以下のように使い分けるといいようだ。

      • 空ファイルの追加:ソースコードなど,後から管理するファイルを追加する可能性があるとき
      • .gitignoreで指定:管理したくないキャッシュやログなどの一時ファイルを保持するとき

      この記事は以下の記事の内容を自分用に整理したものとなっている。

      参考:

      Gitで空フォルダを管理したいときemptyを使うか.gitignoreを使うか - なんたらノート第三期ベータ http://tanakahisateru.hatenablog.jp/entry/20120120/1327044729

      Install Fortran 90 POSIX API (Posix90 library)

      $
      0
      0

      Fortran 90のPOSIXのAPIをインストールして,OSにアクセスが必要なディレクトリ操作や正規表現をFotranからできるようにする。

      Introduction

      Fortranを使っていると,プログラム内でディレクトリの作成・削除・移動,正規表現を利用したいことがある。しかし,これらはOSへのアクセスが必要であり標準ではできない。system関数で外部コマンドを呼びだせば実現可能なこともある。しかし,以下2点の問題がある。

      • 外部コマンドで取得した値をプログラム内で値を直接利用できない。
      • OSごとにコマンドが異なるため移植性・汎用性に欠ける。

      外部コマンドで取得した値を利用する場合は中間ファイルを介せば理論的には可能だ。しかし,そのためだけにファイル読み書きのコードを書く必要があり冗長だ。ディレクトリを作成するmkdirコマンドに限れば,各OSに同名で存在するため利用可能だ。ただし,オプションはOSごとに異なるので使うと移植できない。例えば以下のようにして使う。

      call system("mkdir hoge")

      POSIX(Portable Operating System Interface)とは,UNIX系のOSでの最低限の共通APIの規格である。POSIXにアクセスすることでディレクトリ操作などをOSネイティブに実行できる。

      FortranにおけるPOSIXへのAPIはISOで標準化されている。

      IEEE  (1992) : IEEE Standard for InformationTechnology - POSIX(R) FORTRAN 77 Language Interfaces - Part 1: Binding for System Application Program Interface (API)       . http://standards.ieee.org/findstds/standard/1003.9-1992.html.

      具体的な自由な実装としては以下二つがある。

      FotranのPOSIXのモジュール
      名前バージョン最終更新日URL
      Posix901.1.1.12008-06-10http://savannah.nongnu.org/projects
      fortranposix0.1-12005-08-17http://sourceforge.net/projects/fortranposix

      Posix90のバージョンは以下のコマンドで確認した。

      cvs status -v

      Posix90のほうが新しく実装が充実している。また,fortranposixはうまくインストールできなかった。Posix90をインストールしてFotranでディレクトリ作成できるようにしてみる。インストール環境は以下に示したとおりだ。

      OS:Ubuntu 14.04

      Cコンパイラ:gcc 4.8.2

      Fortranコンパイラ:gfortran4.8.2

      Method

      コンパイルに先立って必要なパッケージをインストールしておく。

      sudo aptitude instal texinfo texlive texi2html cvs

      上記のPosix90の配布元のDownloadから辿れるバージョン0.4は古くてインストールできなかったので,CVSを使ってリポジトリから最新バージョンを入手する。

      cd ~/local/src
      cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/posix90 co .
      cd posix90
      # sed -i.back '5cPREFIX := ${HOME}/local/stow/posix90-1.1.1.1' Makefile
      vim Makefile # 5行目付近を修正
      PREFIX := ${HOME}/local/stow/posix90-1.1.1.1
      #PREFIX := /usr/local
      make

      makeを実行すると以下のエラーが出る。

      ./gpl.texi:305: This command can appear only outside of any environment, not in
      environment @enumerate.

      @badenverr ...temp , not @inenvironment @thisenv }

      @checkenv ...@ifx @thisenv @temp @else @badenverr
      @fi
      @sectionheading #1#2#3#4->{@checkenv {}
      @csname #2fonts@endcsname @rmisbold @...

      @\heading ...tionheading {#1}{sec}{Yomitfromtoc}{}
      @suppressfirstparagraphin...
      l.305 @heading NO WARRANTY

      ?

      qを入力してとりあえず抜ける。doc/gpl.texiの305行目が原因。

      @iftex
      @heading NO WARRANTY
      @end iftex

      enumerate環境の中に見出しである@headingコマンドを書いているためエラーとなっている。該当行をコメントアウトしてmakeし直す。

      sed -i.back '@comment @heading NO WARRANTY' doc/gpl.texi
      make
      make install
      cd ~/local/stow
      stow posix90-1.1.1.1

      これで~/local/にインストールされた。マニュアルを読めるようにINFOPATHを設定しておく。

      export INFOPATH=$HOME/local/info

      Test

      とりあえず動くかどうかテストしてみる。

      cd ~/temp
      echo '
      ! (File name: hi.f90) 現在位置にhi-dirというディレクトリを作成。
      use f90_unix_dir
      implicit none
      call mkdir("./hi-dir", 0) ! 第2引数でアクセス権などを指定
      end
      '> hi.f90

      Posix90のモジュールとライブラリを指定してコンパイルする。

      gfortran hi.f90 -I$HOME/local/f90/mod -L$HOME/local/lib -lposix90

      ソースコード(hi.f90)をライブラリなど(-I, -L)より先に指定しないとうまくコンパイルできないので注意する。

      コンパイルしてできたバイナリを以下のコマンドで実行するとhi-dirができる。

      ./a.out

      How to use

      すでにINFOPATHを設定しているので,以下のようにしてinfoコマンドでマニュアルを閲覧できる。

      info posix90

      ソースコードのディレクトリ(~/local/src/posix90/doc)にmake実行時にhtmlやpdf形式でのマニュアルも生成されている。

      配布元のソースコードリポジトリにtexi形式のマニュアルがある。

      [posix90] View of /posix90/doc/posix90.texi http://cvs.savannah.gnu.org/viewvc/posix90/doc/posix90.texi?root=posix90&view=markup

      ただ,配布元はtexi形式でしか公開されておらず利便性が悪い。インストール前にどういう関数があるか確認できたほうがよいと思う。そこで,posix90のmakeのときに生成されたhtmlやpdf形式のマニュアル類を以下で公開した。

      uploader/posix90 at master · lamsh/uploader https://github.com/lamsh/uploader/tree/master/posix90

      簡単にどういう関数があるか説明する。大まかに10種類のモジュールがある。

      個人的に特に有用だと思うのは4.1,4.2,4.8あたり。f90_unix_dirモジュールではディレクトリを作成したりできる。f90_unix_direntモジュールでは。ディレクトリ以下から順番にファイル名を取得できる。f90_unix_regexpでは正規表現を使えるようだ。4.3のf90_unix_envは環境変数を取得したりできるが,これはgfortranの組み込み関数として同等の関数が存在するので使わなくてもよいだろう。

      posix90モジュールを使うときは,hi.f90のように以下の手順を踏む。

      1. use文で該当する.modファイルを読み込む。
      2. call文でモジュールで定義されている関数を呼び出す。
      3. コンパイル時に.modファイルの場所とlibposix90.aのある場所を-I,-Lオプションで指定し,-lposix90を付与。

      関数の使い方については,マニュアルを参照すればよい。

      Conclusion

      記事の内容をまとめる。

      • Fortran90でPOSIXのAPIにアクセスしてOSの機能を利用できるPosix90ライブラリをインストールした。
      • ディレクトリを作るサンプルプログラムで動作を確認した。
      • マニュアルの場所と基本的な関数の説明,使用手順についてまとめた。

      Posix90ライブラリに関する情報はほとんどなかったので,参考になれば嬉しい。

      なお,このライブラリはUbuntuでしかビルドできなかった。けっこうな時間をかけてCygwinやMSYS2でのビルドも試してみたが,以下のようなエラーが出てしまい,どうにもできなかった。

      cc -g -fno-leading-underscore   -c -o f90_unix_signal_const.o f90_unix_signal_const.c^M
      f90_unix_signal_const.c: In function ‘main’:
      f90_unix_signal_const.c:43:51: error: ‘SIGIOT’ undeclared (first use in this nction)
      cc -g -fno-leading-underscore   -c -o f90_unix_env_const.o f90_unix_env_const.c
      f90_unix_env_const.c: In function 'main':
      f90_u
      nix_env_const.c:33:60: error: 'gid_t' undeclared (first use in this function)
      printf("integer, parameter :: GID_KIND = %d\n", sizeof(gid_t));

      とりあえず,Linux環境では動作すると思っておくとよいだろう。


      gfortran has no include and library path envrironmental variable

      $
      0
      0

      gfortranでコンパイル時にインクルードパスやライブラリを指定する環境変数がないか調べた。gfortranにはインクルードパスやライブラリパスの環境変数が存在しないことがわかった。

      Introduction

      Fortranの自由なコンパイラにはいくつかある。その中でも安定していて将来性があるのはgfortranだ。そのため,自分でFortranプログラムを作るときはgfortranでコンパイルする。しかし,Fortranには標準ライブラリがないため,以下のどちらかの方法をとるしかない。

      • 低レベルな演算から自分で実装
      • 外部ライブラリに頼る

      ある程度汎用的な演算などはモジュールやヘッダとしてまとめて使いまわせたほうが開発効率が高い。そのようにして分離されたモジュールやライブラリはコンパイル時にオプションでディレクトリを指定することで利用できる。しかし,コンパイルの度にいちいちディレクトリを指定するのは面倒だ。 Makefileに書き込んでおいてmakeでビルドする方法もある。大規模なプログラムならそれもありだが,たいした規模でないプログラムのためにいちいちMakefileを用意するのは煩雑だ。コマンドラインからコンパイルしたほうが楽だ。

      自由なC/C+コンパイラであるgccg++であれば,に示した環境変数でインクルードファイル(ヘッダファイル)とライブラリのパスを指定できる。

      GCCで使われるサーチパス環境変数
      環境変数説明
      CPATHC言語のヘッダファイルのサーチパス
      LD_LIBRARY_PATHライブラリのサーチパス

      gfortranもGCC(GNU Compiler Collection)の一部であるので同様の環境変数があってもおかしくない。そこで,これらの環境変数に該当するものがgfortranにもないか調査した。

      環境変数の調査

      調査にあたっては以下で公開されているGNU Fortranのマニュアルを参考にした。

      GCC online documentation - GNU Project - Free Software Foundation (FSF) https://gcc.gnu.org/onlinedocs/

      このgfortranのマニュアルの2.10 Environment Variables(https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Environment-Variables.html#Environment-Variables )でgfortranの環境変数について以下のように言及されている。

      The gfortran compiler currently does not make use of any environment variables to control its operation above and beyond those that affect the operation of gcc.

      See Environment Variables Affecting GCC, for information on environment variables.

      訳:gfortranは現在,上記(2.1~2.9節のコマンドオプション)とgccの動作に影響するものを超えて,動作を制御するために環境変数を使わない。

      つまり,gfortranはコンパイラの動作の制御に環境変数を使わないようだ。次の3節にTMPDIRや既定の標準入力,出力,エラー出力の番号など実行時の環境変数が掲載されている。しかし,インクルードファイルやライブラリへのパスの環境変数は本当に存在しないようだ。

      Runtime - The GNU Fortran Compiler https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Runtime.html#Runtime

      ちなみにIntel Fortran Compiler(ifort)など不自由なコンパイラなどではFPATHLD_LIBRARY_PATHなどでインクルードパスなどが実装されているようだ。

      参考:https://software.intel.com/sites/default/files/m/f/8/5/8/0/6366-ifort.txt

      個人的にはLD_LIBRARY_PATHであれば共通で使えるのではないかと思っていたが,無理のようで残念だ。自分でもINCLUDE変数などにパスを設定しコンパイルできるか試したが無理だった。

      以上のことから,gfortranで外部ライブラリやモジュールを取り込む場合は面倒だがコンパイル時にフルパスで指定する必要がある。

      コマンドラインからの実行

      コンパイルオプションにより,インクルードやライブラリへのパスの指定方法は以下で説明されている。内容をにまとめた。

      Directory Options - The GNU Fortran Compiler https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gfortran/Directory-Options.html#Directory-Options

      gfortranでのコンパイル時のパス設定
      オプション説明
      -I[dir] USE文(.modファイル)とINCLUDE文(.h,.f90ファイル)の検索ディレクトリ。
      -J[dir].modファイルの検索ディレクトリ。既定はカレントディレクトリ。
      -L[dir]ライブラリの検索ディレクトリ。
      -l[lib]ライブラリ(lib[lib].aなどの形式のファイル)名の指定。

      この表の内容から,基本的には以下の書式でコンパイルすることになる。

      gfortran [source1.f90 ... sourceN.f90]  -I/path/to/include -L/path/to/lib -l[lib]

      例:

      gfortran hi.f90 -I$HOME/local/f90/mod -L$HOME/local/lib -lposix90

      この-I以降や-L以降にうまくCPATHLD_LIBRARY_PATHを当てて以下のようにできないか試してみた。

      gfortran hi.f90 -I$CPATH -L$LD_LIBRARY_PATH -lposix90

      うまくいかない。通常,CPATHLD_LIBRARY_PATHには複数のパスを:で区切って格納している。この:が原因でうまくパスが認識されない。複数のディレクトリを指定するときは確実にひとつずつ-I/path/to/include1 -I/path/to/include2 -L/path/to/libのように-Iや-Lを付けないと認識されない

      私は$HOME/local/{include,lib}に,自分でインストールしたライブラリやインクルードを格納している。なので,LD_LIBRARY_PATHなども共通で使えたほうが忘れる心配がない。どうにかしてこれらの変数を使えないか試行錯誤した。その結果以下のようにすればCPATHLD_LIBRARY_PATHを使ってコンパイルできた。

      style="font-family: Inconsolata,"Migu 1M",monospace;"># bash
      gfortran hi.f90 -I${CPATH//:/ -I/} -L${LD_LIBRARY_PATH//:/ -L/} -lposix90
      # zsh
      gfortran hi.f90 -I${=CPATH//:/ -I/} -L${=LD_LIBRARY_PATH//:/ -L/} -lposix90

      ここではCPATHLD_LIBRARY_PATHに含まれている:を全て -Iで置換している。zshだと空白も文字として扱われるので変数展開により対処している。これにより共通のCPATHLD_LIBRARY_PATHをうまく使ってコンパイルできる。

      ただ,相変わらず面倒なことに変わりはない。ifortと同様にFPATH変数にFortranのインクルードやmodファイルのディレクトリを指定してコンパイル時にその都度指定したほうがわかりやすいだろう。

      export FPATH=$HOME/local/f90/mod
      gfortran hi.f90 -I$FPATH

      Conclusion

      今回の調査内容を以下にまとめた。

      • gfortranでインクルードファイルやライブラリのサーチパス変数がないか調べた。
      • gfortranのマニュアルからgfortranにはサーチパス変数が存在しないことがわかった。
      • 代替案として,以下二つの方法を示した。
        • CPATHLD_LIBRARY_PATHを展開して使う方法。
        • FPATH変数にインクルードファイルのディレクトリを指定して利用。

      結論としては,gfortranにはサーチパス変数がないということであまりたいした成果はなかった。しかし,Fortranについてはネット上での情報が不足しているので,こうした情報も役に立つのではないかと考える。

      現実的にはFPATH変数に自分のFortranモジュールの格納先を指定してコンパイル時に-I$FPATHで指定するのがよいだろう。

      京都市「動物による迷惑の防止に関する条例」へのパブリックコメントのお願い

      $
      0
      0
      動物愛護の人からメールが来た。京都市が1/14水締め切りで動物愛護関係条例のパブリックコメントを募集しているらしい。

      この条例がそのまま施行されると,個人の動物愛護活動(餌の給餌・後片付け)が違法になり罰則が課せられてしまう。3世帯で活動団体を作るのはめちゃくちゃ難しい。自分のことしか考えられない人に動物愛護の協力は要請できない。こちらから協力を要請するのは本当に難しい。

      僕の家では猫を8匹飼っていて,お母さんが近所の人に責められているのを見てきた。
      野良猫は助けてあげないと餓死するしかない。だけど,助けた人は周りから責められる。なにか間違っている。動物を見殺しにした人が楽をして,助けた人が責められている。

      数多くの意見が必要です。意見を書くのが難しければ,最後の参考意見のコピペや一部改変しても構わないので送付をお願いします。
      動物愛護の人の中には動物愛護に詳しい弁護士さんもいるので,この参考意見はたぶんまともなものだと思う。

      僕は参考意見をまるまるコピペして送付した。匿名なので誰が送っても大丈夫です。
      こういうのは数が大事。意見がなければ無視されて現行で通ってしまう。
      ご協力をお願いします…。

      以下はメールの転載です。以下のメールの内容は転載・拡散大歓迎です。

      ****
      京都市「動物による迷惑の防止に関する条例」の施行に向けて
      今 パブリックコメントを募集しています。
      「野良猫に餌をやろうとする人は自ら飼養するか、または 「まちねこ支援活動事業」
      に沿って、適切な管理の下に実施すること」  と記載されており、

      「身近にいる動物に対し、無責任な給餌(餌やり)をしたり、残飯ごみを
      放置したりしてはならない」
      これに違反すれば 勧告・命令・過料  にしようとしています。

      問題は、

      *無責任な給餌= 自ら飼養しない、「まちねこ」以外への給餌*
      とみなされ、これ以外の給餌はたとえ避妊・去勢手術をして餌の後片付け
      している(可能な場合は排泄物の処理努力をされている)場合も違反となり、
      過料の対象となりえることです。

      「まちねこ」にするには、
      ・町内で2~3名の活動団体をつくる
      ・町内会の同意を得る
      ・猫の管理方法を決める(猫用のトイレの設置など)

      で、現時点ではまだまだハードルが高く、実施が容易ではありません。

      意見提出は↓のフォームより
      概要は↓


      参考意見**ココから**

      (意見)可能な限り猫を自ら飼養頂くか、又は出来る限りまちねこ活動支援事業に沿う
      (背景)諸事情により自宅に連れ帰れない場合も多いことから「可能な限り」を挿入。又、町内会の同意を得ることが難しい場合も多いため「できる限り」を挿入。

      (意見)無責任な給餌及び残飯ごみの放置について定義の設定
      (背景)無責任な給餌及び残飯ごみの放置についても定義を設定することで、まちねこ活動及び適正な地域猫活動に取り組みやすくなる。定義は以下の通り。
      a.残飯ごみを3時間以上放置している。
      b.年齢や健康面で問題が無い猫に避妊・去勢を行っていない、又は行う努力をしていない。
      c.トイレ設置や排泄物の掃除を行うなどの糞尿処理の努力を怠っている。

      (補足)
      1. 糞尿被害については、生物の排泄の回数や場所を100%コントロールするのは不可能で、糞尿への苦情だけで給餌中止を条例化するのは人道的な見地から問題があるため努力義務が適当である。この問題については、繁殖制限+適正な飼育により野良猫の数を減らすことしか平和裏な解決策はない。そこで、以下のような行政の取組みを加えて提案する。

      a.避妊・去勢を行わずに給餌をしている人へ、施術するように説得する。
      b.まちねこ活動支援事業の拡大に積極的に介入する。具体的には、野良猫の苦情が出た地域で、まちねこ活動が行われるように行政側が話し合いの場を設けたり、会合に出席して活動の意義を伝えたりなど。
      c.糞尿被害の苦情のあった地域で、トイレを設置することを地域住民に働きかける。

      2.条例を制定することで、現在進行している市民活動自体が阻害されることを危惧する。
      まちねこ活動支援事業は画期的な取り組みで評価に値する。一方事業開始前から多くの個人が自己負担で避妊・去勢を行い適正な給餌(地域猫活動)を続けており、こういった市民活動が引取り数、ひいては猫の糞尿被害苦情件数の減少に貢献していることもゆるぎない事実である。野良猫を全て「まちねこ」にすることが理想だがまだ時間がかかるため、条例が「まちねこ」以外の給餌を全面的に中止するような内容であれば非常に取組みにくいものになる。また、給餌中止により餓死したりゴミをあさる猫が増え、大変不衛生な状態が起こることが考えられる。これでは京都動物愛護憲章で冒頭に謳われている「動物を思いやりましょう。」スローガンとは大きく乖離する。

      ココまで***

      参加メモ:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~

      $
      0
      0
      以下のイベントに参加した。まとまりはないが,なんかの参考になると思ってそのときのメモを列挙する。
      イベント名:「並列Fortranの現状と展望」~Fortranは絶滅危惧種なのか?~
      URL:http://site.hpfpc.org/home/events/parallel_fortran_sympo
      日付:2015-08-18
      参加者:80人くらい。

      関連ツイート:https://twitter.com/senopen/status/633608746413899776

      目次
      1. 並列Fortranの歴史と現状
        1. 初期
        2. 中期
        3. 今後
        4. 質疑
      2. Fortran規格の歴史
      3. エクサスケール時代の Fortran の役割
      4. 航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について
      5. 核融合プラズマ・シミュレーションでの Fortran での活用
      6. 大学のSX利用者から見たFortranプログラミング
      7. 富士通のFortranへの取り組み
      8. NECのFortranへの取り組み
      9. 計算機システムの進化とFortranの将来
      10. インテルのFortranへの取り組み
      11. XMP
      12. ディスカッション
      13. 懇親会


      並列Fortranの歴史と現状

      初期

      • FORTRAN77
      • PCF Fortran

      共有メモリ向け。

      PCF Fortran-77(1987)

      OpenMPと比べて流行らなかった。


      分散向け。
      • いろんなベンダが実装。

      NWT Fortran

      Numerical Wind Tunnel:数値風洞。

      解きたい問題があってできた。Navie-Stokes/ADI法。

      ベンダがいろいろ作ったけど何一つ残らなかった。標準でなければ普及しない。


      中期

      Fortran90革命。

      今まではCの部分集合だった。

      • 形状を持つ。
      • 部分配列。

      配列演算は並列性がしやすい。

      これを背景に出来たのが,HPF(High Performance Fortran)。

      HPF1.0(1993)

      HPF2.0(1997):ベンダのエゴで派生いろいろ。

      2007年。

      ユーザーの失望。

      高性能とポータビリティは用意に得られない。ベンダ独自実装になるしかない。

      HPFに関する取り組み。
      JAHPF。
      • 言語仕様の検討。
      • ユーザーの自動化への拡張機能


      HPFは腐ってもタイ。

      FortranができないとHPFもできない。

      OpenMP:唯一成功している並列Fortran/C。

      トレンドをおっている。

      今後

      PGAS:Partitioned Global Address Space。

      Coarray Fortran:Fortran2008の実装。



      質疑

      • HPFの失敗の一つはコンパイラに要求しすぎたのでは。OpenMPは最小限。
        • OpenMPは作りながらできた。HPFはできないから仕様を付け足してやろうとしている。
        • OpenMPは最初から共有メモリだからうまくいった。HPFは分散メモリだから難しかった。


      Fortran規格の歴史

      江戸川大学。

      Coarrayの話はしない。

      Fortranの関わりはここ3年くらいの課題のため。

      国際会議の規格にはでているが,普段の生活ではFortranとかかわりない。

      1986:岩波FORTRAN辞典。FORTRAN77の仕様について書かれたもの。歴史とかを書いたもの。

      1988:国際会議に出席。日本の規格を国際規格に盛り込もうと。

      1993:詳解Fortran90。規格について詳しくわかりやすく書いてある本。の翻訳本。


      なぜFortranが初期の言語で生き残ったか(FORTRAN辞典)。

      • キーワードの冗長性など,言語の設計が的確だった。
      • コンパイラの最適化が極めて強力だった。
      • IBMがソフトウェアを重視した。
      • IBMとIBM 704が商業的に成功した。


      古典的FORTRAN規格。

      FORTRAN 66:ANSI規格。

      賛成が足りなくて国際規格にはならなかった。推進規格となった。

      FORTRAN 77:77はドキュメント番号。77年にできたからじゃないらしい。77が決まってからあとづけで66ができた。

      Fortran 90:90の必要性が理解されるか心配だった。

      Fortran 95:アメリカ規格は作らなくなった。国際規格をアメリカ規格とすればよいという国の方針が変わった。国際規格に注力しようと。

      90とか95は適当に選んだわけではなく,その年に仕様がほぼ決まったから。今までは適当だった。


      現在のFortran規格

      Fortran 2003:国際規格は既に廃止されて2008が最新。

      2009年にJISが2003。

      2008は2013年にJISになるかも。JISにする必要があるかどうか。

      Fortran 2015:既に2018年にできる。予定は決まっている。

      次の規格がでるときに一個前のJISを出しては混乱する。Fortranの翻訳したJISが必要と委員会で合意。


      規格の開発母体の変遷。

      ANSI X3.4.3

      ANSI X3J3

      NCITS/J3

      INCITS/J3(National Commitie )

      INCITS/PL22.3(PL:プログラミング言語。)

      Jがプログラミング言語というのはわかりにくいので変更。


      国際規格の委員会。

      ISO

      IEC 国際電気標準会議

      情報関係はISO/IEC合同で出している。


      ISO/IEC JTC1 情報技術の標準化を担う Joint Techinikacl COmmittee

      ISO/IEC JTC 1/SC 22 言語やOSの標準化を担うSub Commitete

      ISO/IEC JTC 1/SC 22/WG 5 Fortranの標準化を担うWG。

      メンバー国からの個人メンバー。


      国際規格の開発フェーズ

      NP()New work item protoposal

      WD (Working Draft) WG5レベル

      CD(Commitee draft)投票 SC22レベル

      DIS(


      各Fortran規格の性質

      Fortran90の主な特徴。

      もともと1982年くらいにつくるつもりだったが,13年もかかった。大改定。

      • 革新/慣習
      • 小さく単純/大きく協力
      • 廃止の容認


      90後の工夫。

      列車方式の採択。

      5年ごとに改正規格。間に合ったものをのせる。▷95

      列車に間に合わないが,急ぐものはTRとして別途開発。

      95:FORALLでHPF対応。

      Q&A

      実ユーザーの声が届いていないのでは?



      エクサスケール時代の Fortran の役割

      略歴:

      • Fortran 77のコンパイラを並列処理用に作成
      • Fortran 77のOpenMP Omni OpenMP
      • XMP作っている。

      Fortranは絶滅危惧種か

      Yes。

      ACM SIGPLAN。

      少なくともベスト10にはない。Lispよりも下。

      しかし,京のアプリはほとんどがFortran


      Fortranである理由

      • 昔からのコードがFortranだった。
      • Fortranのコンパイラがいい。
        • C++が増えている。

      Fortranは高級言語。

      C(低級言語)の宣言は,サイズを指定する。

      double A[100];

      Fortranの宣言は範囲を指定。

      エクサスケールに向けたトレンド。

      • 高レベルの記述。
        • 並列性の記述
        • フレームワーク化。
      • 高スケーラビリティ
        • 大規模。数万ノード,数百万コア。

      言語に求める機能:

      • 通信機能,PGAS
      • 同期のrelaxation


      Fortranのこれからの役割。

      以前のコードを引き継ぎ

      • FORTRAN 77 + allocatable

      Fortranが早いという伝説。

      コードを書いてMPIでつなぐにはFortran(C,...)+MPIが残る。

      • 高レベルな記述
        • もっとユーザーが使わないと成熟しない。
        • 高レベルでかいてくれないと並列解析できない。

      C++のテンプレートでも書けるけど,Fortranは言語仕様にはいっている。

      • PGAS,通信機能。

      言語機能として配列がはいっているのが,Fortranは数値演算の分野でもいいのではないか?


      質疑

      チューニングするときに,配列演算はDOループに直したりする。

      昔のFORTRANは静的なので最適化しやすかった。動的になったらFORTRANじゃない?



      航空宇宙技術研究所から宇宙航空研究開発機構にかけてのソフトウェア開発について

      航空機周りの空気の流れのシミュレーション。

      • 市販ソフトがない
      • 外注は資金面の問題。

      この人の意見。

      • 素直なプログラムならFORTRAN
      • 非構造などはCの構造体のほうが有利

      Fortranは数学に近い。

      Cは変数名が値を指したり,入れ物を指したり。

      核融合プラズマ・シミュレーションでの Fortran での活用

      アンケート

      Fortran,C/C++,Python

      用途:

      • 大規模数値計算
      • 数値計算
      • 数値データ解析

      Fortranを使う理由・使わない

      • 周りが使っている
      • 過去の遺産
      • 簡単
      • 他を知らない。


      • 必要を感じない。
      • I/Oが不便
      • Fortranがつかえても開発現場でつかえない


      大学のSX利用者から見たFortranプログラミング


      1. 教育現場でのFortran

      制御はCでやっている。

      国会図書館で検索すると面白い結果。

      2000年入ったところで,情報処理試験の科目から外れた。ので本が数年なかった。


      研究は過去の積み重ねだから。Fortranを使うしかない。

      新しく始めるならCもあり。C++は速度が出にくいらしい。


      質疑:

      • 昔はFortranしかなかったのでFortranを全員に教えていた。教育としては,今はいろんなのがあるからFortranである必要がない。
      • 研究としては,Fortranは必要な人がやればいい。研究で過去の引き継ぎで必要ならいるかな。
      • SX-ACEでの性能は,FortranとCと同じ。
      • Fortranで教えるメリットはなんだろう。こういう議論が必要かな。
        • FortranはポインタがないのでCより楽。
        • 宣言しないといけないかな。


      富士通のFortranへの取り組み

      富士通Fortranの歴史=スパコンの歴史

      HPCに求められること:超高速計算

      • 数万プロセス動作
      • キャッシュ利用効率

      なぜFortran使うか?

      • 既存資産がFortran
      • 数学ライブラリが充実

      目的を早く実現するためにFortran。

      開発コスト・保守コスト・拡張性を犠牲にして,性能を追求したのがFortran。


      NECのFortranへの取り組み

      コンパイラ開発者視点での利点。

      FortranもCもコンパイラの最適化は同じ。言語自体はない。

      同じ最適化はできる。あとは,書き方の問題。

      Fortranの場合はあまり意識しなくていい。

      意識すればCでも回避可能。

      引数チェックとか。

      Fortranもモダンな機能を使うとCと同じような感じになってしまうかも。


      計算機システムの進化とFortranの将来

      今後

      バックエンドとしてFortranを使う。

      フロントなどの入出力はCとかJavaでやってしまうとか。


      質疑:

      • CとFortranでの速度差。
        • パラメーターの受け渡しの言語仕様間。
        • ポインタの別名解析をちゃんとやるかどうかでループで差が出る。
        • restrictキーワードをつけると同じ性能が出る。


      インテルのFortranへの取り組み

      コンパイラ開発者は不参加。開発者にいくつか質問をしてそれの回答という内容の発表だった。

      世界で一番Fortranを使っているのは日本。

      質疑

      • Cの数学関数が充実。Cのlong doubleみたいなのあるか?これがないために精度的になくなくCで書いている。
        • ない。
      • Macでifortは数学関数がない。coarrayがない。
        • Mac版は機能が遅れている。


      XMP

      質疑

      • MPIと比べて劣る点があるのか。
        • グローバルビューでは,非構造格子になると難しい。そのためにローカルビューがある。
      • Omni XMPが吐き出すソースコードは見てわかるのか?
        • 一応わかるけど,ここを触るのはやめたほうがいい。

      ディスカッション


      • 便利な機能が使われて役立っているのか?コードを維持して少しずつよくするのがいいのか。維持するだけなら進化は不要。
        • HPFしようとするとFortran90にしないといけない。Fortran77だと最新の機能はつかえない。ただし,2003以降はいらない。
        • staticからallocatableになったのはいい。
        • でも2003以降で使わない機能が入ってコンパイラが遅れるのはよくない。coarrayを使って正しい機能でやっていけばいいと思う。
        • HPFを求めず,あまり進化を求めないのがいいのではないか。
      • スパコン前提の話があった。貧乏人はGPUを使うしかない。GPUの登場でCになった。CUDA Fortranは使いにくい。オブジェクト指向もいいよ。FORTRANが廃れたのは77が読みにくい。Cが好きだけどFortran滅べばいい。とかある。保守しにくい。汚いところは見せないほうがいい。だからオブジェクト指向がいる。しかし,速度が落ちる。C++なら一時オブジェクトを作らないやり方がある。Fortranにはない。20倍くらい遅くなる。どうせ数値計算しかないのだから,コンパイラ側がしっかり解析でやってほしい。
      • FORTRAN77で複雑な計算をやれというのは厳しい。90で入った構造体とかつかえれたらいい。なくてもできるけど。これがつかえないと複雑な現象を記述できない。
      • 規格の委員会でもいろいろ議論あるのだけど,ベンダー中心でやっている中でユーザーがいて,こういう議論もあった。期待してもいい。
      • 2003は派生型にいろいろ種別を入れて,ここのベンダーの実装がたいへんそう。提供する予定のないベンダーもいる。

      懇親会

      • なぜFortranの規格ではC言語との連携についてあるか?
        • 生き残りのため。FortranからC言語を使いたい・逆の要望があった。
      • Fortranが使える場面が少ない。Cのほうが汎用性が高い。
        • 77の頃は汎用性があった。しかし,90が出るまで時間がかかりすぎた。90がもっと早く出てきたら汎用的な言語になったかもしれない。でもC言語がでてきて無理になった。分野に特化するという方針になった。
        • Fortranとは何かという議論があったが,こうだと思う。「過去のいい意味で保守的で,必要なものを先取りするところ。」

      Google日本語入力(Mozc)のIME設定をWindows・Linux・Androidで同期

      $
      0
      0

      Google日本語入力(LinuxはMozc。以下ではmozcと表記)でWindowsとLinuxでIMEの設定を同期する。

      複数のPC・OSを使っていてIMEの設定(特にユーザー辞書)を共有したかった。ユーザー辞書には例えば,以下のような単語を登録をしている。

      • 「よろ」→「よろしくお願いいたします。」
      • 「2」→「²」

      これが使えれば日常での文章作成が早くなる。

      mozcには標準でユーザー辞書をインポート・エクスポートする機能がある。今まではこの機能で辞書ごとにテキストファイルに出力して更新のたびに各端末の辞書を手動で更新していた。しかし,わずかな変更に対しても全端末のユーザー辞書を手動で更新するのはかなり面倒だった。これを回避するには,IMEの設定をまるごと自動で同期する必要があった。

      mozcはOSごとに1 のディレクトリに設定ファイルが格納されている。この設定ディレクトリをまるごとDropboxなどで共有して,元の場所にシンボリックリンクを貼ることで複数端末でIMEの設定を共有できる。

      mozcの設定ファイルの格納ディレクトリ
      OS場所
      Linux$HOME/.mozc/
      Windows%USERPROFIKE%\AppData\LocalLow\Google\Google Japanese Input\
      Android/data/data/com.google.android.inputmethod.japanese/.mozc/

      mozcの設定ファイルの格納ディレクトリには2に示す設定ファイルが存在する。これらのファイルを同期すれば項目を絞って同期することも可能となる。ユーザー辞書が格納されているuser_dictionary.dbは特に重要度が高い。

      mozcの設定ファイル
      ファイル名説明
      boundary.db
      cform.db
      config1.db[Mozc Tool]の[Configuration Tool]で設定できるキーマップや記号類の既定の変換などの基本設定。
      segment.db
      user_dictionary.dbユーザー辞書。

      設定ファイルの格納ディレクトリにquery_of_death.logという12 MBほどのファイルがあったが,このファイルは削除しても大丈夫だった。上記の設定ファイル群についてはGoogleのフォーラムで以下のような言及があり判明した。

      • boundary.db
      • cform.db
      • config1.db
      • segment.db
      • user_dictionary.db


      の各ファイルをコピーすれば、学習結果、ユーザ辞書、半角・全角の学習結果は移行されます。ただし、変換エンジンが動作してる時に、コピーすることを想定していないので、コピーする前に変換エンジンのプロセス (GoogleJaIMEConverter.exe) を終了しておく必要があります。(タスクマネージャからプロセスを終了してください)

       Google日本語入力のオフィシャルな移行について - Google プロダクト フォーラム https://productforums.google.com/forum/#!topic/ime-ja/ut-s3UFrO88

      上記コメントにもあるようにIMEの設定の共有は以下の手順で行う。

      1. 共有化したい大元とする端末で作業を開始。
      2. Mozc(Google日本語入力)のプロセスを終了。
        • Linuxの場合,fcitxmozc_serverを終了させる。
      3. mozcの設定ファイルの格納ディレクトリをDropboxなどに移動。
      4. 元あった場所に3.で異動させたディレクトリへのシンボリックリンクを貼る。
      5. mozcを起動する。
        • Linuxの場合,fcitxコマンドで起動できる。
      6. 同期させたい前端末で1-5まで実行(3.は異動させる代わりに削除でOK)。

      なお,Google日本語入力(Windows,Android)とMozc(Linux)は共通の設定ファイルが使えるとのことなので,上記手順によりWindows,Android,Linuxの複数OSでIMEの設定を共有できるようだ。Androidに関しては未確認なのでいずれ試してみたい。

      参考:

      • Android版Google日本語入力とWin/Mac版Google日本語入力で辞書同期したい! STERS's Development Room http://stersblog.blog15.fc2.com/blog-entry-443.html
      • mozcの辞書を同期したいが良い方法はないものか? | BoozerBlog http://www.igune.com/20130107/1746-46/

      やっぱり通信が気になるので,必要な以下2ファイルだけを個別にシンボリックリンクで同期する。

      • user_dictionary.db
      • config1.db

      Solution of "Running in software rendering mode" on Linux mint 17.2 Cinnamon

      $
      0
      0

      Linux Mintを起動すると以下のウィンドウが画面右上端に出てくる。

      テキストに起こすと以下の内容となる。

      Running in software rendering mode

      Cinnamon is currently running without video hardware acceleration and, as aresult you may observe much higher than normal CPU usage.

      There could be a problem with our drivers or some other issue. For the best experience, it is recommended that you only use this mode for troubleshooting purposes.

      なんか無駄にCPU使っているみたい。画面解像度の設定とかGRUBの設定とかデスクトップ環境を変更してみたりしたけど,関係なかった。以下の画像のように一旦ログアウトしてデスクトップにCinamon (Sotfware Rendering)を選択すれば解決した。


      以下の情報を参考にやってみたけどどれも関係無かった。単にログアウトしてデスクトップ環境を選びなおしてログインしなおせばOK。

      [SOLVED] Linux Mint 17 Qiana running in software rendering mode http://www.linuxquestions.org/questions/linux-virtualization-and-cloud-90/linux-mint-17-qiana-running-in-software-rendering-mode-4175525680/

      From Driver Manager, install fglrx-updates
      From terminal windLinux Debian and Mint Cinnamon: running in software rendering mode | TheHyperlink.net http://www.thehyperlink.net/linux-debian-and-mint-cinnamon-running-software-rendering-modeow

       sudo aticonfig --install

      cinnamonが動かなくなった。

      Linux Debian and Mint Cinnamon: running in software rendering mode | TheHyperlink.net http://www.thehyperlink.net/linux-debian-and-mint-cinnamon-running-software-rendering-mode

      apt-get install linux-firmware-nonfree libgl1-mesa-dri xserver-xorg-video-ati

      Linux Mint Cinnamon 17 Graphic Card Issue | Parallels Forums https://forum.parallels.com/threads/linux-mint-cinnamon-17-graphic-card-issue.314215/

      解像度を変える?

      1366x768 dot

      linux (hd2,gpt5)/boot/vmlinuz-3.13-xxxx root=/dev/mmcblk0p5 video=VGA-1:1366x768e reboot=pci,force

      Cinnamon running in software rendering mode while Unity and Gnome work fine - Ask Ubuntu http://askubuntu.com/questions/391238/cinnamon-running-in-software-rendering-mode-while-unity-and-gnome-work-fine

      Turn off bluetooth on Linux by defalut

      $
      0
      0

      ノートPCのLinuxは起動すると既定でBluetoothを有効にするようだ。Bluetoothは基本的に使っていない。電池がもったいないので起動時に既定(起動時,スタートアップ時)でオフとなるように設定したいので方法を調べた。Linux Mint 17.2 Cinnamonで試した。

      成功例

      うまくいったのは以下の/etc/rc.localに設定する方法だけだった。

      方法:/etc/rc.local

      sudo sed -i "s/^exit 0/rfkill block bluetooth\nexit 0/" /etc/rc.local

      この方法だとPC起動時にbluetoothは無効になる。しかし,有効にするには設定ファイルで追記したrfkill block bluetoothを削除して再起動する必要がある。今回試した中ではこの方法しか起動時にbluetoothをオフにする方法がなかったので採用する。この方法はいろんなLinuxで有効な方法らしい。

      失敗例

      その他にPC起動時にbluetoothをオフにする方法として以下を試した。結果は全て失敗だった。どの方法を試してもPC起動時にbluetoothがオフになっていなかった。参考までに手順を示す。

      方法:/etc/bluetooth/main.conf

      sudo sed -i "s/InitiallyPowered = true/InitiallyPowered = false/" /etc/bluetooth/main.conf

      この方法はうまくいかないことがある。

      方法:/etc/modprobe.d/blacklist.conf

      sudo sh -c "echo blacklist btusb">> /etc/modprobe.d/blacklist.conf

      # 有効にしたいとき
      sudo modprobe btusb

      方法:ノートPCにThinkPadを使っている場合

      echo disable > /proc/acpi/ibm/bluetooth

      方法:sysv-rc-conf

      sudo apt-get install sysv-rc-conf
      sudo sysv-rc-conf bluetooth off

      参考情報

      最初のAsk Ubuntuのページにひと通りの手順が書いてあり,とても参考になった。

      • How can I deactivate Bluetooth on system startup? - Ask Ubuntu http://askubuntu.com/questions/67758/how-can-i-deactivate-bluetooth-on-system-startup
      • いつか、そのとき、あの場所で。 | 【Ubuntu】【自分用メモ】 bluetoothの起動時からの無効化設定について。 http://kometchtech.blog.fc2.com/blog-entry-939.html
      • nambei-x's blog: Ubuntu各種設定 sysv-rc-conf http://nambei-x.seesaa.net/article/140224277.html

      HTMLの空要素にはXHTMLとEPUB3との互換性維持のため閉じスラッシュをつけるべき

      $
      0
      0

      HTMLでmetaタグやlinkタグなどのタグの中身を持たない空要素に終端スラッシュを付けるべきかどうか悩んだ。調べた結果,付けるべきだという結論が出た。その理由は以下だ。

      • EPUB3とXHTMLとの互換性維持。
      • 要素が空要素であり,終了タグが不要であることが明確。

      HTML5では終了タグのいらない空要素(Void elements)として以下の15要素が存在する( 8 HTML構文 — HTML5 日本語訳 http://momdo.github.io/html5/syntax.html#void-elements)。

      area、base、br、col、embed、hr、img、input、keygen、link、meta、param、source、track、wbr

      これらの空要素を記述するときは,以下の2通りの記述方法が許されている( 8 HTML構文 — HTML5 日本語訳 http://momdo.github.io/html5/syntax.html#start-tags)。

      <meta charset="UTF-8">
      <meta charset="UTF-8" />

      1番目と2番目の違いは閉じスラッシュ(/)の有無だ。HTML5としてはどちらの記述も許容している。この件については,WHATWGのHTML5のFAQでも以下のように回答されている。

      HTML の空要素(たとえば、br, img, input 要素)に終端スラッシュをいれる必要はありません。<br /> の代わりに <br> と書けば良いだけです。これは HTML4 と同じです。しかし、XHTML1 の利用が広まっているため、かなり多くのページで、終端スラッシュが使われています。そのため、XHTML1 から HTML への移行を容易にするために、終端スラッシュの構文を HTML の空要素で使うことができるようになりました。

      WHATWG FAQ - 日本語訳 - HTML5.JP http://www.html5.jp/trans/whatwg_html5faq.html#Should_I_close_empty_elements_with_.2F.3E_or_.3E.3F

      空要素の終端スラッシュはxhtml1からの移行を進めるために残してある,つまり非推奨という文脈にとれる。この終端スラッシュを否定する意見もみられる。

      HTML - <br /> じゃなくて <br> だよ - Qiita http://qiita.com/irxground/items/dc3e688d7d48c01c3988

      しかし,互換性を考えると終端スラッシュを省略しないほうがよさそうだ。以下の二つのリンクが参考になる。

      • 絳アト日記: HTML5 の XML 版の書き方 http://akaato.blogspot.jp/2011/06/html5-xml.html
      • XHTML5 について - HTML5 リファレンス http://www.marguerite.jp/Nihongo/WWW/RefHTML5/Appendix/XHTML5.html

      終端スラッシュを付けないとxhtmlとの互換性がなくなってしまい,不正なxhtmlとみなされる。また,電子書籍の形式であるEPUB3はHTML5に準拠したXMLであるXHTML5で記述する必要がある(EPUB 3 Overview(日本語訳版) http://imagedrive.github.io/spec/epub301-overview.xhtml#sec-content-docs)。

      また,終端スラッシュをつけることで空要素であることが一目でわかり,終了タグを気にしなくてもよいことに気が付きやすいというメリットがある。よって,HTMLを記述するときは空要素に閉じスラッシュをつけるべきだ。

      なお,空要素を記述するときの終端スラッシュは,属性を設定しているときは直前に空白が必須なので注意する。以下に例を示す。

      ○:<br/>
      ○:<br />
      ○:<meta charset="UTF-8" />
      ×:<meta charset="UTF-8"/>

      GnuCash:アカウントの手作業でのマージ

      $
      0
      0

      初めにアカウントを作ってその下にサブアカウントを作ったけど,後になってサブアカウントを他の項目にマージさせたくなった。マージさせる方法を調べたので記す。

      GnuCashを使い始めた頃に,[費用:食費]の下に[費用:食費:外食]というサブアカウントを作ってみた。しかし,よく考えたらわざわざ外食というカテゴリを作る必要はなく,食費の中にマージさせたくなった。

      GnuCashの標準機能に,取引内容を他のアカウントに移動させる方法が見当たらなかった。調べたところ手作業でやるしかなさそうだ。

      FAQ - GnuCash http://wiki.gnucash.org/wiki/FAQ#Q:_Is_there_a_way_to_merge_two_accounts_into_one.3F

      一応元のXMLを開いて操作すればできるらしいが,危険なので非推奨とのことだ。数が多いとたいへんなのでPythonプラグインあたりを作れたら作りたい。

      ひとまず手作業でやる手順を参考として,以下に記す。

      1. 移動させたいアカウントを開く。
      2. [View]→[Style]→[Transaction Journal]([Auto-Split Ledger])を選択。


      3. 画面が切り替わり,現在のアカウント([費用:食費:外食])が選択できるのでここをひたすら([費用:外食]に)切り替えていく。

      数が多いとやっていられなくなる。GnuCashの標準機能にはないのでPythonプラグインで一括移動機能を自作するしかないだろう。

      Bash Startup File

      $
      0
      0

      Bashの起動時読み込みファイルについて記憶が曖昧だったのでしっかりまとめることにした。

      用語・ファイル一覧

      最初に登場する用語とファイルを整理する。シェルの起動時ファイルは以下の3種類に分類される。

      • ログインシェル:PCのログイン時のシェル。GUIログイン時も内部的には起動。
      • 対話的非ログインシェル:ログイン時以外で,対話的にコマンドを実行するシェル。例:GUIログイン時にターミナルを起動。
      • 非対話的シェル:非対話的にコマンドを実行するシェル。例:シェルスクリプトの実行時。

      また,bashの起動時と終了時に関連する設定ファイルをbashの起動時・終了時ファイルに示した。この表からわかるように一部ディストリビューション特有の設定ファイルが存在する。

      bashの起動時・終了時ファイル
      ファイル説明
      /etc/profileシステム全体用の初期化ファイル
      /etc/bash.bashrcシステム全体用の初期化ファイル(Debian系のみ)
      /etc/bash.bash.logoutシステム全体用のログインシェル終了時ファイル(Debian系のみ)。
      /etc/bash.bash_logoutシステム全体用のログインシェル終了時ファイル(RedHat系のみ)。
      /etc/bashrc既定の~/.bashrcでこのファイルを実行している。
      ~/.bash_profile個人用の初期化ファイル。
      ~/.bash_login個人用のログイン時初期化ファイル。
      ~/.bashrc対話シェルの個人用の起動ファイル
      ~/.bash_logout個人用のログインシェル終了時ファイル。

      この表でDebian系とはDebian,Ubuntu,Linux Mintなどを指し,RedHat系とはRedHat,CentOS,Scientific Linuxなどを指す。

      以降から上記3分類ごとの起動時ファイルの実行順について記す。

      ログインシェル(interactive login shell, or with --login)

      1. /etc/profileが存在すれば実行。
      2. 以下の3ファイルをこの順番で探し,最初に見つかったファイルを実行(但し,Ubuntuは~/.profileしか探さない)。
        1. ~/.bash_profile
        2. ~/.bash_login
        3. ~/.profile
      3. ログインシェルの終了時に,/etc/bash.bash.logoutが存在すれば実行(Debian系のみ)。
      4. ログインシェルの終了時に,~/.bash_logoutが存在すれば実行。
      5. ログインシェルの終了時に,/etc/bash.bash_logoutが存在すれば実行(RedHat系のみ)。

      設定ファイルを読み込みたくなかったら--noprofileオプションを使う。

      これらのファイルはログイン時やログアウト時に1回だけ実行される。特に理由がなければ編集する必要はない。

      bashの設定ファイルとして知られる~/.bashrcはログイン時には直接読み込まれない。これらのprofileやloginとつくファイル内で,~/.bashrcを読み込むように設定されている。また,既定の~/.bashrcでは/etc/bashrcを読み込むように設定されている。

      bashは大部分のLinuxのログインシェルとして使われているので,この設定は重要である。例えば,GUIで操作する場合においても,ここでプログラムのPATHが通っているかどうかでDASHなどのGUIの検索画面に表示されるかどうかが変わってくる。また,環境変数の設定もGUIでのプログラム起動などで効いてくる。

      なお,Ubuntuは~/.bash_profile~/.bash_loginは無視している。そのため,ログイン時の設定をするならば~/.profileにしたほうがよい。

      対話的非ログインシェル(Interactive non-login shell)

      1. /etc/bash.bashrcが存在すれば実行(Debian系のみ)。
      2. ~/.bashrcが存在すれば実行。
      3. /etc/bashrcが存在すれば実行(RedHat系のみ)。

      --norcオプションを使えば読み込まない。--rcfile <file>でファイルを指定すれば~/.bashrcの代わりに<file>を実行する。

      bashを起動すると毎回実行されるのが~/.bashrcファイルである。基本的にはこのファイルにbashの設定を書くことになる。

      非対話的シェル(non-interactively)

      シェルスクリプトの実行時など非対話的に起動するとき,BASH_ENV変数(既定値はなし)に設定されているファイルを実行する。以下のコマンドと同じように動作する。

      if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

      もし,--loginオプション付きで非対話シェルが呼び出されたらログインシェルと同じように起動時ファイルを実行する。

      BASH_ENV変数に自分で設定ファイル指定することで,シェルスクリプトの実行時の挙動を設定できる。シェルスクリプトの挙動が変わってしまう危険性があるので,基本的にはBASH_ENV変数は設定しないほうがよい。

      参考情報

      1と2を特に参考にした。

      1.  UbuntuデスクトップでPATHの設定は、~/.bashrc か ~/.bash_profile か ~/.profile のどれに書けばよいのか? - 部屋の中にも一年 http://itiut.hatenablog.com/entry/2013/07/07/114143
      2. bashの設定ファイルの読み込みが複雑すぎて混乱する - ぱせらんメモ http://d.hatena.ne.jp/pasela/20090209/bash
      3. Bourne-Again SHell manual - GNU Project - Free Software Foundation https://www.gnu.org/software/bash/manual/
      4. Ubuntu日本語フォーラム / .bash_profile https://forums.ubuntulinux.jp/viewtopic.php?pid=6667
      5. configuration - When is /etc/bash.bashrc invoked? - Unix & Linux Stack Exchange http://unix.stackexchange.com/questions/187369/when-is-etc-bash-bashrc-invoked

      2級ビオトープ計画管理士の受験報告

      $
      0
      0

      2級ビオトープ計画管理士を受験した。受験記録を記す。

      試験名:平成27年度ビオトープ管理士資格試験

      受験級:2級ビオトープ計画管理士

      受験区分:一部免除認定校の学生・卒業生の受験

      受験番号:096069

      試験会場:大阪会場(関西大学 千里山キャンパス 第1学舎1号棟A601教室)

      受験日:2015-10-04(日)

      合格発表日:2015-12-19(土)

      試験概要:

       「ビオトープ管理士」は、自然と伝統が共存した美しく強靱な地域の創造を目指す技術者、端的に言えば、自然の保全・再生を任すことが出来る技術者です。

      ビオトープ管理士 公式サイト|ビオトープ管理士 概要説明と活躍のようす|(公財)日本生態系協会 http://www.biotop-kanrishi.org/biokan_02.htm

      1級と2級があり,計画と施工の2部門がある。2級の試験は筆記試験で全3部門の択一式が50問,小論文が1問となっており,全部門で60 %以上の正答が合格基準となっている。免除制度もあり,指定の学校科目の単位を取得していれば択一式設問全50問の内25問が免除される。

      参考書:財団法人日本生態系協会 (ed.) (2010) : ビオトープ管理士資格試験 公式テキスト 2級ビオトープ計画管理士・施工管理士対応. http://amazon.co.jp/o/ASIN/4820746758/.

      過去問題集:日本生態系協会のエコネット(https://www.eco-japan.org/)に新規登録してから過去3年分(2012-2014)をダウンロード。

      受験動機:大学学部で関連科目の単位を取得すしたことで一部試験科目の免除を受けれた。卒業後5年間のみ有効ということでもったいないと思ったため受験した。

      勉強方法:

      上記の参考書を8月から読み始めて9月半ばに読了する。9月中旬から過去問を解く。間違えた問題は参考書を読んで,わかっていないところをノートにまとめる。これの繰り返し。参考書だけじゃ不足する部分(例えば,川の瀬とか淵とか,回遊魚とか)があるので,その点についてはネットで調べてまとめた。

      感想:

      受験者はそこまで多くなかった印象。大学の講義室いっぱいに人がいたので今回の会場では2級全体で100人くらい。試験もそこまで難しいものではないと思った。一部写真をみて何の生物か回答する問題があり勉強しづらい部分がある。この手の問題は勉強するのが難しく,正答が保証できないので効率が悪く切り捨ててもしかたないかなと考えている。

      科目免除があったので受験したが,部門ごとに60 %の正答が必要で結局のところ科目免除の意味はあまりなく,通常受験と同じ範囲を勉強して同じ知識が必要。しかも,1問あたりの比重が高い(部門ごとに5-10問)ため運悪くわからない問題が2-3個続くと60 %を下回るため,リスクが高い。通常受験でリスクを分散していたほうがまだよかったかもしれない。

      小論文は例年似たような形式。与えられた3項目から一つを選び400字以内で回答するというもの。この3項目は例年似通っており,以下のような形式となっている。

      1. 今まで関わった事業や活動を具体的にあげ,評価し,今後取り組みたいことなど。
      2. 試験勉強で学んで得られたこととそれをどう役立てていきたいか。
      3. 年ごとに違うテーマ。提示されるテーマについての意見,それを踏まえて今後どう取り組みたいか。

      全体的に今後取り組みたいことを述べされている。どのように回答すればよいかわからず,ネットを探したが例文がなくて困った。今後の参考として自分が書いた例を以下に記しておく。

      問題2:

      ビオトープ管理士資格試験の準備を通じて学んだ知識を今後どのように活かしていきたいかを具体的に述べなさい。400字以内。

      回答:

      ビオトープ管理士の勉強では,「外部から持ち込むのではなく,もともとあるものだけで解決する」考え方を学んだ。

      メダカを用水路に放流して蚊の幼虫であるボウフラの駆除に利用ということを小学生だった1990年代半ばにきいた。ビオトープ管理士の勉強を通じて,外部から元々いなかった生物を放流することは,現地の生態系を崩すおそれがありダメだとわかる。冒頭の考え方をしらずに,人間の利便性を追求して行動すると,間違ってしまう。

      今後新しい技術や製品が登場してきたときに,また自分たちの行動が生態系に対してどのような影響があるかを頭のどこかにおいて行動することが重要だと感じた。

      自然を豊かにする場合も,今まで人が踏み込めるように整地されていたところに,現地の廃材を配置したり,生い茂り過ぎている箇所を伐採して日光が当たるようにするなど,元々あるものを活用して解決していきたい。(381字)

      この「もともとあるものだけで解決する」というのはなんとなく思うところがある。標準環境・ライブラリだけでどうにかできるならそれに越したことはないというのと似ている。

      CentOS7でMinimalインストール後のネットワーク設定

      $
      0
      0

      動作確認用にVirtualboxにCentOS7をMinimalでインストールした。追加パッケージがほしいなとyumコマンドを使おうとしたら以下のエラー。

      sudo yum groupinstall
      Cannot find a valid baseurl for repo: base/7/x86_64

      どうやらインターネットがうまく繋がっていない模様。この後困るので直した。

      以下のコマンドでネットワークアダプタの状況を確認できる。

      nmcli d
      DEVICE TYPE STATE CONNECTION
      enp0s3 ethernet disconnected --
      lo loopback unmanaged --

      おそらく一つ目がdisconnectedとなっている。

      以下のコマンドを実行してネットワーク接続を設定する。

      nmtui

      [Edit a connection]→[enp0s3]を選択して<Edit...>→スペースキーで[Automatically connect]にチェックを付ける。

      これでネットワーク接続が有効になり,yumコマンドが使えるようになる。

      参考:CentOS7をminimalインストールした時のネットワーク初期設定(CUI) | 俺的備忘録 〜なんかいろいろ〜 http://orebibou.com/2014/12/centos7%E3%82%92minimal%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E6%99%82%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%88%9D%E6%9C%9F%E8%A8%AD/

      How to check Linux version

      $
      0
      0

      Linuxのバージョン情報の確認方法をまとめた。

      Linuxのバージョン情報には以下の2種類が存在する。

      • カーネルのバージョン
      • ディストリビューションのバージョン

      カーネルのバージョン情報はディストリビューション共通で以下のどちらかの方法で確認できるようだ。

      cat /proc/version
      Linux version 3.13.0-65-generic (buildd@lgw01-26) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015
      uname -a # 全情報を表示
      uname -r # カーネルのリリース番号のみ表示
      Linux senooken-ThinkPad-Edge-E440 3.13.0-65-generic #106-Ubuntu SMP Fri Oct 2 22:08:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
      3.13.0-65-generic

      ディストリビューションのバージョン情報を確認する方法はいくつかある。以下の順番でオススメだ。

      1. lsb_releaseコマンドか/etc/lsb-release
      2. /etc/os-release
      3. /etc/ディストリビューション名-release
      4. /etc/issues

      また上記とは別に,Debianから派生したディストリビューション(UbuntuやLinux Mintなど)では,/etc/debian_versionに派生したDebianのバージョンが書かれているとのこと。

      以下で1-4のディストリビューションのバージョン情報の確認方法について説明していく。

      lsb_releaseコマンド

      lsb_releaseコマンドが使えるならこの方法が一番よい。lsb_releaseコマンドを使えば,これ単体でコードネームやバージョン番号だけを出力することができる。そのため,シェルスクリプトなどでコードネームやバージョン情報が必要なときに組み込みやすい。

      例えば以下のコマンドで必要な情報を出力できる。

      lsb_release -a # ディストリビューションの情報を全て表示
      lsb_release -cs # コードネーム(trustyなど)だけ表示
      lsb_release -rs # バージョン番号(14.04など)だけ表示

      出力:

      No LSB modules are available.
      Distributor ID: Ubuntu
      Description: Ubuntu 14.04.3 LTS
      Release: 14.04
      Codename: trusty

      trusty
      14.04

      lsb_releaseコマンドは/etc/lsb-releaseファイルの内容を元に情報を出力している模様。

      cat /etc/lsb-release
      DISTRIB_ID=Ubuntu
      DISTRIB_RELEASE=14.04
      DISTRIB_CODENAME=trusty
      DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

      なお,もしlsb_releaseコマンドがなければ,以下のコマンドでインストールできる。

      apt-get install lsb-release
      yum install redhat-lsb

      /etc/os-release

      このファイルはほぼ全てのディストリビューションに搭載されているらしい。Ubuntu 14.04とCentOS 7で存在を確認できた。

      /etc/os-releaseには/etc/lsb-releaseと同じくらい詳しいバージョン情報が書かれている。欠点としては,バージョン番号やコードネームだけを単独で抽出するのに自分でパイプ処理などを挟む必要があり,手間がかかる点だ。

      /etc/os-releaseには例えば以下のような内容が書かれている。

      cat /etc/os-release
      NAME="Ubuntu"
      VERSION="14.04.3 LTS, Trusty Tahr"
      ID=ubuntu
      ID_LIKE=debian
      PRETTY_NAME="Ubuntu 14.04.3 LTS"
      VERSION_ID="14.04"
      HOME_URL="http://www.ubuntu.com/"
      SUPPORT_URL="http://help.ubuntu.com/"
      BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

      /etc/ディストリビューション名-release

      ディストリビューションごとに/etc/ディストリビューション名-releaseというファイルが存在しており,このファイルを見ることで詳細なバージョン情報を知ることができる。

      /etc/*-releaseのディストリビューションごとのファイル名
      ディストリビューションファイル名
      CentOSredhat-release,centos-release
      Fedorafedora-release
      Gentoogentoo-release
      Vine Linuxvine-release
      OpenSUSESuSE-release
      Turbo Linuxturbolinux-release
      Arch Linuxarch-release(中身は空)

      /etc/issue

      /etc/issueは全ディストリビューションに共通で存在する。SSHでログインしたときやFTPでログインしたときなどに使われるファイルとのこと。しかし,バージョン情報については十分に記載されていない。例えば,Ubuntu 14.04では以下の出力となる。

      cat /etc/issue
      Ubuntu 14.04.3 LTS \n \l

      このように表示される内容はディストリビューション名とバージョン番号くらいで,コードネームは表示されない。

      また,CentOS 7では以下の内容となりディストリビューションに関する情報が記載されていない。

      \S
      Kernel \r on an \m

      そのため,バージョン情報を確認するにはよい方法ではない。

      Reference

      以下のサイトがこの順番で参考になった。

      1. Linuxのディストリビューションとバージョンの確認方法をまとめてみた http://note.kurodigi.com/linux-version/
      2. ディストリビューションを確認する方法 - それマグで! http://takuya-1st.hatenablog.jp/entry/20100915/1284535635
      3. Ubuntu/コマンドでUbuntuのコードネームを調べる方法 - Linuxと過ごす http://linux.just4fun.biz/Ubuntu/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7Ubuntu%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B%E6%96%B9%E6%B3%95.html
      Viewing all 265 articles
      Browse latest View live