DuKiccoの雑記

My Life Is Myself

格安シムからWimaxへ乗り換え

月3000円程度で満足のいくネット環境が得られました。

 

経緯

この春から一人暮らし(@千葉県西部)をはじめて、携帯(Docomo)+ポケットWifi(格安シム、Freetel)の組み合わせでネット環境で過ごしていた。Freetelは従量制(20GB天井設定)なのでネットを使わない月は安かったのだが、最近アマゾンプライムで動画を見るようになってから20GB程度使用し5000円程度かかるようになってきた。また、携帯をいくつか持っていてアップデートでかなり通信量を要する月があった。Freetelの実効速度が遅い(動画再生時にしばしば凍る)割に20GBだと安く感じなかったため、ネット環境について再検討を行った。

 

要望事項

家で→3000円くらいで、高速動画再生。できれば使い放題。常に10bps以上。

外で→出張+外回り多い。できればポケットWifiに繋いで携帯の通信量をさげたい。携帯はSIM端末なので、携帯会社の縛りが切れた時点で、格安MVNOに移行したい。

 

検討内容

まずは格安シムで無制限プランを検討したが、最大速度と実効速度に大きく差があるとのことで手を出さないほうが無難そう(実効速度は場所と時間による)。かといえ数十GBのプランにすると高価だが実効速度について保証はない。また、振り返って考えてみると、優良なサービスを長期的に継続して提供してくれる格安SIM会社があるのだろうかという疑問もあり(優良→加入者増加→速度低下)。格安シムではなくWimaxを採用。

 

WimaxのプロバイダーはいくつかあるがSonetを採用。

 メリット

・キャッシュバックはないが月々の利用料金が安い(キャンペーンで月2500円、初期費用なし)

・2年縛り

・価格を抑えるためハイスピードエリアプラスモードには入らず(電波の弱いエリアではLTEに切り替えるサービス。つまりはauと同じエリア、同じ速度。ただしこのモードは通信量7GBまで。)。

 

Wimaxにしての感想

よかったこと

・高速で無制限(@我が家。千葉県西部)

 

少し気になること

・ビルの中、田舎に行くと電波が届かないことがある。新幹線に乗って観察すると携帯の電波に比べエリアが狭いことがよくわかる。

→ほとんど関係ないのだが出張で行くこともあるので、少し困るケースがあり。プラス1000円でハイスピードエリアプラスモードに入れば問題なし。

Diginnos Stick DG-STK3(スティック型PC)

スティック型PCを購入しました。HDMI出力になってるのでリビングや出張先のテレビで簡単にネットや動画が観れるのでとても便利です。キーボード、マウス込みでたったの12000円です。

 

背景

我が家の母艦はMacですがエクセルも使うのでMacの仮想環境でWindowsを走らせてました。ただしMacのアップグレードに伴い仮想環境への追加投資も必要になるので安いWindowsが欲しいなと思ってました。僕としてはネットが観れてエクセルができれば十分でした。

 

機種選定

とにかく安くということで以下の製品にしました。加えて、キーボード、マウス、モニター(TVでもOK)が必要です。OSはWindows10が入ってますがOfficeは入ってませんキーボード、マウス込みでたったの12000円です。安い。

Diginnos Stick DG-STK3

www.dospara.co.jp

 

周辺機器との接続用にUSBポートが二つあります。

 

使用感

エクセルやネットは全くストレスなく動きます。リビングの大きなTVで見るのも気持ちいいものでした。余計なソフトが全く入っていないのも個人的には好印象です。

弱点は冷却機能が弱いことです。動画は再生できなくはないですが、負荷がかかると発熱し性能が落ち、さらに発熱する悪循環に陥ります。ただ↓にあるような安いUSBファンで風をあてると発熱は抑えられます。また、余計な負荷をかけないためバックグラウンドでの自動更新はなしにして従量課金モードにするとよいと思います。

 

www.nishishi.com

 

僕はアマゾンプライムに入っているのですが出張先の空き時間で見たかったプライムビデオを消化できることがうれしいオマケでよい買い物でした。

 

スマートリモコン化

経緯

めざまし時計に耐性がついてしまい、冬は寒くて暗くて、なかなか布団から出れません。対策として、照明とエアコンをタイマーでコントロールして朝にONにしたいと思いスマートリモコンを入れてみました。大したことをやりたいわけではないので、「とりあえず安く」がコンセプトです。安くできたら「子供のエアコン付けっ放し問題」対策として、2台目を入れたいと思ってます。

 

概要

iPhone→アプリ(Intelligent Homo Center)→本製品(RM mini3)→家電(エアコン、照明)という流れでリモートコントロールやタイマー制御が可能になりました。とても満足です。

 

