ホーム » tarumi の投稿 (ページ 23)

作者アーカイブ: tarumi

GeoServerのスタイル(以上、以下)

[code]
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>traffic12_5L</Name>
<UserStyle>
<FeatureTypeStyle>
<Rule>
<Name>0-999</Name>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>trfvol</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>trfvol</ogc:PropertyName>
<ogc:Literal>999</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#C0C0C0</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<Rule>
<Name>1000-1999</Name>
<ogc:Filter>
<ogc:And>
<ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyName>trfvol</ogc:PropertyName>
<ogc:Literal>1000</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
<ogc:PropertyIsLessThan>
<ogc:PropertyName>trfvol</ogc:PropertyName>
<ogc:Literal>1999</ogc:Literal>
</ogc:PropertyIsLessThan>
</ogc:And>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#C0C0C0</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
[/code]

HP ProLiant ML115 G5の電源が壊れた

週明けに会社に来たら「HP ProLiant ML115 G5」が止まっていた。

ml1151

システム開発に使用しているサーバーだったので慌てて調べたら、電源が壊れただけだった。
このPCの電源が壊れるのはこれで2回目!
代替の電源もないのでとりあえずDELLのサーバーから電源を拝借して使用。
サイズが異なるので、ただ置くだけ。

ML1152

同様の症例はネットにも色々と記載がある。

さすがに2度目となると故障の原因を調べるみるとずばりがまごころせいじつ堂 (浜町庄金 研究開発)に記載されていた。

確認してみるとやはり、電解コンデンサ「10V3300μF 105℃」が膨らんでいた。

ml1153

今度、交換しよう!

弊社のDNS サーバが再帰的な問合せを使用する DDoS 攻撃の踏み台にされてしまいました

事の顛末

JPCERTより以下のメールが着た

「この連絡は、JPNIC、JPRS WHOIS データベースに登録されている、もしくは以
前に返信いただいた、下記の担当者の方にお送りしています。
JPCERT/CC では、以下の通り、貴サイトの DNS サーバが、DNS の再帰的な問合
せ (recursive queries) を使った DDoS 攻撃の踏み台として使用された可能性
があるとの報告を受けています。・・・」

「DNS の再帰的な問合せ (recursive queries) を使った DDoS 攻撃」とは

DNS Amp攻撃の解説と、踏み台にされないためのBIND DNSの設定

調査

最初にDNSのキャッシュの内容をファイルに出力

rndc dumpdb

上記を実行すると/etc/bind/named.conf.optionsで指定されたディレクトリにファイル(named_dump.db)が出力される。
(キャッシュのクリアはrndc flush)

options{
        directory "/var/cache/bind";
};

対策終了後のsyslogを見るとDDosの形跡と思われる多くの問い合わせが着ている。
特に多いのが「somethingstrange.netfirms.com」と「webpanel.sk」についての問い合わせ。

Sep 24 11:50:04 localhost named[11347]: client 65.129.239.237#22124: query (cache) 'somethingstrange.netfirms.com/ANY/IN' denied
Sep 24 11:50:05 localhost named[11347]: client 65.129.239.237#59962: query (cache) 'somethingstrange.netfirms.com/ANY/IN' denied
Sep 24 11:50:05 localhost named[11347]: client 69.31.20.75#10270: query (cache) 'webpanel.sk/ANY/IN' denied

named_dump.dbを確認しても上記のドメインに関するキャッシュはない。
単純に問い合わせているだけのようだ。

対応方法

DNSには2つの機能(役割)がある。

(1)コンテンツサーバ
自分が管理しているドメインに関する情報の問い合わせへの回答

(2)キャッシュサーバ
(1)以外の問い合わせに対する回答

今回の対策とでは(2)に対する問い合わせを社内のみに限定する。
named.conf.optionsに以下を記述して基本社外からの問い合わせを拒絶。

 allow-query{
                localhost;
                社内のネットワーク
        };

弊社が管理しているドメインについては問い合わせを許可

zone "管理対象ドメイン" {

        allow-query{any;};
};

以上

GPS(eTrex10J)を持って西新宿を歩いてみた

株式会社カーネルでは、GPS(eTrex10J)を使用した商圏等の計測を行うサービスを提供しています。

高層ビル街でのeTrext10Jの精度を計測するために西新宿を徒歩で計測してみました。

※GPS、GLONASS、みちびきを有効にしています。

clip_3

ASCII「みちびき衛星対応のGPSナビ『ガーミン eTrex』の実力を徹底検証」

PHP(Windows)で独自の拡張DLLを作成

実行環境

Windows2008R2(64bit)
IIS
PHP5.4.31の非スレッドセーフ版(IIS を使う場合は、非スレッドセーフ版の PHPのほうが安定しているらしい)
環境構築の為にダウンロードしたファイルは(php-5.4.31-nts-Win32-VC9-x86.zip)

