空談録

世界で5人くらいに役立ちたい

ExcelにDynamic Arraysが来なかった

一瞬で終わる記事。

9/28のOffice Insider FastでExcelにIdeas (旧Excel Insights)とDynamic Arraysが来たようです。
answers.microsoft.com

バージョンは16.0.10920.20003 (1810)です。

で、Insiderの通知にはDynamic Arraysが書かれていますが、無事に手元でつかえなかったって話です。

Ideasについて

Excel Insightsから変わってないので一緒です。

Dynamic Arraysについて

最近のExcel関係でかなり話題になってた機能です。
Dynamic Arraysは一つの数式で複数のセルを表現できる機能になります。

例えば =SORT(A1:A10) とやったら [B1, B2, B3, B4, ... , B10]に対して自動で展開する機能となります。
Google Spreadsheetではすでにある感じの機能です。
この手の機能を使うと数式が一つでいいので、数式を読んだりするオーバーヘッドを減らせるとかそういうメリットはあります。

使えるのは

  • SORT
  • SORTBY
  • FILTER
  • RANDARRAY
  • SEQUENCE
  • SINGLE
  • UNIQUE

の7個です。

中身については来たら調べて書きます。

Dynamic Arraysが来ない

というわけで来たという風に書いてあるんですが、どうも手元では使えないようです。無念。

適当に =SORT(A1:A10)で実行すると下の画像のようになります。
f:id:fantasticswallow:20180930000531p:plain

なんか不適切とか言われています。
設定が足りない可能性はありますが一通り眺めてもよくわからなかったのでそんな設定なしで動くと判断したのですがうーん。

一応中身に何かコードがあるのは事実なんですが、動かす権限はなさそうという感じです。
画像のエラーは何らかの実装がある場合にしか出ません。

実装がない場合は関数のエラーとして下の画像になります。
f:id:fantasticswallow:20180930000812p:plain

やっぱり何かはあるけど実行はできなそうです。
そもそもエラーがでるのがSORTとFilterだけなのでなんか別のエラーの可能性はありますが…。


というわけで来なかったってだけの記事です。
早く来てほしいなぁ。

この辺で

Office 2019のお話

ブログ久々なのでお手軽記事で攻めます。

というわけでVolume License向けにOffice 2019が出たらしいですね。
forest.watch.impress.co.jp

Office 365契約してたら何一つとして新しい情報がなかったという感じでしたが、かるくまとめておきます

Office 2019って何者なの?

何度目かわかりませんが、いわゆるLTSB (Long Term Service Branch)における更新バージョンとなります。
Volume Licenseにおいて、セキュリティパッチのみ提供され、機能面については変化なしで利用できるバージョンですね。

これまでのLTSBのOffice 2016では、最初のOffice 2016から特に機能追加のないままだったかと思います。
そこに2015/11 ~ 2018/8までのMonthly Channelの機能追加分が入る形です。

つまるところこれまでOffice 365で先行(違う)して追加してきた機能がある程度検証されたので、まとめて追加した、というのがOffice 2019の現状です。

というわけでOffice 365 ProPlusのライセンスを持っているユーザーであればすでに使えている機能が、ようやく買い切りライセンスのところにも降ってきましたよっていうのがOffice 2019というやつです。

Office 2019って何者なの(裏)

もう少し詳しい正体を探ってみましょう。

Office 2019 RTMのバージョンをTwitterで検索していると "16.0.10730.20102"という情報が出てきます。

次に10730.20102でぐーぐるに投げると次のサイトが出てきます。
docs.microsoft.com

バージョン 1808: 9 月 11 日
バージョン 1808 (ビルド 10730.20102)

同じバージョンで違うビルドっていうのも考えづらいため、おそらくOffice 365のMonthly Channelの2018/09/25現在のバージョンと、Office 2019が一致していることがわかります。
(Insider Fastから変えるのがめんどくさい)

これでOffice 2019が1808 Monthlyであることがわかりました。1808というところが大事です。覚えておくと若干ありがたいことがないです。

さらに言えば、中身が完全に2016の1808なので、サポート期間がOffice 2016とOffice 2019で同じになるのも納得できます。
(2016の特定のバージョンを2019って言ってるだけにすぎないので)

追加される機能について

Officeのサポートページ見るのが一番早いです。
support.office.com

大きいところではInkのサポート強化(Drawタブの追加、Shape Recognitionの汎用化、ペンタブレット等を用いたInstant Inking)、PowerPointへのMorph, Zoom機能の追加、ワークシート関数の追加、SVGや3Dモデルのサポート、WordのLaTeX記法サポートあたりでしょうか。

