平衡点


2012/09/05

_ Fortran (>=90) での getarg, iargc

他にも良い解説があると思いますが, メモがてらに書いておきます.

プログラム実行時にコマンドライン引数を渡すことは良く行なわれます. FORTRAN77で書かれたプログラムを実行する際にコマンドライン引数を取得するために使われる関数に GETARG, IARGCがあります. IARGC はコマンド引数の数を INTEGER として取得する subroutine, GETARG コマンドライン引数を CHARCTER として取得する subroutine です.

例えば

# source: fortran
PROGRAM TEST_GETARG
  INTEGER I
  CHARACTER ARG*32

  DO I = 1, IARGC()
    CALL GETARG(I, ARG)
    WRITE(*,*), ARG
  END DO
END PROGRAM TEST_GETARG

というように使うことができます. このGETARGはGNU FORTRAN77g77で提供されていたGNU拡張ですが, 他の多くのベンダーコンパイラにおいても使用することができます(多分).

この GETARG, IARGC はFortran 2003 の規格で GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT として取り込まれました. GNU のドキュメントでも以下のように記載されています.

Description

Retrieve the POS-th argument that was passed on the command line when the containing program was invoked.

This intrinsic routine is provided for backwards compatibility with GNU Fortran 77. In new code, programmers should consider the use of the GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003 standard.

[from:GETARG -- The GNU Fortran Compiler]

...あれ? じゃ Fortran90Fortran95は?

今のところGNU Fortran しかり, ベンダーのコンパイラしかりGETARG, IARGC, GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT, すべて組み込み関数として実装されているみたいですが, それを過信するわけにもいきません. 規格にないし.

というわけで configure 時には必ずこれらの関数が実装されているかのチェックを行なう事になります. 個人的には面倒だなぁ, とは思いますが, まあしょうがないですよね.


2012/09/14

_ org-capture -> tDiary

とりあえず

  1. org-capture でメモとかネタを書く
  2. タグとして DIARY がついているメモを抽出して日付ファイルにする
  3. RD 形式に変換 -> 「ただだら」に渡す

みたいにできないのかテスト中.

いけたっぽい.

良いみたいですね. あとは素の RD への変換とか, プラグイン向けの記法とか Coderay 用のアレとかをしなければ.


2012/09/15

_ 高知に来てます.

流体力学会 年会 2012 です. 初の四国上陸ですが, 発表が日曜なので, 今日は寝られない気がしています.

しかし, 高知ってどこもかしこも「龍馬」一色なんだな.


2012/09/16

_ VCS用の proxy の設定アレコレ

VCS 毎に設定方法が違うのでメモ. というか 面倒すぎてアレ. なにかを一括変換したら, 全てに反映してくれる, とかだと良いのに.

http_proxy のみで良いなら良いのになぁ...

CVS

困った事に CVS には(Official には)proxy に関するサポートが 無い. Debian パッケージで提供されている CVS - qa.debian.org には proxyサポート 用のパッチが当たって, 環境変数 http_proxy を見てくれるけれども, それを当てにするのもちょっとどうなんだ, という.

結論から言えば, 結構絶望的. 「今時 CVS なんてm9(^Д^)プギャー」という話は置いておいて. 結構困るなぁ...

Subversion

~/.subversion/servers

[global]
# http-proxy-exceptions = *.localhost
http-proxy-host = proxy.example.com
http-proxy-port = 8080
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword

とか書いておくと良い

Git

netcat, socat, corkscrew のいずれかを導入しておく. たとえば

# source: sh
   #!/bin/sh
   #
   # License: WTFPL
   #---------------------------------------------------------------
   #
   # search $http_proxy
   #
   if ! test $http_proxy ; then
     echo "set \$http_proxy !"
     exit 1
   fi
   _proxy_server=`echo $http_proxy | cut -d':' -f2 | sed 's/\/\///g'`
   _proxy_port=`echo $http_proxy | cut -d':' -f3`
   #
   # search executable command
   #
   if `which corkscrew 2>&1 > /dev/null` ; then
     EXEC=`which corkscrew`
   elif `which socat 2>&1 > /dev/null` ; then
     EXEC=`which socat`
   elif `which nc 2>&1 > /dev/null`; then
     EXEC=`which nc`
   else
     echo "no proxy command"
     exit 1
   fi
   #
   # execute Git via proxy
   #
   case $EXEC in
     *corkscrew)
       exec $EXEC $_proxy_server $_proxy_port $1 $2
       ;;
     *socat)
       exec $EXEC STDIO PROXY:$_proxy_server:$1:$2,proxyprot=$_proxy_port
       ;;
     *nc)
       exec $EXEC -X 5 -x$_proxy:$_proxy_port $*
     *)
       echo "NO proxy command"
       ;;
   esac

