Perl Numeric Literal
プログラミングPerl
$x = 12345; # 整数 $x = 12345.67; # 浮動小数点数 $x = 6.0e23; # 科学的記法 $x = 4_294_967_296; # 下線をつかって読みやすくする $x = 0377; # 8進数 $x = 0xfff; # 16進数 $x = 0b1100_0000; # 2進数
Perlで文字列が数値かどうか判定するには
1. 最良の方法?
!( $n == 0 && $n ne "0" )
warningが出る...Argument "String" isn't numeric in numeric eq (==)
2. looks_like_number()
Scalar::Util::looks_like_number()
正規表現にしてみた
my $rx_integer = qr/(?:[0-9_]+)/; my $rx_decimal = qr/(?:[0-9_]+\.[0-9_]+)/; my $rx_number = qr{ (?: (?:-)* inf (?:inity)* ) | nan | 0(?: (?:x[0-9a-f_]+) | (?:b[0-9_]+) | (?:[0-7_]+) ) | (?: $rx_decimal|$rx_integer) e[+|-]? $rx_integer ) | $rx_decimal | $rx_integer }xi;
参考:
perldata - Perl のデータ型 - perldoc.jp
looks_like_number() - Perl日記
Perl Infinity&NaN
perl-5.6.1以上なら、InfinityとNaNが扱えるらしい。
> 1e1000 inf > 'inf' + 1 inf > 'inf' * -1 -inf >'inf'-'inf' nan
数値リテラルとして認識されるのは
inf <- /inf(inity)*/i -inf <- /-inf(inity)*/i nan <- /nan/i
数値としては、inf, -inf, nanとして保存される。
> my $inf = "Infinity"; Infinity > $inf += 0; inf
ただし、0除算はerrorになる。
> 1 / 0 Illegal division by zero. > 1 % 0 Illegal modulus zero.
参考:
looks_like_number() - Perl日記
perl561delta - perldoc.perl.org
OruxMapsでGoogle Map Hybridを使う
Google Map Hybridを使う方法。
/mnt/sdcard/oruxmaps/mapfiles/onlinemapsources.xml
に以下の分を追加する。
<onlinemapsource uid="1"> <name>Google Maps Hybrid</name> <url><![CDATA[http://mt{$s}.google.com/vt/lyrs=y&hl=ja&x={$x}&y={$y}&z={$z}]]></url> <minzoom>0</minzoom> <maxzoom>19</maxzoom> <projection>MERCATORESFERICA</projection> <servers>0,1,2,3</servers> <httpparam name=""></httpparam> <cacheable>1</cacheable> <downloadable>1</downloadable> <maxtilesday>0</maxtilesday> <maxthreads>0</maxthreads> <xop></xop> <yop></yop> <zop></zop> <qop></qop> </onlinemapsource>
OruxMapsでGoogle Earthを使う
OruxMapsでgoogle mapを使う - tattii's blogの第2弾。
OruxMapsでGoogle Earthを表示する方法。
/mnt/sdcard/oruxmaps/mapfiles/onlinemapsources.xml
に以下の分を追加する。
<onlinemapsource uid="2"> <name>Google Earth</name> <url><![CDATA[http://khms0.google.com/kh/v=149&src=app&x={$x}&y={$y}&z={$z}]]></url> <minzoom>0</minzoom> <maxzoom>18</maxzoom> <projection>MERCATORESFERICA</projection> <servers>0,1,2,3</servers> <httpparam name=""></httpparam> <cacheable>1</cacheable> <downloadable>1</downloadable> <maxtilesday>0</maxtilesday> <maxthreads>0</maxthreads> <xop></xop> <yop></yop> <zop></zop> <qop></qop> <sop></sop> </onlinemapsource>
Android端末内のファイルを編集するには、AirDroidを使って一度パソコンにファイルをダウンロードして、編集したファイルを同じ場所にアップロードするのが簡単。
CentOSでPostgreSQLのデータベースの格納場所を変更する
CentOSにPostgreSQLをインストールしてデータベースの格納場所を変更するときにSELinuxではまったので、やったことのメモ。
環境
CentOS 6.4 PostgreSQL 9.3.4 SELinux Enforcing
データベース格納場所
デフォルト: /var/lib/pgsql 変更先: /home/pgsql
1. ディレクトリ作成
# mkdir /home/pgsql/data
2. 所有者、パーミッション変更
# chown -R postgres:postgres /home/pgsql # chmod -R 700 /home/pgsql
3. PostgreSQLの設定ファイル編集
# vim /etc/sysconfig/pgsql/postgres PGDATA=/home/pgsql/data PGLOG=/home/pgsql/data/pgstartup.log
4. データベース初期化
# su postgres -c "initdb -D /home/pgsql/data"
5. SELinuxのコンテキスト設定
PostgreSQLのデータベースには postgresql_db_t ラベルが必要。
# semanage fcontext -a -t postgresql_db_t "/home/pgsql(/.*)?" # restorecon -R /home/pgsql
6. SELinuxポリシー設定
postmaster(postgresqlの実行プロセス)が/homeにアクセスできるよう設定する。
(違う場所にデータベースを格納する場合も、/から格納場所までのすべてのディレクトリに以下のような設定が必要)
postmasterのドメインは postgresql_t
/homeのタイプは home_root_t
6.1. ポリシー・ソースファイル作成
適当な場所にpostgres_local.teを作成
# vim postgres_local.te module postgresql_local 1.0; require { type postgresql_t, home_root_t; class dir { search getattr }; } allow postgresql_t home_root_t:dir { search getattr };
6.2. モジュールのコンパイル、インストール
# checkmodule -M -m -o postgres_local.mod postgres_local.te # semodule_package -o postgres_local.pp -m postgres_local.mod # semodule -i postgres_local.pp
OruxMapsでGoogle Mapを使う
OruxMapsがめっちゃ高機能ですごい。
でも、そのままではgoogle mapを見れないので追加する方法を調べた。
/mnt/sdcard/oruxmaps/mapfiles/onlinemapsources.xml
というファイルを開いて、以下の分を追加するだけ。
<onlinemapsource uid="0"> <name>Google Maps</name> <url><![CDATA[http://mt{$s}.google.com/vt/lyrs=m@121&hl=ja&x={$x}&y={$y}&z={$z}]]></url> <minzoom>0</minzoom> <maxzoom>19</maxzoom> <projection>MERCATORESFERICA</projection> <servers>0,1,2,3</servers> <httpparam name=""></httpparam> <cacheable>1</cacheable> <downloadable>1</downloadable> <maxtilesday>0</maxtilesday> <maxthreads>0</maxthreads> <xop></xop> <yop></yop> <zop></zop> <qop></qop> </onlinemapsource>
これでオフラインの地図も保存できるようになる。
追記: Google Mapの他の地図を使う方法について
Google Earth (航空写真) - OruxMapsでGoogle Earthを使う - To The Sky!
Google Map Hybrid (航空写真+道路地図) - OruxMapsでGoogle Map Hybridを使う - To The Sky!
Hybridがおすすめ。