機種選定

Amazonで調べたところ以下の製品が最安でした(2018/2/10時点。3,600円)。また、いろいろ懸念点はありますが、中国のサイトだとさらに半額で買えそうとのことでこちらを選びました。

 

Broadlink Wifi 赤外線 学習 リモコン RM mini3 

 

問題は、設定やアプリの入手に労力が必要なことです。調べ物やセッティングで一時間くらいかかりました。AmazonにはDIY用と書かれてます。Do it yourself !

 

大まかな手順

USのAppStoreにアカウントを作り、本製品のアプリを入手(事前にここまでやれることを確認しておいた方がよい。。)

本製品をAmazonで購入

本製品をiPhone(アプリ)と家のWifiに接続

本製品に家電リモコンを学習させる

iPhone(アプリ)で家電をコントロール

 

詳細説明

・USのAppStoreにアカウントを作り、本製品のアプリを入手

実は本製品の日本仕様は2倍の価格で売っています。日本で入手できるアプリだと並行輸入品は繋げません。ですのでAmazonではラズパイ経由で使用する製品と記載されています。

 

 

USのAppStoreにアカウントを作りアプリを入手する方法はこちらのサイトを参考にしました。

https://nipponomia.com/how-to-buy-us-appstore/

クレジットカードの登録なしに作れます。住所は適当に登録しますが、こちらのサイトでダミーの住所を教えてもらうと楽チンです。

ja.fakenamegenerator.com

 

 

アプリ(Intelligent Homo Center)を入手。本製品を初期設定するためにはiPhoneの言語設定を英語にしてアプリを開かないと上手くいかないようです(各種設定後は日本語に変更可能)。

 

・本製品をAmazonで購入

とくにつまずきポイントはありませんが、本製品は他の製品と同様、多くの家電で使われている赤外線リモコンにのみ対応してます。RFリモコンに対応させたい場合は注意が必要です。

 

・本製品をiPhoneと家のWifiに接続

本製品を電源(USB)につないでアプリを立ち上げます。そうすると機器接続の画面がありますのでそこでWifiを選択し、パスワードを入れます。僕はスムーズにできたのですが、ここでつまずきポイントがいくつかあるようです(SSIDにアンダーバーを入れてはいけないとか、暗号化の方式だとかetc)。以下の日本仕様の製品の取説リンクが役に立ちます。付属の取説は中国語です。

eRemote | Link Japan

 

・アプリを開き本製品を登録

バイスお追加してくのですが、ここも少しわかりにくいです。

バイスカテゴリーから追加→全カテゴリ(リモコン)→RM3です。

iPhoneが日本語設定だと日本仕様の製品しか選べなくなります。

 

・本製品に家電リモコンを学習させる

ここでも日本仕様の製品の取説が役に立ちます。難しくはありません。

 

僕の場合はスムーズにできたので楽しかったのですが、ハマると大変そうだなという印象です。次は増設とGoogle Homeへの接続にチャレンジしたいと思ってます。

 

【Yahoo検索結果をエクセルにテーブル形式で抽出する】【エクセル2013,VBA】

Yahoo検索結果をWebクエリを利用してエクセルにテーブル形式で抽出する。

手順
1.Yahoo検索結果をWebクエリによりシート1へ表示
↓Yahoo検索結果(エクセル vba)のWebクエリ
f:id:DuKicco:20161120230522j:plain

2.シート1の内容(いつもの検索結果の並び)をシート2へテーブル形式で並べ直す。
↓並び替え後
f:id:DuKicco:20161120230509j:plain


support.office.com


Sub Yahoo検索結果取得V1()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
    
