« 2012年9月 | トップページ | 2012年11月 »

2012年10月の3件の記事

2012年10月 1日

vim起動時に「E568: duplicate cscope database not added」

vimでcscopeを使うために.vim/plugin/cscope_maps.vimをインストールし、環境変数CSCOPE_DBにcscopeデータベースのパスを設定したら、vim起動時にエラーが出てしまった。

Error detected while processing /homes/shini/.vim/plugin/cscope_maps.vim:
line   45:
E568: duplicate cscope database not added

cscope_maps.vim以外にcs addを実行しているところは他に見当たらない。試しにcscope_maps.vimを削除してvimを起動し、「:cs show」を実行しても、接続されているデータベースは出てこないから、やはりcs addしているのはこのプラグインだけである。まるで「cs add $CSCOPE_DB」の行を2回実行しているようにみえる。

いろいろ調べて、.vimrcの次の行が原因だと判明した。

set runtimepath+=~/.vim/

もともとUNIXのvimで$HOME/.vimはruntimepathの先頭に入っているのに、末尾に再び付加することによって、pluginディレクトリ内のvimスクリプトを二重に読み込んでいた。他の人の.vimrcを参考にカスタマイズしていたとき、自分の環境では必要がないのに気付かず、そのままコピーしたらしい。

ちなみにRHELでは、/etc/vimrcの中でcscope_maps.vimと同じようなことをやっており、さらにRHEL付属のvimはシステムvimrcが/etc/vimrcに固定されている。pluginディレクトリの実行が1回だけでも、やはり「E568: duplicate cscope database not added」が起きる。この場合は

  • cscope_maps.vimを編集して/etc/vimrcと重複する部分を削除する。
  • 必要な部分(nonmapなど)を.vimrcにコピーする。
  • 必要な部分(nonmapなど)を別ファイルにして、.vimrcからsourceで読み込む、
  • 「set nocsverb」を指定して、メッセージを抑止する対症療法。

という対策がある。set nocsverbは以下の箇所(3行目)に挿入する。

" Set nocsverb not to print "E568: duplicate cscope database not added" message.
" See :help cscope or http://vimdoc.sourceforge.net/htmldoc/if_cscop.html
    set nocsverb
"   " add any cscope database in current directory
    if filereadable("cscope.out")
"        cs add cscope.out
   " else add the database pointed to by environment variable
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif

viimのヘルプに、データベースを追加する前にcsverbをリセットし、追加後にセットしろと書いてあり、/etc/vimrcはそうなっている。もっとも、これは別の理由かもしれない。

Ideally, you should reset this option in your |.vimrc| before adding any cscope databases, and after adding them, set it. From then on, when you add more databases within Vim, you will get a (hopefully) useful message should the database fail to be added.


| | コメント (0)

PHPで2MB以上のファイルをアップロード

PHPはデフォルトで2MB以上のファイルがアップロードできない。この上限を変更する方法は2つある。

システム全体で上限を変更

/etc/php.iniのupload_max_filesizeを変更する。

$ php -f phpinfo.php | grep max
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads. file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir =
; Maximum allowed size for uploaded files. ;upload_max_filesize = 2M upload_max_filesize = 10M

アップロード上限に応じて、post_max_size、max_execution_time、memory_limitも大きくする必要がある。

現在の設定値はphpinfo()で確認できる。

$ cat phpinfo.php
<?php
echo phpinfo();
?>
$ php -f phpinfo.php | grep max
log_errors_max_len => 1024 => 1024
max_execution_time => 0 => 30
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => 60
max_input_vars => 1000 => 1000
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
session.gc_maxlifetime => 1440 => 1440

Apacheのディレクトリごとに設定

アップロード上限を変更したいディレクトリに.htaccessファイルを置き、以下の設定値を変更する。メモリ上限などの設定値は適当である。

php_value max_execution_time 60
php_value memory_limit 10M
php_value post_max_size 10M
php_value upload_max_filesize 10M

.htaccessによるアクセス制限の上書きはApacheのデフォルトで禁止されている。httpd.confのAllowOverrideディレクティブ(デフォルトNone)を変更して許可する。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All

(参考資料)
PHP: コア php.ini ディレクティブに関する説明 - Manual
http://php.net/manual/ja/ini.core.php#ini.upload-max-filesize

@IT:Apache 2.0の必須設定と基本セキュリティ対策(3/3)
http://www.atmarkit.co.jp/flinux/rensai/apache2_01/apache01c.html

Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ
https://httpd.apache.org/docs/current/ja/howto/htaccess.html

| | コメント (0)

GNOMEターミナルのSolarized化

Solarizedカラースキームは、色の組み合わせを注意深く選び、視認性を保ちつつコントラストを下げたものである。たった16色でこれを実現しているというところが味噌である。256色モードのターミナルでもSolarizedでは16色しか使わない。そのためにカラーパレットをSolarized用にカスタマイズする。

ターミナルの色数はPerlスクリプト256colors2.plで確認できる。256色モードならきれいなグラデーションが見えるはずだ。このブログの人はなぜか8色モードらしい。

ターミナルが 256 色対応しているかを確認する方法 - わからん
http://d.hatena.ne.jp/kitokitoki/20090520/1242821559

ターミナルソフトごとのSolarizedカラー設定は本家サイトなどで見つかる。puttyはレジストリを書き換える。GNOMEターミナルは以下のスクリプトでプロファイルを書き換える。

Solarized Colorscheme for Gnome Terminal
https://github.com/sigurdga/gnome-terminal-colors-solarized

実行例

$ ./install.sh

This script will ask you if you want a light or dark color scheme, and which Gnome Terminal profile to overwrite.
Please note that there is no uninstall option yet. If you do not wish to overwrite any of your profiles, you should create a new profile before you run this script. However, you can reset your colors to the Gnome default, by running: gconftool-2 --recursive-unset /apps/gnome-terminal
Please select a color scheme: 1) light 2) dark #? 1
Please select a Gnome Terminal profile: 1) Default 2) test #? 2 You have selected: Scheme: light Profile: test (gconf key: Profile0)
Are you sure you want to overwrite the selected profile? (YES to continue) YES Confirmation received -- applying settings

これでターミナルがSolarizedカラースキームで表示されるはずだ。次に.dircolersに好みのdircolors設定をシンボリックリンクする。

Solarized Color Theme for GNU ls
https://github.com/seebi/dircolors-solarized

.vimrcにSolarizedの設定。16色モードにすること。

set t_Co=16
set background=light
let g:solarized_termcolors=   16
let g:solarized_termtrans =   0
let g:solarized_degrade   =   0
let g:solarized_bold      =   1
let g:solarized_underline =   1
let g:solarized_italic    =   1
let g:solarized_contrast  =   "normal"
let g:solarized_visibility=   "normal"
colorscheme solarized

| | コメント (0)

« 2012年9月 | トップページ | 2012年11月 »