空談録

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

Office UI Themeをレジストリで観察してはいけない

さすがOffice、我々には到底できないことを平然とやってくれる

おっふぃーすのUIテーマを変えるとCustomTaskPaneのホストも変えてくれます。しかしWPFとかでコントロールを作るとコントロールは変わらなくて若干残念な気分になります
単純に言うとBlackテーマにしたらオレオレアドインもBlackテーマにしたいってだけです

しかしUIテーマはVBAなりで拾える気がしません。どうしたらいいのか

それレジストリでできるよ!

TLで嘆いていたら@miru_rhさんが見つけたようです

さすがですね、私みたいな雑魚とは経験値が違う…

とまあさておき、レジストリで見ると見つかるとのことなので探してみます
Office 2016だとこんな感じの位置です
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Common\UI Theme"
Commonの中にREG_DWORDで入ってます。下のフォルダではないです

2013の場合は15.0にすればOKですね

ですがここで問題が起こります。数字しか入ってないので対応がわかりません
Theme Configuration Group Policy support for Office 2013 – Anything about IT を見ると2013については
0 = White, 1 = Light Grey, 2 = Dark Grey 
となっています。では2016は?ということで検証してみます

結果はこれ
・Office 2016 (ver 16.0.6568.2016)
1 = Colorful
3 = Dark Grey
4 = Black
5 = White

…ぜひとも滅んでほしい感じですね
2がないあたりもよくわかりませんしWhiteが5に飛んでるのもわけわかりません

ですがここで終わりではないわけです。先ほどのはOffice Insider向けにBlackテーマが追加されているバージョンです。ではそれ以前はどうなっていたのでしょうか
結果を見てみましょう
・Office 2016 (ver 16.0.6001.1054)
0 = Colorful
3 = Dark Grey
5 = White

Oh! ミラクルファッキンナンバー!

すごいですね、16.0なら大丈夫とかそんなことはなかったわけですね
そもそもこんな簡単にずれる時点で参照とかしてらんないですね

結論

RenderTargetBitmapを使えばいいんじゃないかな


というわけでただ怒りに任せて書いたみたいな状態です
もし参照したいとか思ってもレジストリだけはやめましょう。ビルド番号まで決められたバージョンでしか使わないというなら止めませんが…

この辺で

ver16.0.6568.2016でExcelに追加されたワークシート関数について

怪奇!いつ追加されたのかわからないワークシート関数!

というわけで追加されたという新しい6個のワークシート関数について調べていきたいと思います
解説は知らないので公式のドキュメントとかを待つとよいかと

追加されたのは
IFS
SWITCH
MAXIFS
MINIFS
CONCAT
TEXTJOIN
ですね。とりあえず一つずつ見ていきます

インクとかの他の情報については昨日の記事でどうぞ
artfulplace.hatenablog.com

追記(2/24):Office Blogで関数についての記事が書かれてたのでそっちをどうぞ
blogs.office.com

IFS関数

プログラミング的に考えるとIf, ElseIf, ElseIf... って感じ。Elseはないです
定義としてはこんな感じ

IFS(logical_test1, value_if_true1 [, logical_test2, value_if_true2] ...)

logical_test* (*には数字が入る)は真偽値を返す式、値を入力します。
value_if_test* は対応する数字のlogical_test*がtrueの場合に返す値を入力します

IFSが返す値は最初に条件を満たした logical_test* に対応する value_if_test* です。これ以降に条件を満たす logical_test* があったとしても無視されます。
すべての logical_test* が false を返す場合 #N/A が返されます

例として書くとこんな感じ。
J7 = 3, J8 = 4, J9 = 10 とします

IFS(J7 = 1,"a",J7 = 2,"b",J7 = 3,"c",J7 = 4,"d",J7 = 5,"e") // = "c"
IFS(J8 = 1,"a",J8 = 2,"b",J8 = 3,"c",J8 = 4,"d",J8 = 5,"e",J8 = 4,"f") // = "d"
IFS(J9 = 1,"a",J9 = 2,"b",J9 = 3,"c",J9 = 4,"d",J9 = 5,"e",J9 = 4,"f") // = #N/A