Dim i As Long, j As Long, k As Long,  arr As Variant, flag As Boolean, HLA As String, Title As String, spage As Long
Dim URLstr As String, SN1 As String
    

    '検索ワード
    sWord = InputBox("検索ワードを入力", "入力", "excel vba")
    
    arr = Split(sWord)
    
    '検索ワードをエンコード
    sWord = UrlEncode(arr(0))
    For i = 1 To UBound(arr)
    
        sWord = sWord & "+" & UrlEncode(arr(i))
    
    Next
    
    'MsgBox sWord
    
    k = 2
    
    '並び替え先シートを作成
    Call SheetAdd("Result")
    SN1 = ActiveSheet.Name
    
    With ActiveSheet
        .Cells(1, 1) = "No"
        .Cells(1, 1).ColumnWidth = 5
        .Cells(1, 2) = "Title"
        .Cells(1, 2).ColumnWidth = 20
        .Cells(1, 3) = "URL"
        .Cells(1, 3).ColumnWidth = 20
        .Cells(1, 4) = "本文"
        .Cells(1, 4).ColumnWidth = 20
    End With
    
    'Webクエリの出力先シートを作成
    Call SheetAdd("Temporary")
    SN2 = ActiveSheet.Name
    
    
    '表示を開始する件数
    spage = 1
    'Yahoo検索URL
    URLstr = "https://search.yahoo.co.jp/search?p=" & sWord & "&aq=-1&ei=UTF-8&fr=top_ga1_sa&b=" & spage
    
    'Webクエリの出力
    With ActiveSheet.QueryTables.Add( _
        Connection:="URL;" & URLstr, _
        Destination:=Range("A1"))
        
        .Name = "Result"
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingAll
        .BackgroundQuery = False
        .Refresh
    End With
    
    
    'MsgBox URLstr
    
    flag = False
    'HyperLinkAddress
    HLA = ""
    'Hyperlinks.TextToDisplay
    Title = ""
    

    '"Webクエリ"シートを2行目から読み込み
    For i = 2 To ActiveSheet.UsedRange.Rows.Count
        
        
        '次へで終了位置と認識
        If InStr(Sheets(SN2).Cells(i, 1), "次へ>") > 0 Then
        
            Exit For
        
        End If
        
        
        If Cells(i, 1).Hyperlinks.Count > 0 Then
            On Error Resume Next
                'HyperLinkAddressに「yahoo.yahoofs,javascript」など含まれるものは対象外と判断
                If InStr(Sheets(SN2).Cells(i, 1).Hyperlinks(1).Address, "yahoo.co.jp") > 0 Or InStr(Sheets(SN2).Cells(i, 1).Hyperlinks(1).Address, "cache.yahoofs.jp") > 0 Or InStr(Sheets(SN2).Cells(i, 1).Hyperlinks(1).Address, "javascript") > 0 Then
                Else
                Title = Sheets(SN2).Cells(i, 1).Hyperlinks(1).TextToDisplay
                HLA = Sheets(SN2).Cells(i, 1).Hyperlinks(1).Address
                
                '開始位置の判断
                If Title = "" Or HLA = "" Then
                    flag = False
                    Else
                    
                    flag = True
                End If
                
                End If
            On Error GoTo 0
            
            Else
            
            tst = Sheets(SN2).Cells(i, 1)
            'Debug.Print tst

            If flag = True Then
                
                If Sheets(SN1).Cells(k - 1, 2).Value <> Title Then
                
                Sheets(SN1).Cells(k, 1) = k - 1
                Sheets(SN1).Hyperlinks.Add anchor:=Sheets(SN1).Cells(k, 2), _
                    Address:=HLA, _
                    TextToDisplay:=Title
                Sheets(SN1).Cells(k, 3) = HLA
                Sheets(SN1).Cells(k, 4) = tst
                
                    k = k + 1
                End If
            End If

            'Debug.Print i & HLA & "_" & Title & "_"; tst
        End If
        
        
    Next i
    

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "完了"
    
End Sub