なんて物を git-proxy.sh とか言う名前で用意しておいて, 環境変数で

http_proxy=proxy.example.net:8080
GIT_PROXY_COMMAND=~/bin/git-proxy.sh

なんて .

bazaar

環境変数 http_proxy を見てくれるので, これを設定しておくと良い.

mercurial

~/.hgrc

[http_proxy]
host = proxy.exameple.com:8080

とか書いておくと良い.


2012/09/18

_ e1000e のエラー

[  112.113438] ------------[ cut here ]------------
[  112.116069] WARNING: at /build/buildd-linux_3.2.23-1-amd64-zj7gxu/linux-3.2.23/drivers/net/ethernet/intel/e1000e/netdev.c:5327 __e1000_shutdown+0x6f/0x3ea [e1000e]()
[  112.121558] Hardware name: CF-S9JY6BDP
[  112.124290] Modules linked in: parport_pc ppdev lp parport bnep rfcomm cpufreq_powersave cpufreq_userspace cpufreq_conservative cpufreq_stats pci_stub vboxpci(O) vboxnetadp(O) binfmt_misc vboxnetflt(O) vboxdrv(O) uinput ext3 jbd loop fuse ecryptfs dm_crypt dm_mod snd_hda_codec_hdmi snd_hda_codec_conexant arc4 snd_hda_intel i915 snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm snd_page_alloc drm_kms_helper snd_seq_midi snd_seq_midi_event btusb bluetooth snd_rawmidi drm snd_seq iwlwifi snd_seq_device acpi_cpufreq mperf tpm_infineon panasonic_laptop iTCO_wdt iTCO_vendor_support snd_timer joydev i2c_algo_bit snd i2c_i801 pcmcia mac80211 cfg80211 rfkill soundcore tpm_tis yenta_socket intel_ips i2c_core coretemp tpm pcmcia_rsrc processor ac battery video psmouse pcmcia_core sparse_keymap evdev serio_raw tpm_bios button power_supply ext4 crc16 jbd2 mbcache sg sd_mod sr_mod cdrom crc_t10dif crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 aes_generic cryptd thermal thermal_sys ahci libahci ehci_hcd usbcore usb_common libata scsi_mod e1000e sdhci_pci sdhci mmc_core [last unloaded: scsi_wait_scan]
[  112.151223] Pid: 1741, comm: kworker/0:2 Tainted: G           O 3.2.0-3-amd64 #1
[  112.154787] Call Trace:
[  112.158411]  [<ffffffff81046901>] ? warn_slowpath_common+0x78/0x8c
[  112.162075]  [<ffffffffa0037eb3>] ? __e1000_shutdown+0x6f/0x3ea [e1000e]
[  112.165749]  [<ffffffff8103af4a>] ? double_rq_lock+0x25/0x3d
[  112.169279]  [<ffffffffa003825f>] ? e1000_runtime_suspend+0x31/0x39 [e1000e]
[  112.172853]  [<ffffffff811c4f18>] ? pci_pm_runtime_suspend+0x43/0xd6
[  112.176466]  [<ffffffff811c4ed5>] ? pci_legacy_suspend_late+0xbd/0xbd
[  112.180064]  [<ffffffff812556aa>] ? __rpm_callback+0x2c/0x50
[  112.183186]  [<ffffffff81255c15>] ? rpm_suspend+0x27d/0x403
[  112.186257]  [<ffffffff8103987c>] ? finish_task_switch+0x88/0xba
[  112.189825]  [<ffffffff812568b7>] ? pm_schedule_suspend+0x9f/0x9f
[  112.193331]  [<ffffffff8125691c>] ? pm_runtime_work+0x65/0x7e
[  112.196877]  [<ffffffff8105aeaa>] ? process_one_work+0x163/0x284
[  112.200462]  [<ffffffff8105be72>] ? worker_thread+0xc2/0x145
[  112.204048]  [<ffffffff8105bdb0>] ? manage_workers.isra.23+0x15b/0x15b
[  112.207658]  [<ffffffff8105efad>] ? kthread+0x76/0x7e
[  112.211241]  [<ffffffff81351df4>] ? kernel_thread_helper+0x4/0x10
[  112.214831]  [<ffffffff8105ef37>] ? kthread_worker_fn+0x139/0x139
[  112.218427]  [<ffffffff81351df0>] ? gs_change+0x13/0x13
[  112.222039] ---[ end trace 6226bcbc7b784fd2 ]---

