R 指数表示回避でoptions(scipen )は大丈夫か?

Rを使っていて、大きな数字が指数表示になってしまうことを避けたいということがあります。

今回遭遇したのは、13桁の整数値です。

実際に試したのは、9223372036854775807(19桁)の数字。

符号付き64ビット整数の最大値です。

結果はこんな感じです。

1の位が変ってしまっています。

試しに、scipen=1000とかにしてみました。

やっぱり駄目でした(^^ゞ

一けた削ってみたら。

おいおい(一一”)

ということで限界を確認することにしました。

2の53乗〜54乗の間に限界がありそうです。

2の53乗が限界なのかな?
double 64ビットで表現できる数値の限界は、

±5.0e−324 から ±1.7e308
ですが、有効桁数は15〜16桁となっています。

そこから類推すると、内部で64ビットのdoubleで数値を持っているからなのかも知れませんね。

ということで、options(scipen = ???)はとても大きな数字を扱う時には注意した方が良さそうです。

 

 

地図タイルの404エラーで文句を言われた時の対策

地図タイルを扱っていると、セキュリティ関係の方から、こんなことを言われることがある。

「大量のアクセスが発生していて、エラーがたくさん出ています。」
「攻撃されているんじゃないか?」

待て!
アクセスしている方向は、内部から外部への閲覧であり、そのエラーは外部のサーバへアクセスして、外部のサーバに存在しないファイルがたくさんあるということであり、方向が逆だろう!

と、まあこんなことです。

Web地図では、タイル配信されている場合に必要な領域だけタイル画像を作成ます。
例えば、日本の領域だけに限った地図タイルを作成した場合、日本以外の地域におけるタイル画像は存在しない為エラーが発生します。

地理院地図の西之島関係のレイヤを表示してみると、ほとんど404エラーが出っぱなしですw

プログラム上で404エラーは無視する設定を行っていますので、ブラウザで見る限りにおいてエラーは見掛け上発生していませんが、デバッガーで見てみると404エラーが大量発生しているのが解ります。

本題に戻ります。
セキュリティ担当者の勘違いも甚だしいと怒りを感じつつ、「このどド素人が!」と憤慨しても相手は遠い存在であり、面倒ですよね。

こんなこと遣りたくないんですよ。
理解してもらえる人はやらない方が良いのですが・・・・
でも、止むを得ず対策を講じなければならない時があったら、以下を参考にしてください。

画像が無いところは、透過状態な訳ですよね。
透過状態のファイルを無い時に送ってあげれば良いんですよね。

ということで、まずは透過画像を作成しました。
以下の画像を作成しました。

←ここに画像があります。

解らない人のために、ここからダウンロードできます。

そして、公開しているデータの存在しない番号に名前を変えてコピーしまくる・・・・・・嘘です(-_-メ)

次に、以下のファイルを作成します。

.htaccess

webmap_dirは、実際にalpha_plane.pngを保存した場所を指定してください。
ドメインは必ず指定してください。ドメインを指定しないと、代替画像へのリダイレクトを行いますが、404エラーは発生してしまいます。
ドメインを指定すると404エラーは発生しなくなります。

この.htaccessファイルを地図タイルのあるディレクトリの最上部においてあげることで404エラーを回避することが出来ます。

 

 

QTiles/QMetaTiles Pluginで作成したタイル画像の要らない部分を削除する

QGISでタイル作成したタイル画像で不要なタイル画像を削除する方法をまとめました。
透過のみのタイル画像というよりも、1カラーだけのタイル画像を削除する方法になっています。
厳密に透過画像のみを削除したい場合には、identifyの出力内容を調整する必要があります。

QGISで簡単にタイル画像を作成しようと思って、QTilesやQMetaTilesプラグインでタイルを作成したまでは良かった。

おぉ~!タイル画像が出来てるではないか!!

と、意気揚々で「次はこれ作ってぇ~!」とかお願いしていたら・・・・
やたら時間は掛かるんだけどねw

で、しばらくお願いして放置していたら・・・

「なんかエラーが出て、出来ません。」との連絡が。

なんで?

見てみると、ディスクがパンパン(爆)

よく見ると、タイル画像が重すぎて一杯やないですか!

でも部分的に削除すると言っても・・・・と悩みながらも、透過しているだけのタイル画像は必要ないわなw

どうやって判定しようかなぁ?

ちょうど、そのWindowsマシンには下記のツールが入っていた。

  • ImageMagick
    Linuxで画像弄るなら必須アイテム。Windows版も当然ある。
  • Gow
    Linux風のコマンドを使えるようにするツール。

で、使ったのがこんなコマンド

identify

今回扱った画像には以下の条件がある。

①PNG画像
②1つのタイル画像に含まれる色は、対象物があった場合は2色以上になる。
③対象物が無い場合は透過のみとなるため、1色のみになる。

上記を整理すると、「単色のpng画像は不要」ということになる。

で、どうやってそのリストを作って削除するか・・・・

まずはWindowsでやってみた。
以下のバッチファイルを準備する。

Gowを入れると、xargsやsedなどLinux標準のコマンド類が使える様になります。sedのみを使いました。
xargsを使って渡せば簡単じゃないか!と思われますが、これがWindows側の「|(パイプ)」とxargsの相性が悪く、受け渡す標準出力を溜めこんでします様です。
その為、大量のファイルを扱う場合には、ファイルのパスがバッファに積まてしまいエラーが発生するという問題を解決出来ませんでした。

使い方はこんな感じです。

タイル画像のあるフォルダーの根元に移動してから、この以下のコマンドを実行します。

①で削除対象ファイルの削除用コマンドをrun_del.batファイルへ書き出します。
それを②で実行する。

それだけですw

せっかくここまで読んで頂いたのに済みませんが、時間にメッチャ余裕のある方や、タイルファイル数がそれ程多くない方はこれでも全然OKです。
でも、タイル数が数十万とか数百万とかになってくると、Windowsのコマンドプロンプトは使い物になりません。
Power Shellを使え?とか言わないでください。信用してませんからw

で、仕方が無いのでLinuxにファイルをコピーしてから同じことをLinux上で実施して、結果をダウンロードしてくることにしました。

下手すりゃ、ファイル共有掛けて実行してもそこそこLinuxの方が速いかも知れないのですが・・・・

確実に速かったのでこれにした。

まずは、全てのファイルを圧縮しようと思うのですが、7zを使いました。

とは言え、数百万ファイルのファイルを圧縮するには相当な時間が掛かりますし、纏まったファイルの容量もデカくて取り扱いが不便です。
こまめに分けました。

それぞれのフォルダー毎に圧縮ファイルを作成します。

これでフォルダー単位の圧縮ファイルが作成されます。

圧縮ファイルをLinuxに転送します。

転送したファイルを今度はLinux上で解凍します。

次に、以下のコマンドで透過(1つのカラーだけ)のファイルを削除します。

Windows環境でやる何倍も速く実行できます。

 

 

 

OpenSceneGraph コンパイルエラー jas_math.h

OpenSceneGraphのコンパイル中にエラーが発生した。

エラー内容は以下の通り

調べてみると、どうも/usr/include/jasper/jas_math.hに問題があるらしい。

jas_math.hファイルを一部修正することで解決するらしい。

修正内容は以下の通り。

89行目あたりの以下の部分を修正する。

こちらが修正前

こちらが修正後

 

これでコンパイルが通るようになった。

焦った〜(^^;

OpenSceneGraph インストールのyumまとめ!

OpenSceneGraphのインストールで各種パッケージをインストールするのは大変です。
対象OSはCentOS 7です。

一つ一つパッケージを確認しながらインストールしていると、何時間掛かることでしょう?

ということで、私がインストールしたyumコマンドを以下に記録しておきます。

概ね必要そうなライブラリは全てインストールしたつもりです。

Qtやgccなんかは既にインストールしていることを前提としております。

epelリポジトリもインストールしていることを前提としています。

これで大分楽になるはず!

足りないライブラリとかパッケージがあれば、どなたかコメントしてください。

このコマンドを書き換えて楽になりたいです(^^;

インストールの詳細は以前に書いた下記の内容をご確認下さい。

OpenSceneGraphをLinuxへインストールする。

OpenSceneGraphをLinuxへインストールする。(2回目)

 

 

Apple Pencilが繋がらない!

おいおい!Apple Pencilが繋がらない。

iPad ProのLightningポートへ差し込んで・・・・アレ?

じゃあ、充電器から直接充電して再度iPad ProのLightningポートへ差し込んでみるも。。。反応なし。

iPad Proを再起動。
BluetoothもOFF→ONしてみるも反応なし。
航空機モードにして解除してみたが、これもダメ。

もう一度、iPad Proを再起動してもダメだダメだダメだ!!!!!

修理か?修理か?修理か?買い替えか?

どっちが悪い?iPad Pro?Apple Pencil?

判断付かない(ーー;)

ネットワークのリセット・・・面倒やなぁ~
お店に持っていく前の最後の手段やな。。。

「設定」→「一般」→「リセット」→「ネットワーク設定をリセット」
「工場出荷状態に戻します」の様なメッセージが出ても構わずリセット!
心が痛むも背に腹は代えられぬ(-_-メ)

iPad ProにApple Pencilを接続。。。やっぱりダメ?
「設定」→「Bluetooth」を見ると、「自分のデバイス」に「Apple Pencil」があるやないかい!?

後は、そいつをタップして、もう一度iPad Proに接続して。。。

繋がった!!!!!

\(^o^)/

当然、WiFi接続の設定はリセットされているので、再度設定を行うWPA接続を選択して接続する。(他だと安定しない時があるので)

これで完了。

バグやなw

CentOS 7におけるrsyslogの設定

CentOS 7をサーバとして、rsyslogでルータのログを残したいと思います。

/etc/sysconfig/rsyslogの設定は必要ありませんでした。
/etc/sysconfig/rsyslogの設定は、syslogd(「r」がない古い)の設定でありrsyslogdの設定ではありませんので、不要ということに気が付きました。
/etc/sysconfig/rsyslogを以下の様に編集しました。

続いて、/etc/rsyslog.confを以下の様に編集しました。

15-16行目:UDPでの受信を有効にするために、コメントを外します。
54-55行目:/evar/log/messagesへそのままログが書き込まれない様に設定する。
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
この行の「local1.none」が影響するのだが、ファシリティの値が何になっているのか確認する必要がある。
ファシリティが解っていないと、情報を指定できない。
今回使用したルータはBuffaloのBHR-4GRVだったので、この値になっている。(http://buffalo.jp/php/lqa.php?id=BUF6516)
76-77行目:ログの出力先を設定する。

取りあえず、rsyslogの設定は完了したので、設定を有効にするためにrsyslogを再起動する。

※なぜか、「rsyslogd」ではなく「rsyslog」(最後に「d」が付かない)であることに注意!
ホンマに再起動しているんか?という感じで返ってくるので、心配な方はrebootしちゃってくださいw

ここまでで、rsyslogの設定は完了なのですが、届かない・・・・(TT)

なんでだろう?

ということで、ファイアウォールで止められていました(^^ゞ
/etc/sysconfig/iptablesに以下の1行を追加してください。

その後、iptablesを再起動します。

これで、ログが残る様になったはずです。

でも。。。。このままだと、ログが延々と同じファイルに書き込まれるのですわ( ;∀;)

ログのローテーションを行うには、、、、多分これで行けるはず!
/etc/logrotate.d/syslogに以下の1行を適当に追加!

どうや!?

しばらくしたら結果が解るだろう?

ということで、後は皆さん信じて待つのみです!

解ってきたPVの上がり方!

このブログを書き始めて、少しづつPVが上がる傾向が解って来た。
#今更ですね。
全く気にしていなかったかというと嘘になりますが、PVが増えると少しは見てくれている人が増えているんだなぁ~と、少しはヤル気に繋がります。

このブログは技術的なメモを記録しているだけで、技術的に特化したトピックスに注力したブログではなく、ある意味では書き散らかしているという感があるので、参考にならないかもしれませんが、概ね4ヶ月後ぐらいに書いたページを閲覧してくれる人が増える傾向にあります。

つまり、書いた直後からPVが増えることは無く、検索エンジンに登録されて閲覧数が増えてくるのは3ヶ月後くらいからという感じになります。

内容によっては鳴かず飛ばずもありますが、概ねその後成長し続けるか衰退するかは5ヶ月目以降の推移に傾向が現れます。

ブログを下記始めの頃は検索エンジンで検索出来るようになったら、いきなり増えてくると思ってしまうかも知れませんが、実際は数か月後に現象が現れるということを覚えておくと良いでしょう。

逆に、私の場合は繁忙期が3月頃に集中するため、2~4頃に記事を書かなくなった経緯がありました。
その反動は、6月頃から現象が現れ始めました。
現在8月の段階で著しい落ち込みが顕在化しています。

コンスタントに記事を書き続けることが、PV安定化の道ですね。
増やすためと考えるよりも、安定化させるために記事を書いていると、少しづつPVが増えることになるのではないでしょうか?

 

Raspberry Pi 3 & CentOS 7でyum updateが出来る様に設定する!

Raspberry Pi 3にCentOSを入れたまでは良かったのですが、yumのアップデートが出来ない!

<<<<<<前回までの記事>>>>>>
Raspberry Pi 3にCentOS 7を入れてみた時にやったこと
Raspberry Pi 3SDメモリの空きを認識させる。
<<<<<<ここまで>>>>>>

アップデートが出来ないと、パッケージをインストールしたりする時に面倒が起こる可能性がありますよね。
それに、セキュリティアップデートが出来ないのも困ってしまいます。
「ラズパイだから攻撃されて壊れたっていいや!?」という訳にも行きません。
ネットワークに侵入を許したことになりますから、何をされるか分かったもんじゃない(-_-メ)

そもそも、バグも修正されないのですから、yum updateを必須だと思っています。

デフォルト状態で何故アップデート出来ないのか?それは、何らかの理由でリンク切れが発生しているためだった様です。

ダウンロードしてインストールを行ったOSイメージに含まれている設定では、リンク先が上手く設定出来ていない様です。多分、イメージを作ったとに変更なったりしたのかも知れませんね。

ということで、実は設定を変更するだけなのです。

対象ファイルを開きます。

CentOS-armhfp-kernel.repoの内容を以下の様に変更します。

この状態で以下のコマンドを実行してみてください。
成功している場合には、少し時間が掛かると思います。
ネット環境にも依りますが、30分以上掛かることを覚悟してください。

パッケージのアップデートが開始されます。

この状態でアップデートが出来ない様でしたら、もう一つのファイルを編集します。

/etc/yum.repo.d/kernel.repoを編集します。

これで再度yum updateコマンドを実行してみてください。

私はこれで上手く動作しました。

ネット上では何人かの方が記載されているので、書かれた時に成功しているという好意的解釈をすると、途中で変更が幾度か行われているのかも知れません。

もし、上手く出来ないという時は、コメント欄に質問してみてください。
答えられれば回答させて頂きたいと思います。

これで一通りの設定が完了しました。
簡単なサーバを構築する下準備までになりますが、ここからはどう使うかによって設定が変わってくると思いますが、ここまでの設定は基本的に共通だと思います。

ここで参考情報です。

1)Raspberry Pi 3用のOSが入ったSDカードが販売されています。
2)出来上がったSDカードはDD for Windowsでパソコン側へイメージファイルとしてバックアップを取ることが出来ます。
3)ご要望がありましたら、ここまでの環境設定を行ったイメージフィルを期間限定でご提供しようと思います。ご要望はコメント欄に記載してください。

 

Raspberry Pi 3 SDメモリの空きを認識させる。

Raspberry Pi 3にCentOSをインストールしたのですが、SDメモリの開いている容量が使えない状態にあります。

先の記事(「Raspberry Pi 3にCentOS 7を入れてみた時にやったこと」)でCentOSの設定を進めていることを前提としています。

SDメモリは32GBのものを準備しています。

それでは拡張設定を行います。

 

こんな感じで、パーティションのサイズを拡張しました。
設定は完了したのですが、最後のメッセージにあります通りfstabを更新する必要があります。

面倒なので、rebootします。

ログインし直して、df -hコマンドで確認してみてください。

/dev/rootのサイズが29Gになっています。
他でも使われているのでこんなもんで成功していると思ってよいでしょう。

ということで、パーティションの拡張は完了です。

Raspberry Pi 3の設定はまだ途中です。
次回は、yum updateが出来る様にしてみようと思います。

次回は、「Raspberry Pi 3 & CentOS 7でyum updateが出来る様に設定する!」です。