住所から範囲を指定して施設の情報を取得するサンプルみたいなもの

'周辺施設探索サンプル
Sub sample_search_near_facility()
    Dim i As Integer
    Dim m_ListOfFacility() As String
    Dim address As String
    Dim Sheet As Object 'Excel.Worksheet
    Set Sheet = Worksheets("sheet1")

    'ワークシートから住所を取得
    Worksheets("sheet1").Select
    
    'ワークシートに描画しない
    Application.ScreenUpdating = False
    
    '住所欄を順次取得していく
    For i = 1 To 1000
        '空行なら抜ける
        If (Sheet.Cells(1 + i, 1) = "") Then
            Exit For
        Else
            address = Sheet.Cells(1 + i, 1).Value
            '施設を検索するサブプロシージャの呼び出し
            m_ListOfFacility = GetListOfNearFacility(GetLocation(address))

            'シートに値を入れる
            '施設名
            Sheet.Cells(1 + i, 2) = m_ListOfFacility(1)
            '種類(取得できない場合あり)
            Sheet.Cells(1 + i, 3) = m_ListOfFacility(2)
            '住所
            Sheet.Cells(1 + i, 4) = m_ListOfFacility(3)
            '説明(取得できない場合あり)
            Sheet.Cells(1 + i, 5) = m_ListOfFacility(4)
        End If
    'DoEventsの実行
     DoEvents
    Next
    '結果を描画する
    Application.ScreenUpdating = True
End Sub


'周辺施設を検索するファンクション
'引数  ByRef参照渡し
'       検索する建物名

'YOLP業種コード 一覧
'02,0204,0204001,ショッピング,百貨店、ショッピングセンター,デパート、百貨店
'02,0204,0204002,ショッピング,百貨店、ショッピングセンター,ショッピングセンター
'02,0204,0204003,ショッピング,百貨店、ショッピングセンター,アウトレットショップ
'02,0204,0204004,ショッピング,百貨店、ショッピングセンター,ホームセンター
'02,0204,0204005,ショッピング,百貨店、ショッピングセンター,商店街
'02,0205,0205001,ショッピング,コンビニ、スーパー,コンビニ
'02,0205,0205002,ショッピング,コンビニ、スーパー,スーパー
Private Function GetListOfNearFacility(ByRef argLocation As String) As String()
    Dim m_Return(10) As String
    Dim m_Uri As String
    Dim m_NameElements As Object
    Dim m_LineElements As Object
    Dim m_DirectionElements As Object
    Dim m_DistanceElements As Object
    Dim m_TraveltimeElements As Object
    Dim i As Integer

    '住所が入っていた場合
    If Len(argLocation) > 0 Then
        'YahooAPIを使用して近辺の施設を取得
        'lat 経度
        'lon 緯度
        'dist 周囲検索(Km) 3Km以内指定
        'gc   業種コードを指定
        m_Uri = "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=<アプリケーションID>&lat=" & _
                    Replace(argLocation, ",", "&lon=") & _
                    "&dist=3&gc=0204"
        With CreateObject("MSXML2.XMLHTTP")
        Debug.Print m_Uri
            .Open "GET", m_Uri, False: .Send
            With .responseXML

            '結果を抽出
            '名称他の取得
            Set m_NameElements = .getElementsByTagName("Name")
            Set m_addressElements = .getElementsByTagName("Address")
            Set m_descriptionElements = .getElementsByTagName("Description")
                If m_NameElements.Length > 0 Then
                    'ReDim m_Return(m_NameElements.Length, 4)
                    '1件取得する
                    ' 複数件にも対応させる
                        '施設名の取得
                        m_Return(1) = m_NameElements.Item(0).Text
                        Debug.Print m_Return(1)
                        '種類を取得
                        m_Return(2) = m_NameElements.Item(2).Text
                        Debug.Print m_Return(2)
                        '住所を取得
                        m_Return(3) = m_addressElements.Item(0).Text
                        Debug.Print m_Return(3)
                        '説明を取得
                        m_Return(4) = m_descriptionElements.Item(1).Text
                        Debug.Print m_Return(4)
                Else
                    'Redim 動的配列
                    'ReDim m_Return(0)
                End If
            End With
        End With
    Else
        'ReDim m_Return(0)
    End If
    
    GetListOfNearFacility = m_Return
    
    'オブジェクトの破棄処理
    Set m_NameElements = Nothing
End Function