個人的にはPowerPointのMorphは最強の機能だと思うので推したさです。

機能の紹介はLaTeX以外は大体やった気がするのでそっちを見ていただければと


ここまででいったん区切ります。
基本的に抑えるべき情報は上のところまでです。これより下は見なくてもいい情報です。

Office 2019に追加されない機能たち

MS365のブログの紹介がすごい悪いんですけど、まずOffice 2019にAIっていうやつは載りません。
Office 2019 is now available for Windows and Mac - Microsoft 365 Blog

However, we’ll continue to add new features to Office 365 ProPlus monthly, including innovations in collaboration, artificial intelligence (AI), security, and more.

この一文を読めばわかるんですが、Office 365 ProPlusに対してartificial intelligenceの機能を追加していくって言っています。
つまりOffice 2019には載りません。

そもそもここで言ってるAIはOffice Intelligent Servicesです。
Make Office Work More Intelligently for You - Office Support

Office Intelligent ServicesはOffice 365向けのサービスのため、買い切りライセンスなOffice 2019では使用できません。
なので、PowerPoint Designerや、Excel Insightsのような機能については使用することができません。あしからず。

ちなみにTranslaterもIntelligent Servicesに入ってますが、Office 2019の機能としても入ってるのでいける、かと思われます。
他はたぶん無理です。


次に、Office 2019ではvlookupは早くなりません。
techcommunity.microsoft.com

これを読んでると分かるんですが、最後にこの一文があります

Available in monthly channel version 1809 or later

では思い出しましょう。Office 2019 RTMは1808です。でもvlookupが早くなるのは1809です。あとはわかりますね?

もちろんLTSBでも機能追加を行ってくる可能性は否定しませんが、現在出ているOffice 2019では載っていません。
今後載らなくても泣かない、という覚悟は必要です。
(とはいえ一度VLのOffice使ってましたが、どうあがいてもMorph使えなかったのでかなり厳しいです)
(追記:↑みたいに書きましたけど、よくよく思い出してみるとMorphの編集はできないけど動かすことはできる、みたいな状態になってた気がします(ファイル互換性の問題?)。featureの恩恵は受けれないけど根本的な改善については入ってくる可能性はあります?めっちゃごにょってた時期の検証だったので詳しいことはわかりません)

同様にDynamic Arraysも載りません。
techcommunity.microsoft.com

こっちについてはInsider Fastの一部のユーザーに09/25(US)から提供するというレベルです。そもそも使ってるユーザーがいません。

最後にPythonですが、当然載りません。
そもそもPythonのPの字も出てきてないので載るはずもなく…

少なくともOffice 2019はOffice 365 ProPlusにあった機能の累積アップデート版でしかないので、誰も使ってない機能が載るなんて奇跡はありません。
ましてや新機能の影響が出てほしくないがゆえのバージョンです。ぽっと出の機能が載ってきても困ります。



というわけでなんかTwitter検索してたらよくわからないワードがいっぱいでてたのでその辺もまとめておきました。
アップデートで変わる可能性はあるかもしれません、がないんじゃないかなーという認識。
新しい機能が使いたいのであればどんどんOffice 365を契約していきましょう。

最近本当にOfficeに触る機会がなくて全然追えてないんですが、(vlookupの1809とかさっき知った) Dynamic Arraysとかは面白そうなので追っていきたいですね。
たぶん私のところにはこないきがしますが…。

この辺で

Excel Insightsを試してみる

いつまでたっても来ないと思ってたけど探したらあった。

というわけでExcelに新しく追加されたInsightsについての話です。
support.office.com

確か1803あたりから追加だった気がしますが正確なバージョンは不明です (今は1805 (9320.2001)) 。
とりあえず試せるものは試してみましょうという感じで。

とはいえInsights自体はPowerBIから持ってきただけのやつなんであっさりで。

Insightsって何?

Office Intelligent Serviceの一つで、データをクラウドサービス上に転送し、その中で意味ありげな関係性を見つけ、その結果を返してくれます。
PowerBIのInsightsの種類とか見ればイメージしやすいかと。
docs.microsoft.com

データを選択してInsightsするとこの辺外れ値っぽい!とかいろいろ言ってくれます。ちゃんとしたデータだとそこそこまともっぽいことを言ってくれます。

実際に使ってみる

挿入タブの真ん中らへんにある、はずなのですが、いつまでたってもやってこないので別の方法で。
Customize RibbonでAll Commands選んで、Insightsを探してリボン側に足してあげるだけです。
日本語だと”リボンのユーザー設定”→"すべてのコマンド"→"洞察"を追加します。洞察とは。

f:id:fantasticswallow:20180430215704p:plain