開発環境

PHP5.4.31のソース等が入手できなかったため5.4.33のそれをダウンロード

php-5.4のダウンロードサイト

「Download source code」よりphp-5.4.33-src.zipをダウンロード

「VC9 x86 Non Thread Safe」-「Zip」よりphp-5.4.33-nts-Win32-VC9-x86.zipをダウンロード

clip_1ii

php-5.4.33-nts-Win32-VC9-x86.zipをC:\phpに展開。
(C:\phpにはパスを通す)

php-5.4.33-src.zipをC:\php-srcに展開。

Cygwin

拡張dllのフレームワークの作成等にCygwinのコマンドを使用するのでC:\Cygwinにインストール

Cygwinのサイトよりsetup-x86.exeをダウンロードしてセットアップ実行

必用なモジュールが不明だったのでフルインストールを実行したが、texlive-collection-basic.shのインストールで止まってしまった。

フルインストールをやめてデフォルトインストールをしたが、これでも同様にインストールが完了しなかった。

一応、今回の必用なモジュールはインストールされたようなので、深くは追求しない。

VC

VisualStudio2008はあらかじめインストール済

※別途SDKはインストールしていない

拡張DLLのテンプレートを作成

Visual Studio 2008コマンドプロンプトを開いてカレントをC:\php-src\extに移動して以下のコマンドを実行
※php_test.dllを作成するためのプロジェクトワークスペースが作成される

php ext_skel_win32.php --extname=test

config.w32ファイルの編集

C:\php-src\ext\test\config.w32を以下に従って編集

// $Id$
// vim:ft=javascript

ARG_ENABLE("test", "enable test support", "no");

if (PHP_TEST != "no") {
	EXTENSION("test", "test.c");
}

configure


C:\php-srcをカレントにして以下のコマンドを実行

buildconf
configure

正しく実行されればC:\php-src/main/config.w32.hが作成される

C:\php-src\ext\test

プロジェクトの設定とコンパイル

VCでC:\php-src\ext\test\test.dspを開く。
(test.dspはVC6用のプロジェクトファイルなのでVC2008用に変換)

アクティブなプロジェクトをRelease_TSに設定

追加のライブラリプロジェクトにC:\php\devを追加

スクリーンショット 2014-09-22 17.19.25

プリコンパイルプロセッサからZTS=1を削除
(スレッドセーフの時は不要)

スクリーンショット 2014-09-22 16.57.57

参照するライブラリをphp5ts.libからphp5.libに変更
(スレッドセーフの時は不要)

clip_2

以上の設定完了後、コンパイルを実行するとC:\php-src\ext\php_text.sllが作成される

関数の追加

関数Procを追加(引数には数値と文字)

php_test.h

以下を追加

PHP_FUNCTION(Proc);

test.c

test_functions[]にProcを追加

const zend_function_entry test_functions[] = {
	PHP_FE(Proc,	NULL)
	PHP_FE_END	/* Must be the last line in test_functions[] */
};

引数で受けた数値と文字列より文字列に変換して返す関数の実態

PHP_FUNCTION(Proc)
{

	char *arg = NULL;
	int arg_len, len;
	long n;
	char *strg;
	

	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &n, &arg, &arg_len) == FAILURE) {
		return;
	}

	len = spprintf(&strg, 0, "number=%d string=%s", n, arg);
	RETURN_STRINGL(strg, len, 0);
}

以上でリコンパイル

DLLの検証

php_test.dllを実行環境のD:\php\extにコピー

php.iniに以下を追加

extension=php_test.dll

関数の呼び出しをコーディング

$s=Proc(100, "tarum");
echo($s);

以上で正しく動作される

参考サイト


単純な PHP エクステンションの開発方法

OpenLayersでGoogleMap上にGeoServerのWMSを表示

道路データ(数年前のデータで旧日本則地形)をGeoServerで配信してGoogleMap上に表示。
同様のことを電子国土でやった経験から簡単にできると思ったが、
意外にてこずり、時間がかかったのでメモ。

GeoServerの設定

特別な設定はしていない「Native SRS」、「Declared SRS」共に旧日本則地形を指定
※表示されない時はSRSを色々と変更したが、結局このまま。

clip_13

OpenLayersのコード

GoogleMap、OSMをOpenLayersで表示する時はmapの投影にEPSG:900913を使用する。
但し、以下のように投影を敢えて明記せずに使用することがある。
もちろん、これは正しく動作する。

var map = new OpenLayers.Map('id_div_map');
var gmap = new OpenLayers.Layer.Google("Google ROADMAP",{numZoomLevels: 20});
map.addLayer(gmap);