'緯度 経度を取得するファンクション
'引数 検索する建物
Public Function GetLocation(ByRef argAddressString As String) As String
    Dim m_Uri As String
    If Len(argAddressString) > 0 Then
        m_Uri = "http://maps.googleapis.com/maps/api/geocode/xml?address=" & _
        EncodeURI(argAddressString) & "&sensor=false"
        'With CreateObject("MSXML2.XMLHTTP")
        '    .Open "GET", m_Uri, False: .Send
        '
        '分割して記述した例が下
        Set xhr = CreateObject("MSXML2.XMLHTTP")
        xhr.Open "GET", m_Uri, False
        xhr.Send
            'With CreateObject("MSXML2.XMLHTTP").responseXML
                '取得結果を格納
                Set elements = xhr.responseXML.DocumentElement
                '情報を取得できたら格納
                If elements.getElementsByTagName("status").Item(0).Text = "OK" Then
                    'locationタグの読み込み
                    '緯度経度間の空白を,に置換
                    '置換例 35.7100327,139.8107155
                    GetLocation = Replace(elements.getElementsByTagName("location").Item(0).Text, " ", ",")
                End If
            'End With
        'End With
    End If
End Function
'URLエンコードを行うファンクション
Private Function EncodeURI(ByVal argString As String) As String
    argString = Replace(Replace(argString, "\", "\\"), "'", "\'")
    With CreateObject("HtmlFile")
        .parentWindow.execScript "document.write(encodeURIComponent('" & argString & "'));", "JScript"
        EncodeURI = .Body.innerHTML
    End With
End Function

住所 名称から最寄駅等を取得する

下記のサイトのコードを少し変えて
シートにある住所から最寄駅等の情報を作ってみました。

住所から最寄駅を検索する | ヴィーバ VeaBa! Excel VBA Tips
http://veaba.keemoosoft.com/2013/02/488/

コードを読むのに時間かかりました。。。
変更したのは直近の一件のみ取得と
シートから住所取り込んで情報を入れる部分だけです。

SimpleAPI「最寄り駅Webサービス
で緯度、経度から最寄駅、路線情報、距離、時間取得できる便利な
サービスと

緯度経度は
Google Geocoding APIを使って、検索して渡して上記の情報を
取得してくるというもの。

と参照設定でXML扱えるように
下記サイトを参考
http://d.hatena.ne.jp/end0tknr/20081115/1226755041

'最寄駅を検索するサンプル
Sub Sample_search_near_station()
    Dim i As Integer
    Dim m_ListOfStation() As String
    Dim address As String
    Dim Sheet As Object 'Excel.Worksheet
    Set Sheet = Worksheets("sheet1")

    'ワークシートから住所を取得
    Worksheets("sheet1").Select
    
    'ワークシートに描画しない
    Application.ScreenUpdating = False
    
    '住所欄を順次取得していく
    For i = 0 To 1000
        '空行なら抜ける
        If (Sheet.Cells(2 + i, 1) = "") Then
            Exit For
        Else
        address = Sheet.Cells(2 + i, 1).Value
        '最寄駅を検索するサブプロシージャの呼び出し
        m_ListOfStation = GetListOfNearestStation(GetLocation(address))
        'UBOUND関数配列の名前を指定する
        'For j = 0 To (UBound(m_ListOfStation) / 5 - 1)
            Sheet.Cells(2 + i, 2) = m_ListOfStation(0)
            Sheet.Cells(2 + i, 3) = m_ListOfStation(1)
            Sheet.Cells(2 + i, 4) = m_ListOfStation(2)
            Sheet.Cells(2 + i, 5) = m_ListOfStation(3)
            Sheet.Cells(2 + i, 6) = m_ListOfStation(4)
        'Next
        End If
    'DoEventsの実行
    '
    DoEvents
    
    Next
    
    '結果を描画する
    Application.ScreenUpdating = True
End Sub

'最寄駅を検索するファンクション
'引数  ByRef参照渡し
'       検索する建物名
Private Function GetListOfNearestStation(ByRef argLocation As String) As String()
    Dim m_Return(5) As String
    Dim m_Uri As String
    Dim m_NameElements As Object
    Dim m_LineElements As Object
    Dim m_DirectionElements As Object
    Dim m_DistanceElements As Object
    Dim m_TraveltimeElements As Object
    Dim i As Integer

    '住所入っていた場合
    If Len(argLocation) > 0 Then
        'SimpleAPI「最寄り駅Webサービスを利用
        '緯度 経度を指定して最寄駅を検索
        m_Uri = "http://map.simpleapi.net/stationapi?output=xml&y=" & _
                    Replace(argLocation, ",", "&x=")
'        With CreateObject("MSXML2.XMLHTTP")
'            .Open "GET", m_Uri, False: .Send
'            With .responseXML
        Set xhr = CreateObject("MSXML2.XMLHTTP")
        xhr.Open "GET", m_Uri, False
        xhr.Send
            '取得結果を格納
            Set elements = xhr.responseXML.DocumentElement
                Set m_NameElements = elements.getElementsByTagName("name")
                Set m_LineElements = elements.getElementsByTagName("line")
                Set m_DirectionElements = elements.getElementsByTagName("direction")
                Set m_DistanceElements = elements.getElementsByTagName("distance")
                Set m_TraveltimeElements = elements.getElementsByTagName("traveltime")
                
                'Debug.Print m_NameElements(0).Text
                
                If m_NameElements.Length > 0 Then
                    'ReDim m_Return(m_NameElements.Length, 5)
                    '検索結果すべて表示する場合
'                    For i = 1 To m_NameElements.Length
'                        '駅名の取得
'                        m_Return(i, 1) = m_NameElements.Item(i - 1).Text
'                        '路線名の取得
'                        m_Return(i, 2) = m_LineElements.Item(i - 1).Text
'                        '方角の取得
'                        m_Return(i, 3) = m_DirectionElements.Item(i - 1).Text
'                        '駅までの距離を取得
'                        m_Return(i, 4) = m_DistanceElements.Item(i - 1).Text
'                        '駅までにかかる時間の取得
'                        m_Return(i, 5) = m_TraveltimeElements.Item(i - 1).Text
'                    Next
                       '一番の最寄駅だけ取得
                        m_Return(0) = m_NameElements.Item(0).Text
                        '路線名の取得
                        m_Return(1) = m_LineElements.Item(0).Text
                        '方角の取得
                        m_Return(2) = m_DirectionElements.Item(0).Text
                        '駅までの距離を取得
                        m_Return(3) = m_DistanceElements.Item(0).Text
                        '駅までにかかる時間の取得
                        m_Return(4) = m_TraveltimeElements.Item(0).Text
                    
                Else
                    'Redim 動的配列
                    'ReDim m_Return(0)
                End If
            'End With
        'End With
    Else
        'ReDim m_Return(0)
    End If
    
    GetListOfNearestStation = m_Return
    
    'オブジェクトの破棄処理
    Set m_DirectionElements = Nothing
    Set m_LineElements = Nothing
    Set m_DirectionElements = Nothing
    Set m_DistanceElements = Nothing
    Set m_TraveltimeElements = Nothing
End Function

'緯度 経度を取得するファンクション
'引数 検索する建物
Public Function GetLocation(ByRef argAddressString As String) As String
    Dim m_Uri As String
    'Debug.Print argAddressString
    If Len(argAddressString) > 0 Then
        m_Uri = "http://maps.googleapis.com/maps/api/geocode/xml?address=" & _
        EncodeURI(argAddressString) & "&sensor=false"
        'With CreateObject("MSXML2.XMLHTTP")
        '    .Open "GET", m_Uri, False: .Send
        '
        '分割して記述した例が下
        Set xhr = CreateObject("MSXML2.XMLHTTP")
        xhr.Open "GET", m_Uri, False
        xhr.Send
        'Debug.Print m_Uri
            'With CreateObject("MSXML2.XMLHTTP").responseXML
                '取得結果を格納
                Set elements = xhr.responseXML.DocumentElement
                '情報を取得できたら格納
                If elements.getElementsByTagName("status").Item(0).Text = "OK" Then
                    'locationタグの読み込み
                    '緯度経度間の空白を,に置換
                    '置換例 35.7100327,139.8107155
                    GetLocation = Replace(elements.getElementsByTagName("location").Item(0).Text, " ", ",")
                End If
            'End With
        'End With
    End If
End Function
'URLエンコードを行うファンクション
Private Function EncodeURI(ByVal argString As String) As String
    argString = Replace(Replace(argString, "\", "\\"), "'", "\'")
    With CreateObject("HtmlFile")
        .parentWindow.execScript "document.write(encodeURIComponent('" & argString & "'));", "JScript"
        EncodeURI = .Body.innerHTML
    End With
End Function

イメージは下記。

ドットインストールをやってみて(HTML,CSS,PHP)

HTMLとPHPは復習&勉強兼ねて
CSSは学習のためにドットインストールの各レッスンを見てみました。

ドットインストール
http://dotinstall.com/

見たレッスン
・HTML(入門編)
CSS(入門編)
PHP入門(基本編)
PHP入門(応用編)

凄くわかりやすい。
1動画当たり短いのでこまめにやりやすいし、メモも取れる。

初心者向けということもあって
それぞれなんとなくだけれど
1講座で入門書の中でも分量が少ないものをカバーしている感じ

まるっと忘れてざっとでも復習したかったのと
CSSとにかく少しでも見たかったので見てみたら良かった。

後は書籍なり、Webなりで学んでいじったり、作ってく中で触って行こうと思います。

確定申告について 久し振りすぎてわからない・・・

そろそろ年末調整の時期なのだけれど、
何年かぶりで久し振りでよくわからないなぁ。。。と
思っていたらはてブにちょうど良さそうなエントリーあったのでメモしときます。

年末調整や確定申告で知らんと損する記事まとめ
http://matome.naver.jp/odai/2138431164688902801

の記事のリンク先2つ

年末調整の4つのポイント!|動画付でわかりやく解説してみた
http://www.chuokaikei.co.jp/staffblog/taxsaving/13/

めんどくさい年末調整に必要な3つのこと|書き方が動画で解りやすい!
http://www.firstep.jp/blog/archives/2567

全体的に説明されててわかりやすい。

さくらVPS構築 途中

□参考サイト
初心者向けのさくらVPSマニュアルサイト
http://www.xn--vps-073b3a72a.com/

さくらVPSの設定
ここの7番まで設定完了(?)
Apacheの確認でSyntax OKとまでいけたから一応大丈夫なのかな
 いかんせん不安・・・)

とターミナルでの作業だったのでここもすごく参考になった。
□参考サイト
さくらのVPS|独学のweb知識を活かし夢を叶えるブログ
http://www.homecountry.info/blog/owner/cat/engineer/server/vps/

ロードバランサー レイヤ4スイッチについて

ロードバランサーという言葉昨日初めて知りました。

マスタリングTCP/IP第三版には古いのか記載なく、
第五版には記載あるみたいです。

レイヤ4に属する負荷分散の為のレイヤスイッチとのこと。

L4スイッチはTCPヘッダなどのプロトコルヘッダ内のポート番号や、セッションシーケンス番号などの情報を解析したり書換えを行うことで、ネットワークトラフィックの分散や、最適化を行うことを目的した装置である。

引用元 wikipediaより
http://ja.wikipedia.org/wiki/レイヤ4スイッチ

L2スイッチはブリッジの役割。
L3スイッチはルーターの役割と認識しておりました。

L4スイッチは上記のスイッチのその上位層レベルのTCP等の情報で制御、最適化を行う装置みたいです。(誤ってたらすみません・・・)

ロードバランサーはレイヤ4-7スイッチで、
他に
・帯域制御装置(QoS)
・セッション最適化装置
・WANアクセラレータ
があるみたい。

ロードバランサーはサーバを複数接続する際に分散して処理、制御するために
接続する装置。

参考サイト
知っておきたいロードバランサーの基礎技術
http://ascii.jp/elem/000/000/506/506272/

管理方法(ロードバランシングの方法)のアルゴリズム
ラウンドロビンDNS
 問い合わせに対して登録された順に割り振って行く方式
 重いものにたいしても処理を全部均等に割り振って行くため、非効率。
・重み付けラウンドロビン
 サーバーに重み(処理能力等)をつけることで
 処理をふっていく際のそれぞれのサーバーを考慮する
・動的振り分け
 サーバーの負荷に応じて動的に割り振って行く方式
・コンテンツスイッチング
 リクエストされるコンテンツの種類を識別して、
 振り分け先のサーバーを分けるという方式

重要になってくるのがヘルスチェックとセッション維持。
・ヘルスチェック
どこかのサーバーに障害が発生してしまった場合、
検知して別のサーバーに処理を引き継がせなければいけない。
なのでロードバランサー側はサーバーの動作状態を把握しておかなければいけない。
チェックの方法はいろいろあり、
Pingを定期的に送信したり、TCPでセッションをはったり
HTTPでデータを送ったりといろいろ。

・セッション維持
クライアント側からのリクエストを分割して処理する際に
一つのトランザクションは一つのサーバーで処理しないと不都合が起きる。
(関連した処理なのに、データ等がサーバ分割されて処理されることとか)
これを解決する為に一つのトランザクションを継続して
特定のサーバーに割り振りを行うのがセッション維持の機能。
クッキーを発行したりすることなどで制御を可能にしたりする。

ただし、WebでSSLの暗号化処理がされている通信の場合
ヘッダが暗号化されているため判別できないが
それを解決するためにサーバーの代わりにSSLの暗号化処理を
肩代わりする機能を持つロードバランサーを使う。

他に役に立ちそうなアドオン(Google Chrome Webの表示等見る時に)

他に便利そうなエクステンション。

□参考サイト
厳選して使用している便利なChromeエクステンション19個
http://kachibito.net/web-service/19-favorite-chrome-extension.html

CSSVieweいいな。
http://kachibito.net/web-service/cssviewer.html