2015年11月30日月曜日

JavaScriptを使って外部ファイルを読み込む方法

こんにちわ、開発者のⅠです。

さて、前回から時間が空いてしまいましたが、GoogleMapに関わるお話の続きです。

前回は、Google Mapにマーカーを表示させる方法について紹介いたしましたが、今度はその応用として、マーカーのデータを外部ファイルから読み込む方法について紹介したいと思います。

今回は、名前、住所、座標(緯度と経度)を記録したCSVファイル(拡張子: .csv)を読み込む場合を例として挙げたいと思います。

まず、外部ファイルを読み込むために必要な関数 getCSVFileをMapオブジェクト宣言の下に記述します。
 
 function getCSVFile() {
   var xhr = new XMLHttpRequest();
   xhr.onload = function () {
   createArray(xhr.responseText);
   };

   xhr.open("get", "markerlist.csv", true);
   xhr.send();
 }
 getCSVFile();

次に、読み込んだCSVファイルのデータをsplitメソッドを使って "\n(改行コード)"毎に配列へ振り分けます。
続けて ", (カンマ) "毎に振り分けていきます。
そして、カンマで区切った名前、住所、座標の各データを変数name、address、latlngにそれぞれ代入します。
あとは、関数 createMarkerでマーカー生成し、インフォウインドウ(吹き出し)の中身をHTML形式で記述します。