' URL Encode(64bit)
Function UrlEncode(ByVal TString As String) As String
  Dim TempObj As Object
  Dim TempEl As Object
  
  TString = Replace(TString, "\", "\\")
  TString = Replace(TString, "'", "\'")
  
  Set TempObj = CreateObject("htmlfile")
  Set TempEl = TempObj.createElement("span")
  
  TempEl.setAttribute "id", "result"
  TempObj.appendChild TempEl
  TempObj.parentWindow.execScript "document.getElementById('result').innerText = encodeURIComponent('" & TString & "');", "JScript"
  UrlEncode = TempEl.innerText
  
End Function

Sub SheetAdd(SNHead As String)
'指定された文字ではじまるのシート名がかぶらぬよう連番で加える

Dim mySheet As Worksheet
Dim i As Long, tst As String, flag As Boolean
    
    
'Max100Sheet
For i = 1 To 100
    
    flag = True
    
    tst = SNHead & i
    
        For Each mySheet In Worksheets
            If mySheet.Name = tst Then '名前がかぶったらfalse
                flag = False
            End If
        Next
    
        If flag Then
            Worksheets.Add
            ActiveSheet.Name = tst

            Exit Sub
        End If
 Next



End Sub

エクセル,vba,xml,Pubmed,API,PMID



PubmedAPIを利用してPubmed検索結果のPMIDをセルに書き出す。

Pumed API
PubMed検索方法:Web Apiの勉強中: IT関係。二階堂のブログ。

XML
http://minor.hatenablog.com/entry/2015/09/02/233330

Sub GetPubMedID()
'Microsoft XML. v6.0を参照設定のこと

    
Dim xmlNode As String
Dim xdoc As MSXML2.DOMDocument
Dim httpObj As Object
Dim childNode As IXMLDOMNode
Dim PNode As IXMLDOMNode
    
    '検索ワードを設定
    検索ワード = "Cancer"
 
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=" & 検索ワード & "&retmode=xml"
    
    xmlNode = "//eSearchResult/IdList"


    Set httpObj = CreateObject("Microsoft.XMLHTTP")
    httpObj.Open "GET", url, False
    httpObj.send ("")
    
    Set xdoc = httpObj.responseXML
    'MsgBox xdoc.XML
    Set PNode = xdoc.SelectSingleNode(xmlNode)


i = 1
        For Each childNode In PNode.ChildNodes
            
            If childNode.nodeName = "Id" Then
                'セルに結果を入力
                Cells(i, 1) = childNode.Text
                i = i + 1
            End If
            
        Next childNode
        
        Set httpObj = Nothing
        Set PNode = Nothing
        
End Sub

エクセル,VBA,xml,Pubmed,API,abstract,Title


PubmedAPIを利用して文献IDからAbstractやTitleを読み込むFunction

Sub Pubmed2()

'Functionの使い方
Dim arr As Variant, PubmedID As Long

'情報を取り出したいPubmedID
PubmedID = 2644239

arr = GetTitle(PubmedID)

MsgBox " Abstract " & arr(1)
MsgBox " Title " & arr(2)
End Sub
Function GetTitle(PMID As Long) As String()
'Microsoft XML. v6.0を参照設定
    On Error GoTo Err
    
    Dim xmlNode(2) As String
    ReDim tempgettitle(2) As String
 
    Dim xdoc As MSXML2.DOMDocument
    Dim httpObj As Object
    
    url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=" & PMID & "&retmode=xml"
    
    xmlNode(1) = "//PubmedArticleSet/PubmedArticle/MedlineCitation/Article/Abstract/AbstractText"
    xmlNode(2) = "//PubmedArticleSet/PubmedArticle/MedlineCitation/Article/ArticleTitle"


    Set httpObj = CreateObject("Microsoft.XMLHTTP")
    httpObj.Open "GET", url, False
    httpObj.send ("")
    
    Set xdoc = httpObj.responseXML

    'MsgBox xdoc.XML
    
    For i = 1 To 2
    
        Set xmltxt = xdoc.SelectSingleNode(xmlNode(i))
        tempgettitle(i) = xmltxt.Text
        
    Next
    
    GetTitle = tempgettitle

    Set httpObj = Nothing
    
    Exit Function

Err:

Debug.Print "Error"
    
End Function

【robocopyコマンドでフォルダーをバックアップ/同期する】【エクセル2013,VBA】

robocopywindows vista以降に装備されているコマンドで通常はコマンドプロンプトから使いますが、VBAから使ってみます。robocopyは「Robust File Copy」の略で、堅牢(robust)かつ確実なファイルのコピーという意味になります。

ファイルやフォルダのコピーにはいろいろな方法がありますが、robocopyは堅牢(?)で、オプションも豊富、コピーにかかる時間自体も短くて済むのでおすすめです。

robocopy
https://technet.microsoft.com/ja-jp/library/cc733145(v=ws.10).aspx
https://technet.microsoft.com/ja-jp/magazine/ee851678.aspx

/mirオプションの説明
コピー元のフォルダーとコピー先の内容が同一となる。差分バックアップ
1.作成日時やファイルサイズの異なるファイルは上書きされる。
2.コピー先に存在しないファイルやフォルダは新たに作成される。
3.コピー元に存在しないファイルはコピー先から削除される。
コピー先から削除したくない場合はオプションを/s(サブフォルダーのコピー)とする。

コピー元とコピー先を間違うと消えてしまうので、事前に十分練習してください。

Sub RunRoboCopy1()
 
Dim WSH, wExec, sCmd As String, Result As String
Dim FF As String, TF As String
 
FF = "C:\temp\コピー元" 'コピー元フォルダのパス
TF = "C:\temp\コピー先" 'コピー先フォルダのパス
 
    Set WSH = CreateObject("WScript.Shell")
 
 
    sCmd = "robocopy " & FF & " " & TF & " /mir" '/mir→ミラオプションでバックアップ
 
    Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) 'コマンドの実行
 
 
    Do While wExec.Status = 0  'コマンドが終了したか確認
        DoEvents
    Loop
 
    Result = wExec.StdOut.ReadAll '結果の取得
    Debug.Print Result '結果の表示
 
    Set wExec = Nothing
    Set WSH = Nothing
 
 
End Sub

イミディエイト ウィンドウに表示された結果。コピー・上書きファイル数などが表示される。
f:id:DuKicco:20160612014851j:plain