no marked region found along edge

Android

no marked region found along edge

Android Studioを使っていて、表題のエラーが出てビルドできない時があります。
9patchを使って作っていても、エラーが出る時があるので、その時は9patchで画像を作り直しましょう。

mod_rewrite 複数のパラメーターを書き換え

Apache

mod_rewrite 複数のパラメーターを書き換え

Apache .htaccess でURLを書き換えで書いたように、.htaccessにmod_rewriteの指定を書くことで、動的なURLも静的なURLに見せかけることができます。

複数のパラメーターがある時はどうでしょう。

たとえば

 http://hogehoge.jp/index.php?action=search&prefecture=1

というURLを

 http://hogehoge.jp/search?prefecture=1

としたいのであれば、Apache .htaccess でURLを書き換えで書いた.htaccessの書き換えルールの末尾を変えて

 RewriteRule  ^([0-9a-zA-Z_/-]+)$ index.php?action=$1 [QSA,PT] 

とします。

[QSA]は、「Query String Append」の略で、引数をつけたいときに使うフラグだそうです。
(By http://d.hatena.ne.jp/hato_mune/20080928/1222569429

でもどうせだったら

 http://hogehoge.jp/search?prefecture=1

じゃなくって、全部静的にしたいじゃないですか。

 http://hogehoge.jp/search/prefecture/1

みたいに。

そのためには.htaccessに

 RewriteRule  ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?action=$1&$2=$3 [QSA,PT] 

と書いておきます。

これで、ユーザーがアクセスする静的なURL

 http://hogehoge.jp/search/prefecture/1

は実際には

 http://hogehoge.jp/index.php?action=search&prefecture=1

にアクセスしていることになります。

パラメーターが増える場合は、rewrite ruleの正規表現とパラメーターを増やして

 RewriteRule  ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?action=$1/$2&$3=$4 [QSA,PT] 

などとします。

mod_rewrite難しい~
もっとスマートなやり方があれば、教えてください。

mod_rewrite クエリーストリングの値に基づいてリダイレクトする

Apache

mod_rewriteのRewriteRuleではクエリーストリングの内容を条件にしたルールを記述することはできません。クエリーストリングの内容を条件にしたい場合は、RewriteCond %{QUERY_STRING}を使います。

以下は、クエリーストリングがparam=sslで始まる場合にHTTPSにリダイレクトする例です。

 RewriteEngine On
 
 RewriteCond %{SERVER_PORT} ^443$
 RewriteCond %{QUERY_STRING} ^param=ssl
 
 RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R]

pdo LIMITをbindParamする

PHP

pdoでlimitをbindParamで設定しようとするとsyntaxエラーがでることがある。
原因はパラメータは文字列で渡されるためで、数値で必要な場合はbindParamで明示的にint型と言う必要がある。
これは単純に引数に数値型を渡してもだめ。

$limit = 10;
$query = ‘SELECT * FROM `table` LIMIT ?’;
$statement= $dbh->prepare( $query );
$statement->bindParam( 1, $limit, PDO::PARAM_INT );
$statement->execute();

また
Cannot pass parameter 2 by reference
当エラーはパラメータは変数じゃないとダメで、定数や値をそのまま入れた場合に発生する。定数や値をそのまま利用する場合はbindする必要ないかもしれないが、一旦変数に入れないといけない

mapbox Mapbox Studio で作ったデータをJavascriptで受け取る

Javascript

Mapbox]]ではいろんなことができますが、[[Mapbox Studioで地図がカスタムできたり、地図上にマーカーやポリゴン、線が勝手に引けるのもMapboxの魅力の一つです。

ここでは、MapboxStudio マーカーを置くで作ったような、マーカーやポリゴンの情報を、ではMapbox GLを実装したWeb地図で、どのように取得するかを書いておきます。
(落とし穴もあったので…)

まず、ポリゴンやマーカーの位置情報は、基本的にDatasetsというものの中に入っています。

このわかりにくい、Mapbox API DocumentationのDatasetsを見てみましょう…。
https://www.mapbox.com/api-documentation/#datasets

まずですねー、

 "https://api.mapbox.com/datasets/v1/{username}?access_token=your-access-token"

でDatasetsのリストが取得できると書いてありますが、やってみると、Not foundになります…。

めげずに!!
datasetを指定して、取得する、というのをやってみます。

https://api.mapbox.com/datasets/v1/{username}/{dataset_id}?access_token=your-access-token”

ここで、2つ目の罠が!
このdataset_idというのは、Mapbox Studioの中の、Datasetの画面の次の部分に書かれています。
最初、名前とかかと思ってたw

&ref(dataset_id.png);

すると、レスポンスがJSONで帰ってきます。
全体的なサンプルコードを掲載しておきます。

 function getDatasets(){
 	
 	var dataset_id = "hogehoge";
 	
        var url ="https://api.mapbox.com/datasets/v1/hogehogecompany/" + dataset_id + "?access_token=" + mapboxgl.accessToken;
 
        var xmlhttp = new XMLHttpRequest();	
 	
        xmlhttp.onreadystatechange = function() {
 		    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
 		    	
 		        var result = JSON.parse(xmlhttp.responseText);
 		    
 		    }else{
 		    	
 		    	$("#result").text("指定のデータは存在しません");
 		    }
 	
 		}
 	
 	xmlhttp.open("GET", url, true);
 	xmlhttp.send();
      	
 }