ちなみにまだPreviewなのでペイン側の内容は英語のままです。

PivotTableじゃない領域を選択してInsightsを押すと、初回は個人情報をIntelligent Serviceに送ってもいい?的なの聞かれるので、Turn Onを選びます。
するとこんな感じでいくつか候補が右に出てくるかと思います。
f:id:fantasticswallow:20180430221818p:plain

パッと見期待できない感が出ますが、範囲絞ればもう少しまともに出してくれます。

よさげなの見つけたらInsert Chartします。しないと残りません。
Inser Chartをすると別シートにデータの載ったPivotTableとグラフを追加してくれます。

f:id:fantasticswallow:20180430222350p:plain

ちなみにこんなん使えないよ!ってなったりこれめっちゃいいやん!ってなったらIs this helpful?でフィードバックできたりします。
Yesでいいね、Noでよくないねを送れます。何につながるかは知りません。


というわけでひさびさにExcelのお話でした。
Insightsおもしろそうなんですがいまいちまともな結果が返ってこない…。

PowerPointのペンが強くなってたのも記事にしたい。

この辺で

Power QueryがURLを認識できないとか言い出した時

誰もこのエラー踏んでないなと思ったらそりゃ誰も踏まないわってなった。

アズールレーンというゲームをしていると自分の手持ちがよくわからなくなったので、Excelでキャラのレベルを管理しています。
ただ、わざわざキャラ一覧とかつくりたくないのでPower QueryでWikiのページから拾ってきてそこにレベルを書き足して管理してました。

ところがどっかのタイミングでなんか見かけないエラーが出てきたという話です。

使ってたクエリ

めっちゃ普通のクエリです。途中まで使えていたのが謎。
参照してたページは キャラクターリスト - アズールレーン(アズレン)攻略 Wiki

let
    Source = Web.Page(Web.Contents("http://azurlane.wikiru.jp/index.php?%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A1%BC%A5%EA%A5%B9%A5%C8")),
    Data = Source{2}[Data],
    #"Replaced Value" = Table.ReplaceValue(Data,"C","20",Replacer.ReplaceText,{"No."}),
    #"Changed Type" = Table.TransformColumnTypes(#"Replaced Value",{{"No.", Int64.Type}, {"名前", type text}, {"陣営", type text}, {"レア度", type text}, {"艦種", type text}, {"建造時間", type text}, {"耐久", Int64.Type}, {"装甲", type text}, {"装填", Int64.Type}, {"火力", Int64.Type}, {"雷装", Int64.Type}, {"回避", Int64.Type}, {"対空", Int64.Type}, {"航空", Int64.Type}, {"消費", Int64.Type}, {"速力", Int64.Type}, {"声優", type text}})
in
    #"Changed Type"

ほぼ未加工(どっかのタイミングでテーブルが参照できなくなったのでそこだけ触ってます)

最近こんなエラーが出てきた

ところがある日更新しようとしたらこんなのが出てくるようになりました。

f:id:fantasticswallow:20180317104627p:plain

DataFormat.Error: The supplied URL must be a valid 'http:' or 'https:' URL.
Details:
javascript:false

いやどう見てもhttpで始まってるんですが…。

ぐーぐるで同じようなの探してたんですが、ゼロ幅スペースが~的なのが出てくるだけで答えにたどり着けず。
UserAgent偽装とかやっても取れないので割とお手上げでした。

javascript:falseから考えてみる

しかし今更別サイトから拾うように~って思っても面倒だしということで何とか直してみます。

まずこの現象自体は何起因で起こってるのか切り分けます。
・Webページに接続できていない
・Webページには接続できているがデータを返してもらえない (UserAgentなどでブロックされている)
・Webページに接続できてデータが返ってきているが、テーブルの中身が存在していない。(別のjsonで返してくるなど)
・Webページに接続できてデータがもらえているがパースができない

概ねこの4パターンかと。
とりあえず一番上だった場合はもはやお手上げなのでそこから見ていきます。

Web.Contents関数がbinaryのデータを返すため、接続できているか自体はこれだけで判別できます。
本当に落ちてきてるかも見るためにBinary.ToTextで文字列に変換しておきます。

Binary.ToText(Web.Contents("http://azurlane.wikiru.jp/index.php?%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A1%BC%A5%EA%A5%B9%A5%C8"))

f:id:fantasticswallow:20180317110232p:plain

こんな感じでひとまず何かしら落ちてきていることがわかります。つまり接続自体は問題ないということに。

残る問題を切り分けていきます。3つ目についてはブラウザの開発者ツール使えば返ってきてるか見えるのでそこで判別。
めんどいので画像は割愛。こちらも含まれています(というか入ってなかったら今までどうやってたの状態)