function createArray(csvData) {
   var DataArray = csvData.split("\n");
   var csvArray = new Array();
   for (var i = 0; i < DataArray.length; i++) {
    csvArray[i] = DataArray[i].split(",");
   }

   insertData(csvArray)
  }

  
  function insertData(csvArray) {
   for (var i = 0; i < csvArray.length; i++) {

    // 配列csvArray[i][0]を変数nameに格納 
    var name = csvArray[i][0];

    // 配列csvArray[i][1]を変数addressに格納 
    var address = csvArray[i][1];

    // 配列csvArray[i][2]とcsvArray[i][3]を変数latlng に格納 
    var latlng = new google.maps.LatLng(csvArray[i][2], csvArray[i][3]);


    // 関数createMarkerに引数を指定します 
    createMarker(name, address, latlng, map)
   }
  }
 }

 // 引数で渡された値を変数に代入し{}内の処理を実行 
 function createMarker(name, address, latlng, map) {

  // InfoWindowクラスのオブジェクトを作成 
  var infoWindow = new google.maps.InfoWindow();

  // 指定したオプションを基にマーカーを作成 
  var marker = new google.maps.Marker({ position: latlng,  map: map });

  // addListener を使ってイベントリスナーを追加 
  // 地図上のマーカーがクリックされると{}内の処理を実行。
  // currentInfoWindowに値が入っているならば、既に開いている情報ウィンドウを閉じる 
  // 表示される情報ウィンドウは常に一つ 
  google.maps.event.addListener(marker, 'click', function () {
   
    if (currentInfoWindow) {
     currentInfoWindow.close();
    }

    // InfoWindowOptionsオブジェクトを指定します
    // HTML形式で記述する
    infoWindow.setContent(
    '
' + '
' + name + '
'+
'
' + address + '
' + '
' ); // マーカーに情報ウィンドウを表示 infoWindow.open(map, marker); // 開いた情報ウィンドウを変数へ格納 currentInfoWindow = infoWindow; }); } // ページ読込時に地図を表示 google.maps.event.addDomListener(window, 'load', initialize);

これで、マーカーの情報を外部ファイルから読み込むことが出来るはずです。
こうすれば、マーカーの追加・削除はソースコードではなく外部ファイルを編集するだけで済みますね。

それでは、今日はこの辺りで失礼します。

C# ref修飾子とout修飾子とは

こんにちは山田です。
メソッドに引数を参照渡しで渡す方法です。


メソッドの戻り値で完結することが多いのですが、
それ以外に、戻り値とは別に引数を返したい場合があります。

自分が使うシーンとしては、メソッドの戻り値でDBから取得したデータリストを取得して、
そのデータの個数の値を別個に取得したいときなどがあります。

開発環境:ASP.NET2.0
開発言語:C#

値渡しの場合と、参照渡し場合の違いをまとめてみました。

■元々(値渡しの場合)
    public static void A(int arg1)
    {
        arg1 = 50;
    }
    public static void Main()
    {
        int x = 10;
        A(x);
        Console.WriteLine(x);
    } 
出力は10のままで、呼び出しもとには影響がありません。


■ref修飾子(参照渡し)
    public static void A(ref int arg1)
    {
        arg1 = 50;
    }
    public static void Main()
    {
        int x = 10;
        A(ref x);
        Console.WriteLine(x);
    } 
出力は50になる
呼び出しもとの数値が変わりました。

■out修飾子(参照渡し)
outを使う場合はrefとは違い
あらかじめ値を代入しておく必要がなくなります。
    public static void A(out int arg1)
    {
         arg1 = 50;
    }

    public static void Main()
    {
        int x; //←ここで代入しても参照が渡ることはないです。
        A(out x);
        Console.WriteLine(x);
    } 
出力が50になる。

その代わりAメソッド内でoutパラメータのarg1の値を使用することができず、
必ず、新しい値が代入されてしまいます。

2015年11月27日金曜日

ASP.NETでのURLリライトの流れ


こんにちは山田です。
長年の疑問のURLリライトについてわかってきたので
その覚書です。 

開発環境:ASP.NET2.0
開発言語:C#
IIS:6.1

■URLリライトの別名
URLリライト=URL書き換え
日本語だとURL書き換えとなります。

■そもそもURLリライトは必要なの?
個人的な疑問としてページリライトの技術はURLから判断して、
IISのサーバーのファイルディレクトリ(どの階層にいるのか)がわかりにくくなるし、
今見ているページの関連する記事を探したい場合、URLの法則性がわからないのでなんと打ち込めばよいのかわからない等の感想を持っていました。(こんな使われ方は想定されていいないと思いますが、、、)

一般的にどういう目的で使われているかと
  • URLが短い。
  • URL入力が簡単になる。
  • URL を見ると、サイトの構造がわかる。
  • "短縮可能 (hackable)" である。つまり、ユーザーが URL の一部分を入力すれば、そのサイトを表示して目的のページに移動できる。
というメリットがあるので、やはり必要な技術のようです。
特にURLが短い場合、気軽にそのwebページにアクセスしやすくなりますね。

ASP.NET での URL 書き換え

↑ここをざっと読んでみたのですが。
Umm...よくわからない。

■自分なりに実装したページリライトの流れをまとめてみました。

・実態のURL:/contentDetail.aspx
・必要な引数: userID=yamada&contentID=101
・リライト後のURL: http://blog.jp/yamada0101/

URLで
http://blog.jp/yamada0101/ → とアクセスさせたかった場合
   ↓
web.configにリライトルールを記述する(事前に)
   ↓
IISがリライトルールにそって、そのURLから実態のURLに直す
(/yamada0101/→/contentDetail.aspx?userID=yamada&contentID=101)
    ↓
IISが実態のファイルのページを判定する
(/contentDetail.aspx)
   ↓
クエリスストリングの必要なIDをRequestで取得する
   ↓
取得したuserIDとcontentIDから目的のブログ記事を
DBから取り出してページをレンダリングする
   ↓
  終わり

この流れがわからなくて、もやもやしていました。
他の言語や、開発環境だとまた違うのかな?
またふと疑問に思ってしまいました。

2015年11月26日木曜日

DISTINCTを使って重複を除外して表示

DISTINCTを使って重複を除外して表示

こんにちは山田です。
DB環境:MSSQL

登録したデータから、このカラムってどんな種類があったっけ?
と思った時に役立つ方法です。
つまり
取り出したレコードから重複する行を除外することができます。


■元のテーブル

category    color    size
----------------------------
adult         red       small
adult    blue     big
adult    blue     medium
kid       red       big  

■クエリの文法
 一意にしたいカラムの前にdistinctをつけたあげればよいです。

SELECT DISTINCT category

FROM mst_test


■結果
category
----------------------------
adult
kid

そもそもdistinctとは、「まったく異なるもの」という意味になるみたいです。

2015年11月25日水曜日

viewstateの中身を見ようと思ったがうまくできない

ブログネタ

こんにちは山田です。

postとgetの違いについて以前お話したのですが
postで送信されるviewstateについて掘り下げたいと思います。

■ViewStateとは
ビューステートは、ページとコントロールの値をラウンド トリップ間で保持する方法です。
現在のページの状態と値をBase64でエンコードして隠しフィールドに出力されます。

【~viewstateの中身を見よう~】

開発環境:ASP.NET 2.0
開発言語:C#

■元データをつくる
こんな感じで簡単なASPXの元データをつくります

[aspx]



 
  <%=textBox1.Text%>と入力されました


■ViewStateの中身を見る
ページのソースを開くを実行して
以下のviewstateの値をコピーしてその下のデコードツールにいれて実行してみる
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA0NzQxNTcxOWRky33WseENfFC3H1lsNdv99j+ZHmA=" />
</div>

http://www.ahref.org/app/base64/base64.cgi

■結果

1047415719dd�}ֱ�
|P� Yl5���?� `

文字化けしてしまった。
うまくいかない、、、。
文字コードがあっていないのか、よくわからない。
もうちょっと調べてみようと思います。

2015年11月24日火曜日

Google Mapにマーカー(目印)を表示する

こんにちわ、開発者のⅠです。

さて、前回は便利機能の表示の切替についてお話しましたが、今回はマーカーを表示させる方法についてお話したいと思います。

マーカーは皆さんご存知でしょうか?
Google Map上で建物などのスポットをクリックしたり、キーワード検索を行うと現れる"赤い目印"のことです。
なんとなく愛嬌がありますね。


それでは早速、実践してみましょう。

マーカーを表示させるには、経度と緯度が必須です。
以下のコードを、 関数 initializeに追加してみてください。
var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);

var markers = [
    ['東京タワー',35.658589, 139.745615],
    ['浅草 雷門',35.711020, 139.796336],
    ['中央本線 笹子駅',35.603862, 138.825087],
    ];
for (var i = 0; i < markers.length; i++) {
var name = markers[i][0];
var latlng = new google.maps.LatLng(markers[i][1],markers[i][2]);
createMarker(latlng,name,map)
}
さらに、以下の関数を新規に追加します。
function createMarker(latlng,name,map)
{
var infoWindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({position: latlng,map: map});
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(name);
infoWindow.open(map,marker);   
});
}

これで、三箇所にマーカーが表示されていると思います。 しかし、この方法ではマーカーを表示させたい箇所が増減した場合にその都度、ソースの編集が必要になります。 次回は、マーカーの座標を外部ファイルから読み出す方法についてお話したいと思います。 それでは、また!

HTMLのForm要素について

HTMLのForm要素が忘れがちだったので一覧にまとめてみました。

■要素一覧
action     :送信先ファイルのURL
method     :データの送信方法(get か post)(省略するとgetになる)
enctype     :送信時のデータ形式
accept-charset     :送信時の文字コード
novalidate  new     :入力チェック (バリデート) せずに送信
autocomplete  new     :オートコンプリート機能のON,OFF
name     :フォームに固有の名前をつける
target     :結果を表示するウィンドウを指定

■サンプル

【送信したい部品】
<p>お名前:<input type="text" name="name"></p>
<p><input type="submit" value="送信する"></p>


【Formでくくる】
<form action="search.aspx" method="post">
<p>お名前:<input type="text" name="name"></p>
<p><input type="submit" value="送信する"></p>
</form>


actionに送信先のURL
methodに送信方法を記述してみました。


■getとpostとは

【method="get"とは】
特徴としては、クエリストリング(フォームの内容)がactonで指定されたURLの「?」の後につけて送信されます。
つまりデータがURLにくっつきます。
ですので、短いデータの時に使われるようです。

【method="post"とは】
postでは、クエリはURLと連結されず、各データ自体が送信されます。
なので容量の大きいデータの送信が可能になります。

2015年11月20日金曜日

Google Mapのカスタマイズ

こんにちわ、無性にかまぼこが食べたい開発者のⅠです。
明日から3連休!という方もいらっしゃると思いますが、地域によっては天気が思わしくないようですので、外出される方は十分ご注意ください。

それでは、前回から引き続き、Google Maps JavaScript APIに関係するお話をしたいと思います。

Google Mapを無事に表示出来た方、もう少しカスタマイズしてみましょう。

マップのレイアウトにかかわるvar optionのプロパティをもう少し紹介しておきますと、


① mapTypeControl: (true/false)

「地図⇔航空写真」を切り替えるボタンの表示・非表示を切り替えます。
ページに表示するマップのサイズとの兼ね合い等の理由で非表示にしたい方もいらっしゃると思います。その場合には、"false"に設定しましょう。


② streetViewControl: (true/false)

「ストリートビュー」の機能の表示・非表示を切り替えます。
余談ですが、APIを利用して埋め込んだMapでも公式ページと同じように表示できることに驚きました……。さすが、Googleですね。


この二つをJavaScriptに追加してみると、このようになります。

 google.maps.event.addDomListener(window, 'load', function () {
var map = document.getElementById("map_canvas");
 var options = {
  zoom: 11,
  center: new google.maps.LatLng(35.360667, 138.727775),
  mapTypeId: google.maps.MapTypeId.ROADMAP
  
//↓ここから↓
streetViewControl: false,
  mapTypeControl: false  
//↑ここまで↑
};
  new google.maps.Map(map, options);
 });

便利機能だからと言ってとりあえず残すのではなく、そのページの趣旨や見た目に合わせて表示を切り替えてみると良いかもしれませんね。

それでは今回はここまでです。








「♡ ;」はなんでしょう?

こんにちは!Sです。
タイトルを見てすぐにHTMLの特殊文字だ!とピンときた方はプロですね。
今日は特殊文字のお話です。

特殊文字といえば
&quot;   &amp;   &lt;   &gt;   &nbsp;   &copy
などが有名ですが、実は他にもものすごく沢山あります。
今日は「♡」をどうしても出したくて改めて一覧表を調べました。
(「&#9825;」の答えは「♡」でした。)

その際、役に立ったサイトもまとめておきます♪

▼特殊文字コード表
http://www.shurey.com/js/labo/character.html

▼エンコードの便利ツール
http://www.tagindex.com/tool/url.html

URL最後のスラッシュとは

URL最後のスラッシュがない

こんにちは山田です。
雑誌とかテレビを見ているときに気になってURLをアクセスしてみると
あれ、NotFound… ないじゃんということが、、、あるかもしれませんね。

さて、
お客さんに印刷して渡したURLに最後スラッシュがついていなかったということになっておりました。
実際にURLを開いてみると NotFound…
その時の対応の話です。

正:http://sample.com/contents/0001
誤:http://sample.com/contents/0001/

一般的な人からするとなくてもあっても一緒なんじゃないかと思われがちな箇所だと思います。
(僕もチラシ屋さんだったらあまり気にしなそう)

豆知識として
そもそもURLの最後のスラッシュには「トレイニングスラッシュ」という名前があるようです。

というわけで、
誤っているURLを正しいURLへ301リダイレクトさせてみました。

開発環境:ASP.NET2.0
IIS:ver8.5

web.config
<system.webServer>
 ~
 <rewrite>
   <rule name="URLの最後にスラッシュをつけてる" stopProcessing="true">
     <match url="^contents/([0-9]{7})$" />
     <action type="Redirect" url="/contents/{R:1}/" redirectType="Permanent" appendQueryString="true"  />
   </rule>
 </rewrite>
</system.webServer>

属性
stopProcessing:このルールを適用した場合、そこでルールの処理を終了するかどうかを指定する
        trueであれば、これ以降のルールは適用しない
        falseであれば、さらに別のルールで指定した別のURLへリダイレクトされる
       (属性を省略したらfalseになります)
redirectType:このリダイレクトがどういった意味かをレスポンスコードで返すことが出来ます
       (省略):301  永続的
       Permanent:301 永続的
       Found:302    検出
       SeeOther:303   その他
       Temporary:307  一時的
appendQueryString:置換時に、現在の URL のクエリ文字列を保持するかどうかを指定する
               trueであれば、クエリ文字列を保持する(つまり、元の URL のクエリ文字列が置換された URL に追加されます)
          falseであれば、クエリ文字列を保持しない         
          属性を省略したら既定で TRUE と見なされます。

2015年11月19日木曜日

404エラーページのSEO効果

404エラーページのSEO効果

こんにちは山田です。

404ってネットサーフィンしたことがある人ならだれでもしっている
メジャーなエラーですよね。

このエラーの発生要因とすれば
  • 人為的なURLの入力ミス
  • ページの削除・移動
が考えられますね。

ということで、SEOの観点からすると404エラーはどうなんだろうと思い調べてみました。

リンクをWebページにペタペタ張っていくと
リンク先がないファイルに行き当たることがあります。
クローラーはよくやっていそうですね。

もし、404エラーページ到着した場合
何もリンクがなかった場合
 :そこで終わり
有益なコンテンツへのリンクがあった場合
 :クローラーはそのリンクを辿ってその後も多くのページを回遊しようとしてくれます。
  

404エラーページにおけるSEO効果としては上記のような対策になりえます。

有益な 404 ページを作成する


SEO効果を最大化させる404エラーの対処法

 有益な404ページのデザイン設計と実例まとめ 
  ↑404ページがゲームになっている実例もあって面白いです。

2015年11月18日水曜日

【Java】UTC時間の文字列をTimestamp型に変換する方法

こんにちは。エンジニアのKです。

solrのレスポンスに含まれる時間文字列をTimestamp型に変換しようとしたときに、少しはまったので覚書です。
solrに格納される時刻はデフォルトでUTC時間とのことで、ぱっと見、日本時間から9時間前の表記となります。
solrのdate型カラムのレスポンス値は以下のような文字列になっています。

2015-11-18T10:00:00Z

この文字列を以下のようにしてTimestamp型に変換します。

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

(略)

    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    try {
        Timestamp t = new Timestamp(dateFormatter.parse("2015-11-18T10:00:00Z").getTime());
        System.out.println(t); // 2015-11-18 19:00:00.0
    } catch (ParseException e) {

    }


  1. SimpleDateFormatでフォーマットを指定します。TとZは'(シングルクオート)で囲んでエスケープしないとParseExceptionが投げられてしまいます。
  2. SimpleDateFormat#setTimeZoneでタイムゾーンを設定できます。今回は対象の文字列にあわせてUTCにします。
  3. あとはSimpleDateFormat#parseでDate型オブジェクトに、Date#getTime()でUNIXタイムスタンプ値に、さらにTimestampのコンストラクタに渡すことで、無事Timestamp型に変更することができました。


リピーターにバインドしたデータの奇数個目と偶数個目で異なるクラスのCSSをあてる方法

こんばんはSです!

長いタイトルの通り、今日は
【リピーターにバインドしたデータの奇数個目と偶数個目で異なるクラスのCSSをあてる方法】
についてです♪

こういうときに役に立つのが%で、下記のように書くと上手くいきます。

<li class='<%# (((Container.ItemIndex % 2) == 1) ? "even" : "")%>'>
※even : 偶数個目にだけ適用するCSSのクラス名
(奇数個目じゃない?と思った方は私と同じ罠にはまっています笑)

▼イメージ

<li >aaa</li>
<li  class='even'>aaa</li>
<li >aaa</li>
<li  class='even'>aaa</li> ・・・


Google Maps JavaScript APIを使って、マップをWebページに埋め込む方法

こんにちわ、開発者のⅠです。
今朝、JRのある路線で遅延が発生していたようですが、その原因が猪と衝突したことによる車両不具合だったそうです……どれだけ強い衝撃だったのでしょうか。

さて、今回は前回の投稿の続きです。


前回紹介したGoogle Maps APIには、様々な種類があります。

  • Google Maps Android API
  • Google Maps SDK for iOS
  • Google Maps JavaScript API
  • Google Places API for Android
  • Google Places API for iOS
  • Google Maps Roads API
  • Google Static Maps API
  • Google Street View Image API
  • Google Maps Embed API
  • Google Places API Web Service
  • Google Maps Geocoding API
  • Google Maps Directions API
  • Google Maps Distance Matrix API
  • Google Maps Geolocation API
  • Google Maps Elevation API
  • Google Maps Time Zone API
今回はその中の「Google Maps JavaScript API」を利用する場合について、お話したいと思います。

まず、マップを表示させたいページのheaderに以下のタグを追加してください。

これを追加することで、APIのライブラリを読み込みます。


次に、JavaScriptを記述します。まずはプレーンな地図を表示してみましょう。

 google.maps.event.addDomListener(window, 'load', function () {
  var map = document.getElementById("map_canvas");
  var options = {
   zoom: 11,
   center: new google.maps.LatLng(35.360667, 138.727775),
   mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  new google.maps.Map(map, options);
 });

var optionの中のプロパティを説明しますと、以下の通りです。

① zoom = "ズーム(拡大)値"の初期値、大きいほど拡大されて表示されます

center = "マップの中心座標(緯度, 経度)"の初期値、この座標を中心としてマップが表示されます

③ mapTypeId = "表示するマップの様式"を指定します。今回は"ROADMAP(=2D地図)"を指定しています。

※なお、「zoom」と②「center」は必須です。この2つを指定しないとマップが表示できません!!

いかがでしょうか?
地図の仕様ですが、公式ページとほぼ同等です。

これをさらにカスタマイズすることも可能ですが、それについては次回お話したいと思います。


---------------------------------------------------------------------------------

*追記 (11月19日)*

コメント欄よりご指摘を受けまして、ここに追記させていただきます。

上記の内容に加えて、HTMLのbody内に以下のdivタグを加えてください。


これがマップを実際に表示させる場所となります。
つまりは、必須の要素です!
こんなに大事な内容をお伝えできていなかったこと、申し訳ありませんでした……。
また、コメントを下さったsystem kgさんに感謝いたします。

301リダイレクトとは

301リダイレクトとは


こんにちは山田です。


写真は明るければきれいに見えるなと思う今日この頃です。
うまく話をつなげられないので悔しい限りですが本題に入ります。

■そもそもリダイレクトとは
指定したWebページから、自動的にほかのWebページに転送される機能です。
おもにURLが変わったときに、新しいURLへ誘導するときに使われます。

■種類としては
301リダイレクト Webサーバーが別のサイトへ転送処理を行う 
302リダイレクト クライアントPCが転送処理を行う
があります。
サーバでやるのかクライアントでやるのかの違いです。

■SEO的には?
Geogleからすると301リダイレクトを推奨しているようです。
https://support.google.com/webmasters/answer/93633?hl=ja

設定方法についてはまた今度

2015年11月17日火曜日

カノニカルタグによくある間違い

こんにちは山田です。

カノニカルタグによくある間違いです。

×分割したページは1ページ目にカノニカルを向ける
            ↓
○view allページまたはrel=“next”とrel=“prev”を使う


実は1ページ目にカノニカルを集めるのは推奨されておりません。
そういった場合はページネーション(ページ送り)をつけてあげましょう。
例)3ページある場合

<link rel="canonical" href="http://www.example.com/article?page=1" />
<link rel="next" href="http://www.example.com/article?/page=2" />

<link rel="prev" href="http://www.example.com/article/?page=1" />
<link rel="canonical" href="http://www.example.com/article?page=2" />
<link rel="next" href="http://www.example.com/article?/page=3" />

<link rel="prev" href="http://www.example.com/article/?page=2" />
<link rel="canonical" href="http://www.example.com/article?page=3" />

最初はprevは不要で、最後はnextが不要になる点がご注意ください。

2015年11月16日月曜日

Google Maps API を使用する

こんにちわ、開発者のⅠです。
起床するたびに部屋の寒さに震えている今日この頃です。
皆さんはいかがでしょうか。

さて、今回のお題は”グーグルAPI”についてです。

そもそもAPIとはなんでしょうか?
”Application Programming Interface ”の頭文字をとった言葉であり、これを用いることで”Webサービス”を簡単にプログラム上で利用することが出来るようになります。

グーグルが提供するGoogle Maps API を使えば、みなさんもご存じのグーグルマップをプログラム上で簡単に利用することができます(ちなみに、最新のバージョンはV3です)。

その為にはグーグルアカウントが必須であり、以下のサイトでAPIを有効にする必要があります。
詳しい方法を知りたい方は、グーグル先生にお聞きするとすぐに答えてくれるはずです。

参照サイト名:Google Developers Console

その後、実際に利用する事になりますが、続きはまた次回にしたいと思います。
それではまた!

cssやjsファイルを確実に更新させる

こんにちは山田です。
身内ルールと思っていたものが実は広く一般的なやりかただったこと
というものに遭遇しました。
今日はそのお話しです。

開発環境:ASP.NET 2.0

CSSファイルに修正を加えて、よし動いたと思っていたら、
依頼者から「変わってないんだけど~」の声
ブラウザを更新してみると、、、

要するにクライアント側のキャッシュを読んでいたのが原因です。
これにクエリストリングを追加すると
新しいファイルでキャッシュしてくれるようになります。

<link rel="stylesheet" type="text/css" href="base.css" />

<link rel="stylesheet" type="text/css" href="base.css?date=20150101" />

クエリストリングの中身は何でもよいのですが、管理上日付が使いやすいと思います。

また、さらにファイルに更新を加えたら、クエリストリングをまたさらに書き換えてあげればOKです。
<link rel="stylesheet" type="text/css" href="base.css?date=20150102" />

2015年11月14日土曜日

Bloggerでインデックスステータスがずっと0 その2


お疲れ様です。岡田です。

前回、このブログのインデックスステータスが心停止状態になっているよ~という記事
(前回の記事:Bloggerでインデックスステータスがずっと0 その1
の末尾で「カステラ食べたい」と書いていたんですが、なんと後日リーダーがお土産でカステラをくださいました。
ありがとうございました。


その後インデックスステータスがどうなったか

いろいろやってみた前回の記事ですが、あれから3週間(もたってしまいましたが)
インデックスステータスは「ちょっと」増えました。

インデックスステータスが増えた
ちょっと増えた。

よ、、よかった、、、!!


導入してから2週間くらいは、数値が反映されないそうです。
(参考:Googleウェブマスターツールのその後「インデックスステータス」の数値がいつまでたってもゼロ?
(参考:インデックスステータスが0件から変動しない件について


よかったのはよかったのですが、4って少なくない?もっとあるんですけど。。。。

と思っていたら、大きな問題が発覚しました


ロボットによってブロックされたページがたくさん増えてた

こんなにブロックされてたなんて

4ページがインデックスに登録された裏で、38ページものページがブロックされていました。

robots.txt ファイルでブロックされているため、Google がアクセスできなかった URL です。」

ということは、前回設定したrobots.txtが悪さをしているみたい。


User-agent:* 
Allow: /search/label/
Disallow: /*archive 
Sitemap: http://stpsysdev.blogspot.jp/feeds/posts/default?orderby=UPDATED


基本方針としては、ラベルごとにページをまとめればページの内容がある程度そろうはずなので、ページとしても強くなるんじゃないかと思って、「Allow:/search/label/」を入れているのだけど、
このページたちはクロールされていないのかな?

どちらにせよ、robot.txtはこちらの意向通りに書かれているみたいなので、このままにしておくことにします。


サイトマップの中に表示されている「インデックスに登録済み」のページは「42」になっているから、
この「42」のうち「38」がブロックされているっていう意味なのかな。

ブロックされたということは、アーカイブページをブロックされたということだよね。

逆にインデックスに登録されたページがなんなのか、知りたいなぁ、、、、




続きます。

2015年11月13日金曜日

lengthとcountについて C#

こんにちは。
長年の疑問の「は」なのか「わ」なのかどちらか正しい表記か
「は」が正しいことがわかった山田です。
発音的には、waなので、「わ」が正しいが、
言葉の成り立ちとしては「は」になるみたいですね。


さておき、
C#でも、似たようなもので
lengthとcountがあります。
それぞれ配列の要素数に使われています。

使い分けについて調べてみました。

通常の配列
string[]の時はlengthを使い
コレクション
List<T>の時はcountを使っています。
(TはT型のオブジェクト)

だと思います。
(意外と情報がない、、、)

List<T> クラス

配列の長さを取得する

コレクションの方が動作が速いのでコレクションを使った方が良いとまとめてしまおうと思います。
わかったらまた追記したいと思います。

2015年11月12日木曜日

2つのリストを結合して任意の条件で並べ替え、上位のものだけ表示する方法

こんばんは!Sです。

今日は表題のようなことを行いましたのでその覚書です♪

①listAとlistBを結合する

listA.AddRange(listB);

②任意の条件で並び替える

listA.Sort(delegate(Vo _vo1, Vo _vo2)
{
if(_任意の条件)
{
return ;
}
});
③並べ替えたものの上位のものだけ表示する
listA.RemoveRange(int32,int32);
listNews.DataSource = listA;
listNews.DataBind();

他にもList<T>クラスのメソッドがたくさんあって驚きました!
https://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.110).aspx

SQLで列の最大値をだす

こんにちわ山田です。
ポッキーの日の翌日になるのですが、
この日にあやかって薬用石鹸のミューズが小ネタを挟んできてびっくりしました。
気になった方は知らない人は、ポッキー、ミューズで検索すると出てくると思います。

さて、本日はSQL操作の小ネタになります。
使用環境:Microsoft SQL Server

テーブルのキーとは別に、目的の列を一意の値にするのが目的です。

■指定列の最大値
構文は以下のようになります。
 SELECT MAX(列名)
 FROM テーブル名

同様にMINを入れると列の最少値になります。

私の場合は、INSERT文の値に、MAX関数を使用して一意でかつ、
どんどん大きくさせることが出来ました。

2015年11月11日水曜日

web.configでエラー処理を指定する

web.configでエラー処理を指定する

こんにちは山田です。
本日は、11月11日 そうですね。iPad Proの発売日ですね。
4Kの編集もできるモンスターマシンですね。

それはさておき
Web.configの記述でエラー処理について調べたのでその備忘録になります。

開発環境:ASP.NET
使用言語:C#

デフォルトで設定を入れていない場合、
開発者にはなじみののある、IISデフォルトのエラーページがでますね。(赤文字と黄色背景のあるページ)
これだとかっこわるいので、オリジナルのエラーページを作ったほうがよさそうです。

方法は以下のように、web.configのsystem.web要素customErrors要素を追加します。

[web.configファイル]
<configuration>
 <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/error.aspx">
      <error statusCode="404" redirect="~/error.aspx" />
    </customErrors>
 </system.web>
</configuration>

mode属性について
RemoteOnlyが既定値になり、リモートクライアントのみカスタムエラーの表示になります。
On カスタムエラーが有効(defaultError属性が指定されていなければ汎用エラーが表示されます。)
Off カスタムエラーが無効

2015年11月10日火曜日

ページのリダイレクト方法 web.config

ページのリダイレクト方法

こんにちは山田です。
リダイレクトについてまとめました。(action type="Rewrite"でリライトも設定できます。)

開発環境:ASP.NET
使用言語:C#

リダイレクトの書き方ですが
いくつか方法があるようなのですが、
今回はWeb.configに記述する方法を使います。

まず、nameにリライトルールの名前を記述します。
次に、このルールにマッチする正規表現を設定します。
最後に、URLがマッチしたときに発生するアクションを設定します。

 この“^campaign/index([0-9]{6}).aspx$”では、
もし入力URLが“^campaign/index([0-9]{6}).aspx$”の場合、{R:0}は“campaign/index201511.aspx”となり、{R:1}は“201511”になります。
ユーザーをリダイレクトするURLになるよう、この{R:1}/の値を使用します。
({R:N}のNとは後方参照のインデックスになります)

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewriteルール名" stopProcessing="true">
          <match url="^campaign/index([0-9]{6}).aspx$" />
          <action type="Redirect" url="{R:1}/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

2015年11月9日月曜日

GoogleMapを埋め込むには?

こんにちわ、開発者のⅠです。
最近、某サイトのマーケットプレイスで、クレジット以外の支払いOK&コンビニ受け取りも選べる場合があることに最近気付きました。便利になったものですね……。

閑話休題。

本日の投稿は、グーグルマップについてです。
グーグルマップといえばGoogle社が提供している地図サービスを指し、皆さんもご存じだと思います。経路検索はもちろん、地形や交通状況まで確認出来てしまう便利なツールですね。
https://www.google.co.jp/maps/

このグーグルマップ、グーグルとは関係無さそうなお店などのサイトに埋め込まれているのを見たことはないでしょうか?そうです、グーグルマップをHTMLサイト内に文字通り”埋め込む”ことが可能です。

埋め込むためには、上に載せたリンクよりグーグルマップのサイトへアクセスし、左上のメニューを開き、”地図を共有または埋め込む”⇒”地図を埋め込む”から、一行のコードを取得しましょう。

あとは、地図を埋め込みたい箇所にコードを追加するだけです。

それでは、今日はこの辺りで失礼します。

HttpResponse.Redirect メソッド (String)とは

こんにちは山田です。
エアコンと床暖のランニングコストはどっちがお得なんだろうと
最近気になっています。

季節ネタはさておき今回は、使用していたリダイレクトメソッドを
調べてみたのでその備忘録になります。

開発環境:ASP.NET 2.0

■HttpResponse.Redirect メソッド (String)とは

ASP.NETで画面遷移行う時Response.Redirect(string)を使います。
具体的には、クライアントに現在の処理を終了させて指定したURL(stringのこと)に遷移させることができます。

try-catch文を記すと常に例外が起こる仕様になっているようで
その時は第二引数にfalseを指定させて、Response.Endを呼ばせなくすることができるそうです。

調べたら似たようなメソッドで HttpServerUtility.Transferメソッドというものがありました。

■HttpServerUtility.Transferメソッドとの違い
このメソッドも指定したページへと処理を移すという点ではRedirectメソッドと同じなのですが、
動作の中身が大きく違うようです。

大きく違う点は
Redirectメソッドの場合は、ユーザーからの見た目上では、ポストバックが一度だけのように見えるが
 実はリクエストとレスポンスがそれぞれが2回ずつ起きているのです。
 一度目のレスポンスで、ポストした情報が消えてしまうので、ポストバックをさせたい場合はこの方法を使うことができません。
一方、Transferメソッドの場合は、ページが書き換わったあとページ遷移はサーバ内部で行われるため。
 遷移前にページで生成したオブジェクトが、メモリ上に残っているので遷移先のページからアクセスすることができます。

ページをまたいでポストバックできるってことですね。便利そうです。








2015年11月6日金曜日

301リダイレクトの書き方

こんばんはSです!

リダイレクトには恒久的な転送の301リダイレクトと一時的な302リダイレクトがありますが、
(おそらく)皆さんがよく使うと思われるResponse.Redirectは302リダイレクトです。

しかし、今回は301リダイレクトを行いたかったので
そのような書き方を探しました。

下記の2つが該当のコードです。

▼Framework 4.0以上のコード
Response.RedirectPermanent(url.Replace("元のURL", "リダイレクト後のURL"));


▼Framework 2.0にも対応
Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", url.Replace("元のURL", "リダイレクト後のURL"));
Response.End();


 

IISのログの見方

こんにちはグリーンスムージ≠青汁ということを知った山田です。
本日は
IISのアクセスログの見方を知ったのでまとめました。
どういう時に必要なログかはまだわかっていないのですが、
その入り口として 各属性の内容を調べてみました。

■アクセスログの場所

初期設定では
C:\inetpub\logs\Logfiles
フォルダ名
・Webサイトの場合::”W3SVC” + サイトID(数字)
 ※サイトIDはIISマネージャで確認できます

■アクセスログの各項目
date time サーバでリクエストを受信した日時(UTC形式:日本+9時間)
s-ip    サーバーのIPアドレス
cs-method  使われたHTTPメソッド
cs-uri-stem アクセスしてきたドメイン以下のアドレス
cs-uri-query ターゲットのクエリ情報
c-ip     クライアントのIPアドレス
cs(User-Agent) ユーザーエージェント
cs(Cookie)  クッキー 
cs(Referer) 参照元
cs-host  ホスト
sc-status プロトコルの状態
time-taken 所要時間



2015年11月5日木曜日

.htaccessとは

こんにちわ山田です。
SEOについて調べものをしていたら、「.htaccessを編集すればよい」という記述がよく見られました。
IISを使っているので関係はないところでもあるのですが、知らなかったので調べてみました。

■.htaccessとは
.htaccess(ドットエイチティーアクセス)とはApacheeを用いたWebサーバにおいて、
ディレクトリ単位で設定を行える設定ファイルです。

これは、IISでいうとWeb.configファイルに該当するようです。

■httpd.confとは?
もう一つ似たものがありhttpd.confというものがあります。
本来サーバの設定はサーバー管理者しか変更できないhttpd.confに記述するのですが、
.htaccessを利用することで、アプリ開発者がディレクトリ単位でサーバーの挙動を制御することができます。

■.htaccessはなにができるの?
www index.htmlありなし設定 URLの正規化として、検索エンジンに対してリライトをかけることができます。
404ページ設定        404エラーの時に動作させたいものを書くことができます。
アクセス制限        IPアドレスで拒否許可をつけたりできます。
リダイレクト        旧URLから新URLへと自動遷移させたいときに使います。
デフォルトページ設定    index.html以外をスタートページに設定することができます。
ベーシック認証       IDとパスワードで簡易的に認証をつけることができます。

過去に、秘密のページを作りたくて、Webサイトにベーシック認証をつけたことを思い出しました。懐かしい、、、。    

 

2015年11月4日水曜日

canonicalとは?

こんにちわ山田です。

一段と肌寒くなってきましたね。
衣替えをして、冬に備えたいと思います。

さて、本日ですが、
canonicalタグについて調べてみました。

■canonicalとは?
一言でまとめると。異なるURLを一つのものとして認識させるタグ。URLの正規化の設定です。

もし、この設定を入れていないと
たとえば
wwwあり、wwwなしでアクセスのあったページ
index.htmlあり、なしのページ

がそれぞれ別のwebページとしてと認識され
重複コンテンツとして判断されてしまいます。

■canonicalタグはどうやっていれるの?
<link rel="canonical" href="http://○○.com/"/>

実は入れる方法は簡単で、上のURLを該当のページにすべて入れるだけなのです。
もし、wwwありのindexなしに統一したい場合は
<link rel="canonical" href="http://www.example.com/"/>
とすればOKです。

サイトTOPは簡単そうですが、各ディレクトリも同様の設定を入れなくてはいけないので、
動的ページの場合は少し大変そうですね。