のろのろなの

PCの電源を入れてから起動が完了するまで1~2分かかっています.買った当初はこんなにかかった気がしないのですが,ま,仕方ないですね.そんな起動時間がかかることを折り込んで,電源ボタン押下後,あれしたりこれしたりしてからモニタの電源を入れています.ログインは自動になっています.が,たまに,特にWindows Update後の起動で多いのですが,あれしたりこれしたりしてからモニタの電源を入れたらログイン画面で止まっていることがあります.がっかりです.

PCの起動時間はまだいいです.EdgeやExcelの起動ものろのろなの.予期せぬタイミングでバックグラウンドで更新プログラムのチェックが走ったりしているからかも知れませんが,こないだなんか,Edge起動にかかりました.BGMとしてランダム再生しているTVサイズのアニソン2曲分なので,間違いないです.さすがにこれにはちょっといらっとします.

Windows11が出たら,PCを新調することにします.正式リリースは今年後半らしいので,買い替えは年明けかな.今のPCのCPUはCeleron G3900で,PassMarkのベンチマークスコア2213でした.一方,全くストレスない会社のノートPCのCPUはCore i7-7500Uで,同3488でした.コア数や周波数に大差なくても,チップセットの世代とか諸々でいろいろ差がつくのね.という学びを活かし,もう少しベンチマークの良いやつを今度こそチョイスします.今や安さより性能の方が気になるというね.

じうでん

スマホといったら毎日充電,という人が大半かと思います.ところが私,今春買ったばかりというのもありますが,日常的にあまり使わないというのもありますが,充電間隔は体感,1週間以上です.下手したら2週間に1回,は言い過ぎかもしれません.ハリウッドの師匠ばりに誇張しすぎな気がします.

で,検証してみました.まず1回目.8月16日夜に満充電にしました.そして,次の充電はバッテリ残量が2割を切った本日,8月26日夜です.丸10日間間隔でした.もう少しn数を増やしましょう.果たして2回目はどうなるか.

ふぁいやー

デジカメ写真をファイル転送サービスFireStorageにアップロードし,発行された短縮URLをメールで親へ送りました.すると,「どこ押してよいか解らない」というLINE通話が来ました.油断していました.そーいやいろんなリンクがあるもんね.

次回からは,発行されたURLではなく,そこから潜ったところにある,すぐダウンロードが始まるURLを送ることにします.いや,ワンタイムのURLになり,しばらくすると無効になっちゃうのかしら.広告をスルーするのはFireStorageに悪いことしている気にもなります.そうなると,「ここ押してからここ押して」という手順の図解も送ってあげるのが吉かな.

しらべべた

Androidアプリのちょっとした修正.が,填まりました.AndroidStudioは入っているけど,このPCでのビルドは初めてだったのかしら.いろんなバージョンのJDKを入れたり入れるためにOracleアカウント作ったりJDKのパスの環境変数設定したりAndroidStudio再起動したりPC再起動したりAndroidStudioでProxy見てたりするから会社のVPNに繋いだり中間生成ファイルを消したり消し漏れちゃったり消しすぎちゃったりプロジェクトのルートパス変えたりとかGradleがどうのこうのAndroidSDKどうのこうのツールセットのバージョンどうのこうのもういろいろググったりしたけど調べ下手でまだビルドできておらず2021年4月リリースのAndroidStudio4.2.0以降から内部にバンドルされているJDKがVer8から11に上がったからそれが原因じゃないかと思ってAndroidStudio4.1.3をダウンロードしようと思ったところで力尽きました明日頑張ります頭痛い的な愚痴チャットを送ったらごめんね返ってきました恐縮です.頭痛に加えて食欲不振で体調下り坂.暑かった昨日とほぼ同じという予想最高気温を信じて半袖gkbrで意地張って粘ったせいか.

まくろ

昨日見込んだ0.8人日も確保できなそうでしたが,FP2級の勉強のためのクイズゲームを,Excelマクロで作ろうと思いました.コーディングするにしても,まずは問題文を幾つか用意する必要があります.初めの4問を登録したところで飽きました.モチベーション貯金,全然溜まっとらんかったです.やっぱりやる気が湧いたときにパッとやんなきゃ駄目ですね.

で,それはやめておいて,別のマクロを組みました.2月に摂取カロリー等の記録が始まってしまい,どんどんもりもりになった日次ログ.この気温欄を補完しようかなと.どこかのサイトにこの手のデータはあるんでしょうけど,探すの面倒なので,これまでどおり,日記に書いている気温情報を転記,するのをマクロでちょちょいと片づけようかなと.

以前やった正規表現をアレンジし,ローカルのファイルに適用.帰省や出張で跳んでいたり,記録漏れしたりしたデータがあるので,それをExcel上で付き合わせ,というかちゃんと跳ばすようにして,日次ログへ貼付.思った以上に早く片づいてしまいました.