しかし、ここにwmsのレイヤーを追加しても正しく表示されない。
OpenLayers.Mapに正しく投影の情報や最大のExtentを明示的に指定する必要がある。

var map = new OpenLayers.Map('id_div_map', {
	maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
	maxResolution: 156543.0399,
	numZoomLevels: "auto",
	units: 'm',
	projection: new OpenLayers.Projection("EPSG:4326"),
	displayProjection: new OpenLayers.Projection("EPSG:900913")
	});
var gmap = new OpenLayers.Layer.Google("Google ROADMAP",{numZoomLevels: 20});
map.addLayer(gmap);
var road = new OpenLayers.Layer.WMS("LOCAL_ROADS",
	"http://192.9.200.25/geoserver/road/wms?",
	{
		LAYERS: 'road:ROAD5439',
		format: 'image/png',
         	transparent: 'true',
         	isBaseLayer: 'false',
         	projection: 'EPSG:4301',
         	reproject: 'true',
		styles: ''
	});
map.addLayer(road);

※maxExtentに指定した値は(-180、-90)、(180、90)を座標変換した値
-20037508.34,-20037508.34,20037508.34,20037508.34

表示結果

clipll

OpenLayersで著作権等を表示

OpenLayersでMapQuest-OSMタイルを無償で使用するためには著作権表示が必要。

改めてOpenLayersにおける著作権表示について調査。

コントロールを空でOpenLayers.Map作成すると

var map = new OpenLayers.Map('map', {controls:[]});

拡大縮小等のコントロールは何も表示されない。

clipc

OpenLayers.Control.Attributionコントロールを追加すると

map.addControl(new OpenLayers.Control.Attribution());

勝手に著作権情報が表示される

Googleの場合

clipg

OSMの場合

clipo

MapQuest-OSMの場合

clipo2

OSMの著作権だけ表示されてMapQuestが要求する著作権表示になっていない!

オプションで明示的に指定

var mapQuestOption = {
attribution:'Tiles Courtesy of MapQuest'
};
var layer_osm_mapquest = new OpenLayers.Layer.OSM("MapQuest-OSM", mapQuestArray,mapQuestOption);

期待した結果になった

clipo3

OpenLayersでMapQuest-OSMタイル表示

OpenLayers.Layer.OSMで使用可能なタイルサーバーは以下に記載
TMS
MapQuestは比較的シンプルで見栄えがよい
「TMS」にはMapQuestはFREEと記載しているが改めて確認。

MapQuestのサイトには
「利用規約
マップクエストのオープンタイルは、以下の条件で無料で使用できます。
マップクエスト、OSMのタイルを使用する場合は、OpenStreetMapは、データのためのクレジットが与えられなければなりません-を参照して、この項の詳細は、OSMの法的FAQのを。
マップクエストオープンエアリアルタイルを使用している場合は、属性をお願いとして、「一部の礼儀はNASA / JPL-Caltechの、米国発農業、農業サービス庁 “。
」のタイル礼儀に置かないでくださいマップクエストを “あなたのページ上、またはマップの著作エリアのワードリンク」にマップクエスト ” を http://www.mapquest.com 。 以下は、サイトで使用できるコードスニペットは次のとおりです。

Tiles Courtesy of MapQuest

アプリケーションが(現在は毎秒4,000以上のタイルとして定義される)重い使用状況を取得する場合は、私達は私達に電子メールを送信することにより、お知らせくださいopen@mapquest.com 。 私たちが知っておくと余分なトラフィックに対応するように、使用目的の推定値を記載してください。
(例えば-プレスリリースや企業の発表)の発表があるだろう場合は、マップクエストでご連絡くださいopen@mapquest.com私たちは良いニュースとマップタイルの使用量の任意の期待のジャンプを知っているように。
これらのタイルの使用はご自身の責任である。
これらのタイルの使用法は、私たちに支配されている利用規約 。
OpenStreetMapのデータは下でライセンスされてオープン·データ·コモンズオープンデータベースライセンス(ODbLの)。」と記載されており、著作について記載すればフリーで使用可能。

clip_1

JQuery UI のDialog上にSlickGridを配置するとBorderの一部が表示されない

JQuery UI のDialog上にSlickGridを配置するとBorderの一部が表示されない

clip_2

JQuery UI のDialogのpaddingを以下に変更すると正しく表示される

以下のスタイルを追加

.ui-dialog{
	padding: 10px !important ;
}
.ui-dialog-content{
	padding: 10px !important ;
}

clip_6

jQuery DialogのzIndex(z-Index)を設定

以前は
Dialogのオプションで設定できたが、
jQuery UI 1.10よりこのオプションは廃止された。
よって以下に従ってスタイルシートで設定

.ui-dialog { z-index: 1000 !important ;}