格安シムから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
周辺機器との接続用にUSBポートが二つあります。
使用感
エクセルやネットは全くストレスなく動きます。リビングの大きなTVで見るのも気持ちいいものでした。余計なソフトが全く入っていないのも個人的には好印象です。
弱点は冷却機能が弱いことです。動画は再生できなくはないですが、負荷がかかると発熱し性能が落ち、さらに発熱する悪循環に陥ります。ただ↓にあるような安いUSBファンで風をあてると発熱は抑えられます。また、余計な負荷をかけないためバックグラウンドでの自動更新はなしにして従量課金モードにするとよいと思います。
僕はアマゾンプライムに入っているのですが出張先の空き時間で見たかったプライムビデオを消化できることがうれしいオマケでよい買い物でした。
スマートリモコン化
経緯
めざまし時計に耐性がついてしまい、冬は寒くて暗くて、なかなか布団から出れません。対策として、照明とエアコンをタイマーでコントロールして朝に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で購入
↓
↓
本製品に家電リモコンを学習させる
↓
詳細説明
・USのAppStoreにアカウントを作り、本製品のアプリを入手
実は本製品の日本仕様は2倍の価格で売っています。日本で入手できるアプリだと並行輸入品は繋げません。ですのでAmazonではラズパイ経由で使用する製品と記載されています。
USのAppStoreにアカウントを作りアプリを入手する方法はこちらのサイトを参考にしました。
https://nipponomia.com/how-to-buy-us-appstore/
クレジットカードの登録なしに作れます。住所は適当に登録しますが、こちらのサイトでダミーの住所を教えてもらうと楽チンです。
アプリ(Intelligent Homo Center)を入手。本製品を初期設定するためにはiPhoneの言語設定を英語にしてアプリを開かないと上手くいかないようです(各種設定後は日本語に変更可能)。
・本製品をAmazonで購入
とくにつまずきポイントはありませんが、本製品は他の製品と同様、多くの家電で使われている赤外線リモコンにのみ対応してます。RFリモコンに対応させたい場合は注意が必要です。
本製品を電源(USB)につないでアプリを立ち上げます。そうすると機器接続の画面がありますのでそこでWifiを選択し、パスワードを入れます。僕はスムーズにできたのですが、ここでつまずきポイントがいくつかあるようです(SSIDにアンダーバーを入れてはいけないとか、暗号化の方式だとかetc)。以下の日本仕様の製品の取説リンクが役に立ちます。付属の取説は中国語です。
・アプリを開き本製品を登録
デバイスお追加してくのですが、ここも少しわかりにくいです。
デバイスカテゴリーから追加→全カテゴリ(リモコン)→RM3です。
iPhoneが日本語設定だと日本仕様の製品しか選べなくなります。
・本製品に家電リモコンを学習させる
ここでも日本仕様の製品の取説が役に立ちます。難しくはありません。
僕の場合はスムーズにできたので楽しかったのですが、ハマると大変そうだなという印象です。次は増設とGoogle Homeへの接続にチャレンジしたいと思ってます。
【Yahoo検索結果をエクセルにテーブル形式で抽出する】【エクセル2013,VBA】
Yahoo検索結果をWebクエリを利用してエクセルにテーブル形式で抽出する。
手順
1.Yahoo検索結果をWebクエリによりシート1へ表示
↓Yahoo検索結果(エクセル vba)のWebクエリ
2.シート1の内容(いつもの検索結果の並び)をシート2へテーブル形式で並べ直す。
↓並び替え後
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
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】
robocopyはwindows 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
イミディエイト ウィンドウに表示された結果。コピー・上書きファイル数などが表示される。