...はて?


2012/09/24

_ atig の文字列勘定

140 文字を越えたどうかを判定しているのだけれども, どうも文字列の勘定が変な気がする. ASCII-8BIT が 140 文字を越えたか, になってないかな?

...以前も似たようなことでじたばたした記憶があるんだけれど, 何処弄ったか忘れてしまった. sqlite3 に保存する際に強制的に UTF-8 にするような悪手を取った様な気がするのだけれども.


2012/09/25

_ wl-addrbook のアドレスパースエラー?

Wanderlust は Mew の Addrbook 形式のアドレス帳が使える. サーバと手元で Mew だったり Wanderlust だったりするので, 同じアドレス帳が使えるのは地味に便利. ついでにマスタカさんの 「Gmail の連絡先」を Mew のアドレス帳にコピーする - マスタカの ChangeLog メモ / 2011-06-18 なんかを使うと, Android 側とも同期できて, ますます幸せ.

Wanderlust で Mew の Addrbook を使う

例えば Wanderlust の設定ファイルに

# source: scheme
   (setq wl-use-petname t)
   (setq wl-addrbook-file  "~/.mua/Addrbook.gpg")
   (require 'wl-addrbook)
   (unless (locate-library "google-contacts-mew")
     (el-get 'sync '(google-contacts-mew)))
   (require 'google-contacts-mew)
   (setq google-contacts-mew-ask nil)
   (setq mew-conf-path nil)
   (setq mew-addrbook-file wl-addrbook-file)
   (setq wl-summary-use-addrbook-from-func t)
   (wl-addrbook-setup)

とか書いておくと良い. mew-conf-pathmew-addrbook-file は マスタカさんの google-contacts-mew を使うために設定した変数.

これで幸せ...?

...のハズだったんだけれど.

どうにも Wanderlust 側でのアドレスの補完が効かなくてじたばたしたり.

Mew のマニュアルによれば, Addrbook の形式は

<shortname> <address1>[, <address2>, <address3>,...] <nickname> <fullname

で「空白区切り」で「,」は複数メールアドレスがある場合の区切り, つまり

<address1>[, <address2>, <address3>,...]

で複数アドレスを示すフィールドになっている筈なんだけれど, wl-addrbook は "," に続く空白まで区切りだと判断してしまっている.

そんな訳で, とりあえず ad hoc に "," の空白を削除して凌ぐことに. どっちかと言えば BBDB あたりを使った方が良いのかもしれないけれど...

_ Software Design 2012/10

おがさわらさんによる入魂の執筆, ということで購入.

Software Design (ソフトウェア デザイン) 2012年 10月号 [雑誌]
技術評論社, ¥10

第一特集が chef 入門 ということで, 時間を見つけて読みます(これから).


2012/09/28

_ google-contacts-wl なんてモノを作ってみた

既に masutaka/google-contacts-mew というモノがあるわけですが, それを弄って uwabami/google-contacts-wl というモノを作ってみました.

Wanderlust でも Mew の Addrbook は使えるのですが, Google Contacts 側で nickname を指定するのも面倒だし, 補完の仕方が異なるので, ちょっと使いにくいし, ということで, 車輪の再開発をしました.

Wanderlust の Address ファイルは

<address1>  <nickname>  <fullname>
<address2>  <nickname>  <fullname>

という形式なので, Google Contacts に登録されているメールの数だけ address を並べる, という形にしています.

1-way converter なので, Address ファイルを編集して, それを Google Contacts に反映させる, という使い方はできません. というか, Address ファイルは simple すぎて Google Contacts へ反映させるにはちょっとシンドイと思います.


連絡先など
最近の日記
  • 2024/02/15
    • 1. org-mode → bemaer での番号付きリスト
  • 2024/01/04
    • 1. 明けました.
  • 2023/12/03
    • 1. TeX on Debian 12 (Bookworm)
  • 2023/11/29
    • 1. GPGで複数の認証鍵がある場合の --export-ssh-key
  • 2023/09/07
    • 1. Wanderlust で返信時にメーリングリストのシリアルナンバを削除するには
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|
Back to Top ▲