Private Sub Listup()
    'HTMLに埋まっている気温表記の例
    '<a name="31"><font class="date"><b>2004年1月31日 (土)</b> - 仙台-0.9/5.4度,東京5.1/11.5度</font></a>
    '<a name="01"><h1>2021年5月1日 (土) 【東京24.1/12.5度】</h1></a>
    
    Dim year%, mon%, f%, row%
    Dim s$
    Dim regex   As New VBScript_RegExp_55.RegExp
    Dim matches As MatchCollection
    Dim m       As Match
    
    regex.Pattern = "(20\d\d)年(\d+)月(\d+)日.+東京(-?\d+\.?\d?)/(-?\d+\.?\d?)度"
    row = 1
    For year = 4 To 20
        For mon = 1 To 12
            s = "D:\Homepage\diary\" & Format$(year, "00") & "\diary" & Format$(mon, "00") & ".htm"
            Debug.Print s
            f = FreeFile()
            Open s For Input As #f
            While Not EOF(f)
                Line Input #f, s
                Set matches = regex.Execute(s)
                If matches.Count = 1 Then
                    Set m = matches(0)
                    Sheet1.Cells(row, 1) = m.SubMatches(0)
                    Sheet1.Cells(row, 2) = m.SubMatches(1)
                    Sheet1.Cells(row, 3) = m.SubMatches(2)
                    Sheet1.Cells(row, 4) = m.SubMatches(3)
                    Sheet1.Cells(row, 5) = m.SubMatches(4)
                    row = row + 1
                End If
            Wend
            Close #f
        Next
    Next
End Sub

もちべぶそく

暇になったらExcelマクロでクイズゲームを作ろうと思っていました.ネタはFP2級の過去問題.正答率をロギングして,誤答したやつや回答からしばらく経った問題を優先してランダムな問題を出す感じ.設計は概ね固まっています.1.5日くらいあれば楽しく作れるかな.

が,7連休6日目が終わろうとしている現時点で,見込まれる暇時間は0.8人日程度です.で,未着手.企画倒れコースですね.いや,0.8人日でも作れると思いますけど,凝りたいところを凝って夜更かし,揚げ句に凝りきれずにタイムアップしそう.

本気で作るんだったら,はなからもっとモチベーション上げて臨まないといけませんでしたね.面白いテレビとか昼寝に適した温暖な環境,これらに抗うだけのZEALが足りませんでした.

Roseliaが歌うカードファイト!!ヴァンガードoverDressの主題歌「ZEAL of proud」,サビ頭でキーが高くなるのカコイイ.私に「ZEAL」という語彙がなかったので,調べました.「熱意」って意味なのね.使わないと覚えないから,機会があったら使ってみよう.からの.

あかうん

先日のママンコールによると,いろんなアカウントだのIDだのパスワードだのカードだのが,いろんなサービスと紐づいたり,ポイント交換できたり,わけわからなくなってきたため,Excelにまとめているとのこと.そこで訊かれたのが「アカウントとは何ぞ」…意外と説明,難しい.

私が喩えたのは銀行.アカウントが口座,IDが口座番号,パスワードが暗証番号に対応する感じ,と.「つまり,アカウントってのはIDのこと?」「いや,IDで特定できるものだけど,イコールではなくて,もっと概念的というか何というか…」

一番腑に落ちてもらえたのは,「アカウントは,管理された会員登録情報」という説明でした.説明しているこっちはいまいち腑に落ちていないんですけど.

で,もっとしっくり来る説明がないか,インターネットを泳いでみました.「アカウントとは,サービス利用権」という記事を目にしました.まあ解るけど,もっと解りやすいのないかしら.そんないろいろを眺めた末,私が辿り着いた説明,「アカウントとは,サービス利用の権利書を仕舞っておく会員ごとの金庫」です.

いや,ぐるっと回って,私の最初の銀行の比喩が一番解りやすくないかい? そもそも「account」って和訳すると「口座」にもなるし.

しむれた

固定IPアドレスでTCP通信するデバイスと通信するiOSアプリ向けライブラリ,これを拡張する前回の第2弾的案件.自宅の75cm角のテーブルがまたも荷物で溢れました.机上にはWindowsのノートPC,MacBook,iPad,スマホ,通信相手のデバイス2種類,それといろんな線類.散らかっていると落ち着いて仕事できないのよね.

固定IPアドレスというのが曲者で,MacBook上のiOSシミュレータではデバイスとの通信の確認がうまくできなかった気がします.というわけで,iPadを会社から昨日,持ち帰ってきたわけです.が,残念,MacBookとiPadを繋ぐケーブルがありません.USBTypeCとLightning.なんてこった.

慣れないMacのネットワーク設定をいろいろ弄ったら,iOSシミュレータで動作確認できました.IPアドレスだけじゃなく,サブネットマスクとデフォルトゲートウェイをそれなりにしたのが奏功したのか,アクセスポイントを繋ぎ替えたのが良かったのか.逆に前回うまくいかなかったのは,「適用」ボタンを押し忘れていたのか,デバイス側の設定がおかしかったのか.大したことしてないのに今回はうまく行ったとなると,前回なんなんと.