Else取れないの案外面倒くさい…

SWITCH関数

CのswitchよりもVBのSelect Caseに近いというかVBAのInteraction.Switchというそのものな名前の関数がいる
定義はこんな感じ

SWITCH(expression, value1, result1 [, value2, result2] ...)

expressionには基となる値を入れます
value*, result* は expression が value* と等しい時に SWITCH 関数が返す値 result* をそれぞれ入力します
日本語難しい

SWITCHもIFS同様に最初に等しい値だった value* に対応する result* を返します。これ以降に等しい値となる value* が存在しても無視されます
expression と等しい value* が存在しない場合は #N/A を返します

例を書くとこんな感じ
J7 = 3, J8 = 4, J9 = 10 とします

SWITCH(J7, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e") // = "c"
SWITCH(J8, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = "d"
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = #N/A

追記(2/24):SWITCHのほうは既定値が設定できるようです
IFSと同じかと思っていた…

J9 = 10とするとこんな感じ
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f", "x") // = "x"

MINIFS, MAXIFS関数

どっちも似たようなものだし(何とか)IFSがわかれば簡単ですし…
定義はこんな感じ

MINIFS(min_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)
MAXIFS(max_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)

MINIFSはすべてのcriteria*を満たしているmin_range内の値の中で最も小さい値を返します
MAXIFSはすべてのcriteria*を満たしているmax_range内の値の中で最も大きい値を返します
やったね!コピペがはかどるよ!!

正直SUMIFSとかAVERAGEIFSで使い方見たほうが早いんじゃないですかねこれ…

すべてのcriteria*の判定終了後にmax_range, min_rangeに値が一つもない場合0を返します

例を書くとこんな感じなのかなぁ。SUMIFSでググったほうが絶対にわかると思う
A1:A5にはそれぞれ1,2,3,4,5が入っていることとします

MINIFS(A1:A5, A1:A5, ">3") // = 4
MAXIFS(A1:A5, A1:A5, ">3") // = 5

MINIFS(A1:A5, A1:A5, ">6") // = 0
MAXIFS(A1:A5, A1:A5, ">6") // = 0

TEXTJOIN, CONCAT関数

CONCATENATE?あいつは死んだんだ…

定義はこんな感じ
CONCAT(text1, [,text2] ...)
TEXTJOIN(delimiter, ignore_empty, text1 [, text2] ...)

CONCATは引数に指定したテキストをすべてそのまま結合して返します
TEXTJOINは指定した text* を delimiter で区切りを入れながら結合します。このとき空のセルが含まれる場合は無視することもできます

これは例を見たほうが早いですね
A1 = "aaa", A2 = "bbb", A3 = "ccc", A4 = "" として、A1 ~ A4を結合してみます

CONCAT(A1,A2,A3,A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1,A2,A3,A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1,A2,A3,A4) // = "aaa,bbb,ccc"

こんな感じでとりあえずくっつけるならCONCATを、区切り文字も指定したい場合はTEXTJOINを使う形で行くとよいです。

ん? 君は…CONCATENATEじゃないか!どうしたんだ! なに? 俺が付いてるだろって?

CONCATENATE(A1,A2,A3,A4) // = "aaabbbccc"

そうだな、確かにCONCATと同じ値が返ってくるな

残念ながら君の役目は終わったのだよ

CONCAT(A1:A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1:A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1:A4) // = "aaa,bbb,ccc"

CONCATENATE(A1:A4) // = #VALUE!

というわけでレガシーーーExcelと何かするでもなければCONCATENATEではなくCONCATを使いましょう


とりあえず追加分は全部書いたはず

ちなみにIFSとSWITCHはWorksheetFunctionに追加されていません。どこから湧いてきたんだ
って思ったけどこんなんVBAで処理できない気がするんだよな…

この辺で

Office 2016 ver 16.0.6568.2016がOffice Insiderに来ました

ただしメインのインクがおかしい模様…

というわけでOffice Insiderに前回のインク機能のアップデートが降ってきました
11時になってから気づいたのでもうだめです。このブログ記事は300文字後くらいに終わりが

http://answers.microsoft.com/en-us/office/forum/office_insider-office_install/announcing-insider-build-16065682016-for-office/4d740c46-db7d-4d52-a50a-ab61de23ae40
フォーラムのリリースについての記事

support.office.com
いつものやつでJanuary 2016が追加されてます

なんか既知のバグがあるけどちゃんと出す前に直すよって書いてあります。一応読むといいと思います

新機能について雑に書いときます。明日になったら書き直すでしょうたぶん

追記(2/5):Instant Inkingについて書きました。ワークシート関数は別の記事にしました

What's Newが増えた

アップデート後、初めて起動するとこんなダイアログが出迎えてくれます

f:id:fantasticswallow:20160204233528p:plain

これはPowerPointですが、Insider後の新機能についてこんなん増えたよ!ってアピールしてくれてますね。これは便利です
でもこれ大規模アップデートみたいなのあったら大変なことになるんじゃ

Drawタブの追加

というわけで前回書いた通りDrawタブが追加されました
Instant Inkingが試せないのでいまいち嬉しさがないですね

追記:Instant Inkingうちでも試せました。CTH-460を持っていて本当によかった
てっきりSurface Pro3とか専用の機能かと思ってたんですよ
そしたらどうもIntuosで動かしてるって文字が見えたので過去に買ったわこむタブレットを拾ってきてやってみたらできたという

Instant InkingはペンでWord, Excel, PowerPointに入力するとインクとして直接書き込める機能です
??どういう意味? って感じですがペンを近づけると自動的にペンに変わって、ペンを離すと元のモードに戻るってイメージでよいかと

Instant Inkingの場合ポインターで書くのと違い、ペン操作への切り替えをスムーズに行えるためかなり便利です
ポインターではいちいちペンを選択→描く→ポインターに戻すの作業が必要ですが、Instant Inkingでは(ペンを選ぶ→)描くで済むので
ちなみにInstant Inkingでは最後に選んだペンが使用されます

以上Instant Inkingについての追記です。以下元の文


Word, Excel, PowerPointに追加された気がします
インク選択してゴリゴリ描けるのは便利かもしれないです。とはいえいちいちインクに変えたりポインターに戻したり~っていうのは不便かなぁとも思いつつ
Shape RecognitionはPowerPointだけでした。とりあえず今回でかいのはこれだと思うので試してみましょう

PowerPointのDrawタブで"Convert to Shapes"がトグルボタンなのでオンにします
この状態でインクで図形を描けばOKです

例えばこんな感じに四角もどきを描いてみると
f:id:fantasticswallow:20160204232745p:plain

f:id:fantasticswallow:20160204232756p:plain

この通りです。Rectangleの図形になっていますね

一筆書きだけなのかーっていうとそういうわけでもなく、一辺ずつ書いても認識します
なのでこんな感じに

f:id:fantasticswallow:20160204232905p:plain

f:id:fantasticswallow:20160204232917p:plain

矢印を書いても矢印の図形として認識してくれます。これはいい…いいぞ…

ただしあんまり雑に書くと認識してくれません。辺の端が別の辺の端と離れすぎると認識率が一気に落ちるのでつながりのところに気を配りましょう
直線かどうかは全然気にしなくていいので辺の途中は適当で大丈夫です

追記(2/14):図形認識ですが、ペンの種類が"Highlighter"(蛍光ペン?みたいなの)だと変換されません。太さは関係ないのですがそれだけうまくいかないもよう

ちなみにマルチスクリーン環境でプライマリディスプレイとほかのディスプレイの解像度が違う場合Word,Excelにおいて解像度が違うモニター上で表示時にインク処理がおかしくなる気がします。うちだけですかね…
うちは今2560x1440と1920x1080のデュアルスクリーンなんですけどセカンダリのほうにExcelとか持ってくとマウスポインタから遠く離れた位置にインクが描画されることに…ぐぬぬ

写真撮ってみるとこんな感じ。左側にいるサバがマウスポインタ。赤線が今引いてる線
f:id:fantasticswallow:20160205000428j:plain

Blackテーマの追加

やばい、Enterprise向けOfficeみたいな感じやばい。もともとEnterprise向けだった

ハイコントラストで使ってるユーザー向け?に黒のテーマが追加されたようです
変更するとこんな感じ

f:id:fantasticswallow:20160204231515p:plain

かっこいいですね。このまま使うか…

Funnelグラフの追加

値の大きさを長方形の幅で表すFunnelというグラフの種類が追加されたようです。適当にやるとこんな感じ

f:id:fantasticswallow:20160204234134j:plain

ワークシート関数の追加

明日調べる
"IFS, MAXIFS, MINIFS, SWITCH, CONCAT, and TEXTJOIN" が追加されたそうです。詳細がわからない
文字列関係が増えてるようですが

追記:増えた関数についての記事。増えたのは条件判定と文字列関係ですね
artfulplace.hatenablog.com

なんかほかいろいろ

よくわかりません。比較すべき前バージョンの知識もないし…


細かいところは明日のふぁぼツバメが頑張ってくれるでしょう
とりあえず速報的なのの役割は果たせているはずだ…

今はでぶかっしょんで始めた謎プロジェクトを進めてるのですが進捗状況がよくないのでこちらもぐぬぬ
3体ぐらいに分裂したい

この辺で

OfficeのJanuary 2016アップデートについてのメモ

すごい素朴な質問なんですけど普通のユーザーの現行バージョンっていくつなんですかね…? 6366.2056?

とりあえず4日くらい前にJanuaryアップデートについての記事がOfficeブログに出てましたね。今日気が付きました
New to Office 365 in January—new inking tools, collaboration improvements, Office Insider builds now available for Mac and more - Office Blogs
言ってることはまあわかりやすいのですがなんとなく読みづらいので自分用に書いときます

ちゃんと調査しないで誤った記事を書く…ウッ!頭が…

Mac向けのOffice Insiderが始まるよ + 電話とかの話

MacでもOffice Insiderが始まったようです。Mac持ってないのでよくわかりません

追記:Office 365に詳しいかずあきさんがすでに書いてました
blog.kazuakix.jp

またDesktopとWindows 10 Mobileでは対応していたMorph, DesignerがiPhone, iPadでも対応したようです。案外早い
Android上でのInsider Previewでは次のビルドで使えるようになるとかなんとか

インク機能の強化

iPad ProのApple Pencilでめっちゃ描けるぜ!って書いてあるけどそれは置いときましょう。私持ってないし
気になる方はブログで見ましょう

私みたいにWindowsでしかおっひーすを使ってない人達は2枚だけあるWindows版Officeのスクリーンショットに注目しましょう。するとあることに気が付きます。"Draw"タブの存在です。
おそらくOffice Insider向けに今後OneNoteにあるようなインク機能がWord, Excel, PowerPointに来ることが予想されます。Publisher…? 聞こえませんね…

なんでそんなんわかるかというと、見た目上存在しませんがリボンのカスタマイズ画面において"Draw"のタブが存在しているためです。(6366.2062時点。前からある?さすがに前のバージョンに戻すとか無理…)
f:id:fantasticswallow:20160125223122p:plain

とりあえずWordのリボンのカスタマイズ画面と実際のリボン。リボンにはDrawがありませんが設定画面上では存在していることがわかります。
Pen, Color, Thicknessということでまあ普通のペン入力は揃えてる感じ。Select Objectはおそらく普通のモードだと思われます? Eraserはストローク単位かなと

興味深いのはConvertグループです
WordではOneNoteでも存在する「インクを数式に変換する」が用意されています。しかしExcelではConvertグループ自体存在しません。
さらにPowerPointでは"Convert to Shapes"(インクを図形に変換)が用意されています。これこそがおそらく"Shape Recognition"と呼ばれている機能だと思われます
Shape Recognitionはインク入力から近い図形を生成する機能となります。適当にペンで丸を書いたら丸の図形を生成する機能ですね
PowerPointOneNote?にくるのかなと。Shape RecognitionがあればPowerPointで図を作るのも楽になるのではないかなと思ったりします

Instant Inkingはたぶんペン置いたら直接かける的な何かでしょうしうちにはペンがない…


というわけで1月のアップデート(あと6日で1月終わるけど)はインク機能のようです
Shape Recognitionは試してみたいなぁ

Slackの何かを始めましたがまあ当分書くこともない感じ

この辺で

TumblrLikesSaving ver1.25

魔のKUSO CODEが襲い掛かる!

とりあえず1.25になりました。ダウンロードは https://dl.dropboxusercontent.com/u/12260653/TumblrLikeSaving.zip とかで
変更はほとんど進んでいません。モチベーションが吸われた形です

変更点は
pngのみで保存するオプションが正しく動作しないのを修正
・キャプションのURLを画像のソースとして利用する対象にした
・pixiv.netのURLを解析して重複判定を行うようにした
・UserAgentの上書きをIE11のものに変更した
となります

pngのみの保存がおそらくまともに行われなくなっていたのでコードを修正しました
たぶんうごくはずです、たぶん

今までSourceURLとLinkURLしか見てなかったんですけど、どうもTumblr界ではCaptionにだけURLを貼る感じの何かが存在することを把握したのでCaptionからも拾うようにしてみました
一応動いてるので大丈夫なはず

pixivはすくれなんとか対象として面倒なのと今のコードじゃ対応できないので基本放置なのですが、同一ソースの判定としてURLを利用するのはできるようにしてみました
仕様としては
・mode=bigの場合画像が1枚で固定なので同illust_idを持つ画像は重複とする
・mode=mangaの場合は画像が複数存在する可能性があるのですべて許可する
・mode=mediumとかそのほかの場合は同illust_idがすでに保存されている場合通知のみ行い、画像はそのまま保存する(mangaの場合を考慮)
となります。若干判定が怪しいかもしれないですが保存自体はほとんどの場合許可されるのでたぶんいけるはず

IE10がお亡くなりになったらしいのでUserAgentをIE11のものにしときました。これで安心ですね


というわけで若干面倒だったことを解決するためのアップデートでした
いい加減進めないと…しかしWoTがいそがs

この辺で

Twitter APIのstatuses/unretweetって何?

新年初の記事ですね!(違う)
だって書くことないし…

Twitter APIにstatuses/unretweetとかいうのが追加されてたみたいですね
これですね
dev.twitter.com

ひとまず読んだ限り「ツイートをRTしたのを削除する」って意味かなーと思うのですがよくわかりません
そもそもみなさんご存知の通り"statuses/destroy"君で今までも同じようなことができたはずです。とはいえ同じ機能なら今更新参者を呼ぶ意味が分かりませんね
残念なことに私は英語がまともに読めなかったので実験してみました

statuses/destroyと比較してみよう

というわけでこちらで勝手に実験してその結果をご報告だけしましょう。TLに複数回流していたのは申し訳ないです

(以下の文はTwitter API触ってる人という前提です)

まず基となるツイートを"A"とします
次にユーザーxがAをRTしたツイートを"B"とします
さらに別のユーザーyがAをRTしたツイートを"C"とします

ここでA,B,CそれぞれのステータスIDを{A},{B},{C}と表現することにします

さてユーザーxがBを消すためには従来の"statuses/destroy"であれば次のようにする必要がありました
・POST statuses/destroy/{B}.json -> 200 OK

当然ですがこのとき次のリクエストはForbiddenとなります
・POST statuses/destroy/{A}.json -> 403 Forbidden
・POST statuses/destroy/{C}.json -> 403 Forbidden

ここまでは従来の話です。続いてstatuses/unretweetを使いましょう
statuses/unretweetはstatuses/destroyと違って「元のツイートのID、またはそのツイートのRTのいかなるID」であっても自分のRTを消すことができます
つまり
・POST statuses/unretweet/{B}.json -> 200 OK
・POST statuses/unretweet/{A}.json -> 200 OK
・POST statuses/unretweet/{C}.json -> 200 OK
となります。今回であればユーザーxがBを消すのにA,B,CどのIDを使っても消すことができます。

当然これはそれ以降のRTとしてD,Eが存在しても同様です。なので「自分の行ったRTのツイートを探して消すのが面倒くさい」みたいなのは解消しますね

どうでもいいメモ

もし指定したIDのツイートをRTしていない場合どうなるかというと200が帰ってきます。なぞだ
中身はその指定したIDのツイートのjsonです
新しいstatuses/showの形か!?!?!?


以上です。ちゃんと試してません。違ったら申し訳なく

もうちょっとブログを書く機会を増やしたい…ネタがない…

この辺で

抱き枕的な何かが家に来た話

ゆうべはお楽しみでした、そう書こうとしていた時期が私にも
そもそも今年初めての記事がこれって…

よくわかりませんがDAKIMAKURAerという悪の組織の陰謀により抱き枕とかいうアイテムが家に追加されました。あと1年くらいいらなかった
本体だけ来たせいでまったく使ってませんでしたが、昨日無地のカバーーーさんが来たのでようやく使えるようになったのでいったんまとめとこうという感じの記事

れぶゅー? 読書感想文が「面白かったを水増しするだけの不毛な文章」とか言い出すからやめよう

ことの発端

どこだろ、よく覚えてない
少なくともこの辺

このあたりから気を抜いたら食われる状況だった気がしますね
なんとか回避しようとしていましたが、途中から手元に用意して投げようという手段を使うと言われてしまったので、さすがにこんなことで他人に手間かけさせるくらいならということでほしいものリストを作って投げる結果に

こうやって聞いたんですけどねぇ……  まあ大体これじゃ意味ないことわかってましたけど…

ちなみに私のほしいものリストは住所を入れてないです。なんでかって飛んできても困るし…親関門で引っかかっても面倒だし…石臼も土も塩も飛んでこないし…
それはそのままにしたいので新しく作って投げました。抱き枕としか書いてなかったので適当に入れておきました
f:id:fantasticswallow:20160105104702p:plain
今朝の状態です。あとはお察し

ということでひとまずルータケーキさんの陰謀により抱き枕が到来しました
ただまあ私はカバーを持っていないので15日ほど放置されることに

むじのかばーが来たぞ!!

というのが昨日
ん? 冬コミでカバーを買えって?? そんな金はない
そもそもそれがつけれるなら某マップ特典があるし…触った感じ微妙だったけど

たぶんこれが来ました
Amazon.co.jp | 抱き枕無地カバー DKM100 ベージュ | ホビー 通販

触った感じはトートバッグとかあの辺の感触かなーとおもいました。丈夫そうでいいですね
その後人間としてのスキルが足りなかった影響により50分ほど抱き枕カバーをつけれなくて泣いてました
最終的に「靴下の要領」というのを参考にとりあえず押し込みました。まあ無地だしいいよね…

そしていざ寝ようと思ったそのとき!気が付きます!
狭い!!!!!
やっぱり3分の1占めるのはさすがに狭い…

あと特に抱き枕によって睡眠の質が上がった記憶もなければ、そもそもそんな習慣もないので抱き枕を抱いてた記憶もないです。やはり私には抱き枕は10年早かったんだ…
いやまあ柔らかくて素敵なんですけどね、私には早かったようです


というわけでよくわからない記事でした
まずベッドのサイズを確認してから買いましょう

あと大体寝ようと思うと5分くらいで寝てるのでどうしようこれ感が加速する
一週間後にはまともな使い方を見出したい

この辺で