というわけでパースに失敗している説が濃厚になってきました。
そのため先ほどのBinaryの中身を眺めてみましょう。尻切れとかかもしれませんし。
Text.FromBinaryで文字列に展開します。

f:id:fantasticswallow:20180317110938p:plain

ペロッ…これは…文字コード…!

この結果を見る限りどうも自動文字コード判定で何か違う文字コードを選択している可能性が高いです。
ならば文字コードを正しく選択すればうまくいくのでは…!?ってことでやってみましょう。

Text.FromBinaryの第2引数に文字コードを指定することができるのでここに数字を入れます。
魔法の数字についてはMSDNから拾ってきます。
Encoding クラス (System.Text)

(Power Queryは中身はC#なのでSystem.Text.Encodingの値が使えます)

wikiページの文字コードは開発者ツールで見つけましょう。charset=euc-jpとのことなので20932が第2引数になります。

f:id:fantasticswallow:20180317112415p:plain

無事に読めました。これであとはWeb.PageでパースすればOKです。

= Web.Page(Text.FromBinary(Web.Contents("http://azurlane.wikiru.jp/index.php?%A5%AD%A5%E3%A5%E9%A5%AF%A5%BF%A1%BC%A5%EA%A5%B9%A5%C8"), 20932))

これで無事に取れるようになったので、Source部分を差し替えればうごきます。


というわけでいわゆるCJKな言語の問題でした。向こうはほぼ起こらないしなぁ。。。

最近Go言語的なのを触ってますがなかなか難しいですねぇ。
全部C#にしたいきもちが出てきてしまう……。
そういうのにBlazorとかいいんだろうなと思ったり思わなかったり。

この辺で

ExcelにPython載ってもVBAは不滅だと思う話

新年なのでぽえむすたーと。

さて、年末くらいにExcelPythonをのっけることを検討する話が出てましたね。
最初よくわからずそんなんないやろという気持ちでしたが、まあPythonのお勉強はしたいのでぜひ頑張ってほしいという気持ち。

ところでこの件、割とググってると「VBAがなくなるかも!?」みたいな話が出てきます。
今出てる情報的にどう考えてもVBAが死ぬ話ではないのでその辺の思考的なのをまとめたいという記事。

中の人じゃないので本当の事実は知らないです。正確な情報はないです。その辺はご承知ください。

とりあえず追っていきましょう

前提条件

VBAの代替って話ですので、現状のVBA同様の環境になることを想定します。
つまりOfficeに言語環境を組み込み、Officeのインストールだけでスクリプトの実行が行える環境です。

Pythonのっけるにしてもどのバージョン問題

いまいちこの辺詳しくないのですが、Pythonのどのバージョンをのっけるかってそう簡単に決まる話ではないと思われます。
Python 2.xと3.xでごかんせいがーてきな話は有名ですが、Python 3.x系であればすべて同じ構文が使えるんです?というところがあると思っています。
つまり3.6と3.7で言語構文的なところに変化がないかというところ。

この間で新しく新機能が~って話になるとかなりつらみが出てきます。
新しいPythonで書いたスクリプトが過去のPython環境でうごかないんですけどーって話がある場合、組み込んだPythonをむやみに上げれなくなってしまいます。

普通に上げればいいじゃん?って思う方は身の回りでOffice 2010を使ってる人がいないか思い出すとよいかと思います。

つまるところ、組み込むにしても更新が活発なPythonのどれを組み込むのか、というのはかなり難しいお話になります。
この点枯れてそうな2.7を入れるのありなのでは?ってなりますが、サポート切れの言語をMSが組み込むのかなり評判悪そうというところ。

そのため、VBAみたいに言語仕様が変わらないのはある意味ではメリットだったりします。
さっさとOffice 365に全シフトしてほしい…

(メモ):ふと思ったのですが、Office Addins (office.jsの方。旧Apps for Office)は割とにょきにょきバージョン上げてるなと思いました。
とはいえあっちはマニフェスト定義してるしまだなんとかなるんかしら。

パッケージどうするの問題

Pythonのメリットってやはり豊富なパッケージ(? ライブラリ?)にあると思います。
こっちも普段使わないので知らないのですが、pip installは大事だとおそらく思っています。
巷でDeep learningにつよいって言われててもやはりtensorflow, caffe, chainer, scikit-learnやらのライブラリに助けられているところも大きいと思います。numpy, scipyとかもありそう。

ところで、この辺のパッケージもどう管理するのか、という話が出てきます。
たぶん生のPythonしか使えなくてうれしい!神!って人はおそらくいないと思っています。
(それ以上にDeep LearningとかData Analysisとかその辺の活用見込んでるはずなのに、その手のパッケージ一切使えません!じゃお話にならない)

さて、Pythonバージョン以上にパッケージのほうはさらに面倒です。

  • パッケージをどこに持つか
  • パッケージのバージョンをどうするか

という2つの問題が出てきます。

バージョンの話はさっきのPythonのどのバージョンの話と一緒です。バージョン互換性について一切保証されていないので、下手に組み込むわけにもいきません。
組み込まれたものしか使えません!もとてもつらみあるし。

そうなるとnuget packageよろしく、依存パッケージをインストールしようぜ!が割とよさげです。
しかしこれはこれで結構インパクトでかくて、Excelファイル開くたびにpip installが走るのウゴゴーってなります。
2MBのExcelファイル開いたら10MBのPythonパッケージ落ちてきました!とか言われるとかなりつらいという。
さらに落としてきたパッケージの管理もだるくて、毎回消してると開くたびにダウンロード走るし、全部残してるとディスク領域にゴミがというところ。

じゃあExcelファイルにパッケージ埋め込もうぜ!
なんかファイル容量一気にふえたんですけお。。。
組み込みPython問題が…。

書きながら考えてたら妥当なのが毎回ダウンロード走らすだなって思いました。
オフラインで使えないのは妥協。でも絶対ユースケースにある。(何よりもプロキシブロックとかされそう)

というわけでパッケージもちょいちょいめんどいなーというところ。

VBAExcelだけじゃないんですよ

個人的に上のはどうにかしようと思えばなる類かなぁと思っています。

ところでPythonのっける話って実はExcelとしか言われてないんですよ。
最近生きてるのか知らないAccessとか、地味にVBA使われてそうなOutlook、実は載ってるWord、PowerPoint、Projectなどもいるわけです。

VBA置き換えとなると当然これらの製品にも載るわけですが、他の製品だとCOM触れればよくねっていう感じがあるんですよ。
つまり他の製品のVBAを変えるのにPythonである必要性がないというところ。

データ分析とかの面でExcelPythonの相性がいいのは自明なんですが、PowerPointとかWordと相性いいか?といわれるとはて…となります。
その段階で他のあらゆる言語を押しのけてPythonというのはかなりよくわからない回答だなとなります。
最近はほぼWindows .NET 4,6とか載ってるのでC#いいじゃん!とかVB.NETいいじゃんとかその辺を押しのける理由があんまりないなーと。

ExcelだけPythonにして~とかだと結局VBAも保守せざるを得ないんで、それはExcelに載せない理由がなくなり死なないという流れ。
というか切り替えるときにもこれ起こって不滅なのでは…?っていう感想です。
Office Addinsも言うほど流行ってないし…
(Officeのバージョンの問題な気もする。やはり早くOffice 365に全しh)

(メモ):全く関係ないですが、Office 2019の製品にAccessとPublisherとOneNoteが載ってないオーラなんですよね。
Changes to Office and Windows servicing and support – Windows for IT Pros
これも実際出ないとわからないですが、AccessとPublisherは消滅する可能性ありそう。
OneNoteは無償化なりで販売しなくていいやという流れになってそうですが、ここ数年アップデートされてないAccessとPublisherはうーーーんという気持ち。
個人用途でAccessそもそも高いのと、商用だとSQL Database方面使おうって話で頻度低そうだし、Publisherはどの程度使われてたんだろ感なので消える可能性は十分あるかなーって感じです。

Office 2019自体もLTSB的なパッケージに対する累積アップデート状態であまり面白みがないのがぐぬみ。

VBAよりもPower Queryのほうが死にそう

というわけでVBAが生き残る理由を書いていたのですが、こうなるとだいぶ載り方が決まってきます。
Power QueryよろしくPython Editorが載るという感じか、PythonのパッケージでExcel使えるようにするとか。後者は既にある気がする。

Python Editorが載ると当然役目が大体おんなじというか下位互換味があるPower Queryちゃん存続の危機となります。
データソースへのアクセス的なところで役割分担を果たしてほしい。。。

(ちなみにPython Editorは上の問題どうするの?って話については、ファイルに紐づかないPythonだからバージョン固定じゃないし、使う機会限られるから毎回ダウンロードでいいし、Excelにしか乗せなくても問題ないという感じで丸く収まります)


という感じでなんかいまいちまとまりませんでしたが、VBAは死なんよ!何度でも生き続けるさ!という話でした。
えっ? ここまで書いてPythonにやられたらどうするのって? 1年間毎日Python for Excelの話書きます。。。

今年もゆるっとブログ書きたい…。

この辺で

2017年を振り返りたい

ブログ書いてないので振り返りでも書くかーって思ったら今22:54まじ

というわけで本当に書いてないですが振り返りましょう。猛スピードで振り返りましょう。
あと60分で終わるのかが気になる。

お仕事

はたらきたくない。

というわけでついに学生生活が終わりしゃかいじんにジョブチェンジしました。
ろっぽんぎのどこかでMacBook Proを眺め続けています。Windows 10ほしい。Office 2016ほしい。

お賃金というものによって生活水準が大幅に向上したのはいいのですが、精神が疲れる→散財パターンが多すぎてあれ。
完全にダメなポタクになってしまった。

あと早く死にたい、お仕事やめたいとかしか言ってないので何やりたいかも決めないとなぁと思いつつ。
今後何になるかは未定です!って言いながら仕事してるマンです。もうだめだ。

そさげ

ぱどどら:やめた
しゃどばす:第4弾でついていけなくなって第5弾で終止符がうたれた
ゴ魔乙:ギルバトだけやってる状態になってきた。土曜スコアタは参戦してもいい気がするけどもちべーーしょんがどっかいってしまっている。

そして2月ごろに✝闇✝のゲームFGOを開始したわけです。
いろいろ書きたいところはあるかもですが時間がないので
・よかったところ
 マリーかわいい
 エリちゃんかわいい
 1章たのしかった
・わるいところ
 ガチャはわるいぶんめい
 とりあえずグロければいいんだろ的な表現
 育成がだるすぎる
こんな感じでしょうか。もはやなんで続けているのか謎い。

ガチャはもうちょっと確率上げてほしいっていうか凸ゲーなのかよくわからなくなるやつ。
宝具Lvしか上がらないからいいじゃんってことなんですかね。わかりません

育成についてもスキル上げがエンドコンテンツなのはいいとしても、再臨がいつまでたっても楽にならないのはどうなんだろうと思ったり。
他のゲームってもうちょっと進行すると進化とかが割と楽になる気がするんですがFGOまったくその兆候がない…(新しく出てきたキャラが一線級になるまでが長いと使われないままさらに新しいキャラになりかねないので早くなる気がする)
えっ? 種火とQPと再臨素材を毎日集めてれば楽になる? ごもっともだけど…ごもっともだけどううむ

あとは9月くらいにアズールレーンを開始
ストレス要素を減らした艦これって感じの印象ですね。いいところは残しつつ批判ポイントは回避している感じ(羅針盤とか羅針盤とか羅針盤とか。あとは修復システム、轟沈やら)
ロドニーかわいい
とはいえ難易度の頭打ち感が否めないのでそろそろ苦しそうかなーという印象
このペースの難易度上昇で11章とか12章とか実装できるんだろうかって感じがあります。脅威度下げるシステムで~って言っても限界あるので今後どうするのかが気になったり。

課金周りとかは本当に良い感じなので頑張ってほしい気持ちはあります。
願わくばこの世のガチャの闇を照らし出す光が遍く注がれんことを。

ちなみに現在の艦隊はこんな感じ
f:id:fantasticswallow:20171231232435p:plain
ロドニーしかケッコンしてない…。
もう一人を決めるのが困る。

お花

じゃぶじゃぶしてた。
いや月5000は守ってたはず…?

割と完成してきて総合力570000とかになってきました。
f:id:fantasticswallow:20171231232650p:plain
あと3万は上げたいけどそっから先はほぼ無理な気がする。

そろそろ虹に置き換える以外の手段が取れなくなってきていて、しかし私は金でいいからつかいたいんじゃーーーってなるのでここからアンプルゥ投入して60万狙うのがちょうどいいかなぁという感じです。
パーティ1はほぼフルアンプルゥにすることで総合力を担保状態。

最近はお花も割とイベント走れてないのでいろいろとゲーム続けるのの限界を感じる日々です。
何もかも仕事がながすぎるのがわるい…

あれげ

たしか4本くらい買っていた気がします。
そして1本もクリアしていないという悲劇。

オトメドメインはお嬢様攻略途中でなぜかフェードアウト(たぶん時間取れなくてやれてなかったらやらなくなってしまった)
バルドブリンガーは武器集めに執着しすぎてメインを進めずにぐわーっ
CM3D2は買ったばっかりでやれてない。
金色ラブリッチェはお姫様攻略完で割とよさげなので走り切りたさ。

やる暇が本当にない……
そさげ時間を減らすとかそさげしながらオートで読むとか策を講じたい

PC

デスクトップを買いました
つくものそこそこよさげなミドルタワー

ノートPCでやってるといろいろ限界が感じられてたのでちょうどよかったという感じはあります。
限界というかコスパがひどくわるい…(同じ快適さを出すのに倍くらいかかるイメージ)

とりあえずVRとかできそうなGTX 1070とか積んだ子になりましたが、大体快適に動くのでとてもいいです。
特にお花が快適

あとモニターもEV2456に変更。こっちは本当によくて、目が疲れて昼寝ということがものすごい減りました。
怪しい疲れたおっさんを見る必要もないですしノングレア最高

しゅっぴ

学生時代「ふぁぼツバメは金を持ったらめっちゃ物買いそう」と言われていました。
では社会人になってどうなったか確認してみましょう。

2017年カテゴリ別出費~

  • しょくひ :198818
  • いやしカテゴリ:294489
  • そさげ :194740
  • その他の趣味:395354

ファッ!?
その他はPC周りがでかすぎたので放置することにして他がつらい
食費と同レベルにそさげに課金する私は一体っていうかこれだけあれば椅子が…椅子が…かえる…
つらい

癒しと書いたポタク関連については、正直ある程度はしょうがないとして、ちょっと高くないですかという気持ちも
これだけ使えば抱き枕カバーが7個も増える
一回のイベント費用が4万になってる時点でお察し状態

来年の目標

まだ環境整備が終わってないのでとりあえずその辺買えるまで出費の比率変えたさががが

とりあえず
PS4
・椅子
・G9 X MarkII
あたりを買うまではそさげ課金を抑えたいなぁ……。

というわけで
FGOは福袋だけ課金に
・そさげ切りたい
・癒し予算雑に切りすぎているので必要性を再確認したい

というところを目標に平和に生存していきたさ。


うおおお文章能力の低さが…。
書いてて難ですがすっごい読みづらい気がする。
でもあと3分しかないのですし。

来年はOffice 2019が出るとかなのでその辺を足掛かりにまたOffice追っていくようにしたい。

この辺で。

PHPでSlackに現在の降雨情報を投げてみる

暑い寒い寒い寒い暑い暑い寒いみたいなの本当につらいのでやめてほしい。

たまにSlackで現在の降水情報を見たいと思うときがあります。ないですかそうですねそんな気もします。
アメッシュ見ろやって話ではあるんですが、範囲の狭さ的に「そろそろやばいな」オーラを把握するのが面倒です。

というわけで、誰が得するのかわかりませんが現在の雨情報をSlackで投げてみましょう。
LambdaとかAzure Functionとかでやればいいんでしょうが、お金がないのでサイト動かしてるサーバーで簡単に動くPHPにします。
ほかの選択肢もあるにはあるんですけど、いまいち動かし方わからんという感じなので…。

全体の流れ

今回はSlackで適当に雨って投げたら動いてくれる仕組みにします。

というわけで
・Slackに投稿 (ユーザー)

↓(Outgoing Webhook)

PHPで雨情報取得 (サーバー) ←→ どこかの降水量情報

↓(Slack API (files.upload))

Slackに投稿される

みたいな感じにしましょう。

なんかOutgoing WebhookはLegacyとか言われていますが、特に終わる気配はないはずなのでこちらで。
internal integrationsとかいまいちわからないですし…?

まあなんにせよSlackから雨情報くれというのがサーバーに渡ればいいので、slash commandあたりでも作れると思います。
サクサクと作っていきましょう。

降水量を取得しよう

Outgoing Webhookの設定は世界のどこかにあると思うので(というか面倒なので)すっ飛ばしていきます。

降水量については、できれば高解像度降水ナウキャストがほしいんですけど、使う手段がよくわからない状態です。
気象庁 | 高解像度降水ナウキャスト

そのため今回はYahooのスタティックマップを使って現在の降水情報を取得し、Slackに投げていきます。
便利なことに画像でそのままくれるので、そのまま投げればよい感じです。

developer.yahoo.co.jp

使い方は上からどうぞ。
多彩なオプションが使えるので自分だけの最強アメッシュ画像を作ろう!とかができます。

今回はこんな感じで使っていきます。

https://map.yahooapis.jp/map/V1/static?
appid={appId}&
lat=35.504193&
lon=139.473445&
z=9&
width=600&
height=450&
overlay=type:rainfall|
datelabel:off&style=base:green|
off:background,address,area_name,line_name|
on:nature,water,prefecture

appIdは自分のアプリケーションIDをいれます。
lat, lonは座標です。好きな座標を入れましょう。
zはズームレベルを示します。値が大きいほど狭い範囲の拡大画像となります。
width, heightは画像の大きさを示すので好きな値で。
overlayは地図上に出すメタ情報的なものを指定できます。
例えば富士山などの地名、東名高速道路などの道路名、山手線などの線路などを表示するかを指定できます。
雨が見たいので割とoffでざっくり消してます。県の名前くらいはさすがに欲しいのでprefectureはon。
降雨情報はtype:rainfallで表示できます。

これでこんな画像ができあがります。
f:id:fantasticswallow:20170903175414p:plain
色合いとかはstyleとかでいじってください…。

さて、この画像をPHPで取得していきます。
コードはこんな感じ。

$amedasLink = "https://map.yahooapis.jp/map/V1/static?appid=...";
$imageData = curl_get_contents($amedasLink);
$ts = strval(time());

$imageFileName = "amedas-" . $ts . ".png";
$fileRet = file_put_contents("./" . $imageFileName, $imageData);


function curl_get_contents($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

もともとはamedasLinkをfile_get_contentsでとっていたのですが、なんかうまくいかず…。
助けてStackOverflowをしたらこんな記事が見つかったのでcurl_get_contentsをそのままもらいましょう。
stackoverflow.com

これでひとまずyahooの降雨情報をサーバー上で取得して保存まではできました。
保存した画像をSlackに投稿していきます。

files.uploadをたたこう

ところでOutgoing Webhookではファイルアップロードはできません。
attachmentsのimage_urlを指定すればいいじゃん!っていう話ではありますが、諸事情であんまりドメインとか見られたくないとかあったりあったりで。
まあなんにせよSlackへのファイルアップロード自体はできません。参照はできます。

というわけでアップロードしていきましょう。
アップロード自体はSlack APIのリファレンス読めばまあ何とかなるかなぁと。
files.upload method | Slack

POSTで投げるパラメータ自体はある程度理解できそうなのでこちらもcurl_execで投げつけていきます。

$slackUpload = 'https://slack.com/api/files.upload';
$ch = curl_init($slackUpload);

if(array_key_exists("channel_id", $_POST) == true)
{
    $channel_id = $_POST["channel_id"];
}

// Create a CURLFile object
$cfile = curl_file_create($imageFileName);

// Assign POST data
$postParams = array(
    'token' => '{your token}',
    'channels' => $channel_id,
    'filename' => $imageFileName,
    'file' => $cfile
);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data;charset=utf-8', 'User-Agent: curl']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParams);

// Execute the handle
curl_exec($ch);
curl_close($ch);

試行錯誤の成果みたいな状態…。

Outgoing WebhookではPOSTメソッドでtrigger_textやらを投げてくるので、POSTパラメータから投稿されたメッセージのchannel_idを取得します。
その後curlで投げるPOSTパラメータにchannelsという形で指定します。これで投稿されたチャンネルに画像が投稿されます。

curlでPOST投げるコードについては次の記事あたりを参考にしました。
masabloggers.blogspot.jp

curl周りは良しなに設定してなげつけます。
これで基本的にはうまくいくはず…?

最終的なコード

大体こんな感じです。

function amedas()
{
	$amedasLink = "https://map.yahooapis.jp/map/V1/static?appid=...";
	$imageData = curl_get_contents($amedasLink);
	$ts = strval(time());

	if(array_key_exists("channel_id", $_POST) == true)
	{
		$channel_id = $_POST["channel_id"];
	}

	$imageFileName = "tiger-amedas-" . $ts . ".png";
	$fileRet = file_put_contents("./" . $imageFileName, $imageData);

	if ($fileRet > 0)
	{
		$slackUpload = 'https://slack.com/api/files.upload';
		$ch = curl_init($slackUpload);

		// Create a CURLFile object
		$cfile = curl_file_create($imageFileName);

		// Assign POST data
		$postParams = array(
			'token' => '{your token}',
			'channels' => $channel_id,
			'filename' => $imageFileName,
			'file' => $cfile
		);
		curl_setopt($ch, CURLOPT_POST,TRUE);
		curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data;charset=utf-8', 'User-Agent: curl']);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $postParams);

		// Execute the handle
		curl_exec($ch);
		curl_close($ch);
	}
}

file_put_contentsの戻り値はファイルサイズを返すので、0だったらどちらにしろダメという感じで抜けます。
あとは戻り値を取るとファイル書き込みの完了を明示的にできるというあれそれ。



説明っぽい説明がすっ飛んでいる記事になってしまった。
そもそもPHPが詳しくないというのが問題な気がする。

最近いろいろ思うところもあるので、またOfficeとか追っていきたいなぁという感情はありつつ。
しかし会社でOffice使わないのがスーパーモチベーション下がる…。
うーんうーん。

この辺で