うぇぶすくれいぴん

毎週末,保有株と購入候補株の値段を調べ,Excel表を更新しています.そのExcelでは,値動きや利回りに応じて「売るべし」「買うべし」が表示されるようにしています.これで,気分に左右されることなく,比較的普遍的な評価基準で,何も考えずに判断できる仕組みになっています.

毎週末の作業は,銘柄コードをYahoo!ファイナンスページへコピペし,直近1週間の日次情報をExcelへコピペするものです.現在は37銘柄を監視しており,このコピペ作業,意外と手間.株を始めた頃はこの作業もそれなりに楽しめていたのですが,そろそろ煩わしさが勝ってきました.なんとか楽したい.

ということで以前,それらしいWebAPIを軽く突けないかと,Webページを軽くハッキングしてみました.しかし,私のHTMLおよびJavaScript力では,乗り越えるに至らず,タイムアップでギブアップしました.

5月の大型連休を前に,少し時間が確保できたので,再挑戦.今度はアプローチを変え,Webサイトに表示されている株価をHTMLから抽出することにしました.いわゆる,Webスクレイピングです.これまでやったことないけど,これならやれるでしょう.やれました.ExcelのVBAで実現しました.

まずは,指定のWebページのHTMLの取得.「Microsoft XML, v6.0」というライブラリの参照を追加し,XMLHTTP60というクラスを使ったサンプルに倣いました.こんなに簡単にできちゃうんですね.

Private Function GetHtml(ByVal url As String) As String
    Dim httpReq As New XMLHTTP60
    Call httpReq.Open("GET", url)
    Call httpReq.send
    Do While httpReq.readyState < 4
        DoEvents
    Loop
    GetHtml = httpReq.responseText
End Function

次に,HTMLから株価の部分を抽出するコード.正規表現で頑張ればなんとかなりそう.「Microsoft VBScript Regular Expressions 5.5」というライブラリの参照を追加し,VBScript_RegExp_55.RegExpというクラスを使いました.正規表現自体,あまり使ったことないので,調べながらでした.これでいいかと思ったら,株価に桁区切りのカンマが入るケースがあったり,小数部が入るケースがあったりで,何度か修正.

Private Sub Extract(ByVal html As String)
    'HTMLに埋まっている株価の表の一部の例
    '{"openPrice":"3,015","highPrice":"3,039","lowPrice":"3,007","closePrice":"3,023","volume":"1,161,200","adjustedClosePrice":"3,023","baseDate":"2021年4月23日","baseDateIso":"2021-04-23T00:00:00+09:00"},
    '{"openPrice":"3,047","highPrice":"3,057","lowPrice":"3,001","closePrice":"3,036","volume":"1,478,500","adjustedClosePrice":"3,036","baseDate":"2021年4月22日","baseDateIso":"2021-04-22T00:00:00+09:00"},
    '{"openPrice":"3,032","highPrice":"3,034","lowPrice":"2,976","closePrice":"2,997","volume":"3,178,600","adjustedClosePrice":"2,997","baseDate":"2021年4月21日","baseDateIso":"2021-04-21T00:00:00+09:00"}

    Const PTN0  As String = """openPrice"":""(\d*,?\d+\.?\d*)"""
    Const PTN1  As String = """highPrice"":""(\d*,?\d+\.?\d*)"""
    Const PTN2  As String = """lowPrice"":""(\d*,?\d+\.?\d*)"""
    Const PTN3  As String = """closePrice"":""(\d*,?\d+\.?\d*)"""
    Const PTN4  As String = """volume"":""(\d*,?\d*,?\d+\.?\d*)"""
    Const PTN5  As String = """adjustedClosePrice"":""(\d*,?\d+\.?\d*)"""
    Const PTN6  As String = """baseDate"":""(\d{4}年\d?\d月\d?\d日)"""
    Const PTN7  As String = """baseDateIso"":""(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2})"""
    Dim regex   As New VBScript_RegExp_55.RegExp
    Dim matches As MatchCollection
    Dim m       As match

    regex.Pattern = "{" & PTN0 & "," & PTN1 & "," & PTN2 & "," & PTN3 & "," & PTN4 & "," & PTN5 & "," & PTN6 & "," & PTN7 & "}"
    regex.Global = True
    Set matches = regex.Execute(html)
    For Each m In matches
        Debug.Print "日付:" & m.SubMatches(6) & " 終値:" & m.SubMatches(3)
    Next
End Sub

これで要素技術は確保できたので,あとはExcelの表を良い感じに操作するだけです.銘柄コードからURL化するところはExcel上の数式にしちゃって,並べた銘柄分と取得した日数分だけループを回し,縦や横に配置する感じ.程よくエラー処理を入れたりして無事完成.毎週末の作業がだいぶ楽になりました.