空談録

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

Office Lensでタペストリーとか撮ると便利という話

もっとIQの低そうな「Office Lensが最強のツールだと話題にwwww」みたいな記事タイトルにしたら人が来なそうだけどさすがにそこまでやる気が起こらなかった…

皆さんOffice Lens使ってますか。使ってますよね。当然
えっ? 使ってない? 今すぐ入れましょう。
えっ?? Windows Phone持ってない? 大丈夫です、そんな時代はとうに終わり今やAndroidでもiOSでも行けますので

Office Lensを App Store で
Office Lens - Google Play の Android アプリ
Office Lens – Microsoft ストアの Windows アプリ

これ以外のスマートフォン? 知らない子ですね…

Office Lensは説明文だけ見ると「業務の文書を取り込むためのアプリなんだな」と思われるかもしれませんが、超絶優秀なのでいろいろ遊べます
アプリの説明をさくっとしてから実際に使ってみましょう

Office Lensって?

blogs.office.comの記事
Office Lens: A OneNote scanner for your pocket - Office Blogs
去年の3月にWindows Phone向けに最初に提供され、その後Android,iOSに対応したOneNoteの系列のアプリですね
文書やホワイトボードを撮影したときに、そのままだと斜めになっていたりして読みづらいのを補正して、正面から撮影したかのように編集して保存できるアプリです

めちゃくちゃ単純に言えばホワイトボードをどの角度から撮っても正面から撮ったかのようにしてくれるアプリってことです
…単純?まあいいや

昔はOneNote系列だったのでOneNoteにしかインポートできなかった気がしますが(画像として保存はできたのかな?) 今は割といろいろ選べます
こんな感じですね
f:id:fantasticswallow:20151122185301p:plain
いったん画像としてから別のところに置くのが多いですが…

(突然の画像の理由はtwitter cards対策)

タペストリーを撮ってみよう

説明したので実際に撮ってみましょう

ところでタペストリーって撮るの大変だと思いません?
適当にSNSとかにアップロードする分の画像だったらどうでもいいんですけど、ちょっときれいに撮りたいなーとか思うと大変面倒な気がします

スキャンしろって? それはそうなんですけどそこまで手間かけたくないわけです

というわけで「手軽でちょっときれいに写真が撮りたい」と思ったときこそOffice Lensさんに頑張ってもらうときです

まずは普通に撮ってみます
端末はiPhone5タペストリーはkaroryさんのイラストのやつ
(画像自体は元画像の40%くらいまでサイズ小さくしてます。)

f:id:fantasticswallow:20151122190737j:plain

まあ正直これでもよくね?って言われると首を縦に振ってもいい気がしますが、Office Lensで雑に撮るとこんな感じです

f:id:fantasticswallow:20151122191150j:plain

見てください!めちゃくちゃ角度を気にして撮った画像なんかよりも雑に撮った画像のほうがきれいになります!(説得力がない)

実際Office Lensも多少気を遣うのですが(タペストリーを文書として認識してもらう必要がある)普通に撮るよりも早いですし、認識さえしてもらえれば後の角度はほとんど気になりません
認識自体は絵の種類によってはすぐにいかない場合があるかもしれません。(周りと色が違ったりすると楽) そういう時は何か所か色が違う部分をフォーカスしてるといつかいけるかなと
(白系の色で「ここがそうなんだぜ!」みたいなのを示してくと良い気はします。まあ頑張ってください)

ただまあ結構コントラストが変えられてしまうのでその辺が気になる場合は画像を編集してみましょう
PowerPoint(画像編集ソフト)で開いてコントラストを-40%くらいするとこんな感じです(消しまくってるのは容量削減のため)

f:id:fantasticswallow:20151122192010j:plain

まあどういう方向にするかは好みな気がしますが、元の画像に近い感じというとこんな感じかなと

PCの画面も撮れるよ!

おまけです

ときどきPCの画面を直撮りしてる人を見かけますが(スクリーンショット撮ればいいのに感はある)そんな方にもOffice Lensがおすすめです

PC画面にカメラを向けて画面を文書として認識させます。それでExcelを撮ってみるとこんな感じ
f:id:fantasticswallow:20151122192515j:plain

読めるかどうかは知りませんが案外まともな気がしません? しないですかそうですか…
モニター全体じゃなくてもウィンドウだけで認識させるのも行けますので何かと活用できるかなと

(Visual Studioも撮りましたが面倒だったので載せません。それなりにきれいです)

ちなみにスマートフォンの画面なんかも余裕です
弱いのはまっすぐじゃないものを撮影する場合正確に認識できません。認識できても斜めってしまい、普通に撮るのとあまり変わらない感じに


まあそんなこんなでOffice Lens便利だからとりあえず入れときましょう?という話
ポスターとかも行けると思いますし秋なんとか原とかでも役立つんじゃないでしょうか。でかい広告はきついかな…

なんとなくテンションが下がったりなんか言われたらこの記事とか画像は消します

この辺で

TumblrLikesSaving ver1.22

次は1.50だと言ったな、あれは嘘だ

偶然にも致命的なバグを見つけたので修正しました
ダウンロードは次の
https://dl.dropboxusercontent.com/u/12260653/TumblrLikeSaving-1-22.zip か http://artfulplace.net/files/TumblrLikeSaving-1-22.zip からどうぞ

内容は同じなのでブロックされてうるさかったらDropboxからどうぞ

変更内容は次の通り
・Likeの取得数を20以外にしていると正しくさかのぼらないのを修正
・強制的にLikeを最大数取得する際に、スキップする数を指定できるようにした

Likeの取得数を20以外にすると正しくさかのぼれないのを見つけてしまったので修正しました
基本的に20以外だと歯抜けになるか(1 ~ 19)2回しかさかのぼれないか(1 ~ 39)1回しかさかのぼれないか(40 ~ 50)のどれかになります

Likeのカウントを無理やり50以上にすると挙動がおかしくなりますが設定ファイルいじらなければ問題ないとは思います

またこの件に対応すべく(1年放置している時点で遅すぎる)強制的にLikeを指定回数取得する際に、スキップするページ数を指定できるようにしました
ページは基本的に一回の取得数と一緒です
取得数が20だったら20で1ページとなり、2ページ目は21 ~ 40番目のポストが該当します
(0ベースなので実際は違いますが、使用する際に意識する必要はありません)
このため取得漏れがありそうな期間を指定して取ることができるようになっています。


めっちゃ申し訳ない感じです
むしろずっと使ってて気づかなかったという…
適当にさかのぼったら平然と30とか漏れててうわあああ

あと1.50にしようかと思ったのですが、バグフィックス版を考慮してもTumblrLikesSavingという名前のアプリケーションでのリリースがあと5回くらいだろうということでこのまま連番で行きます
もうちょっとでC#への移行が終わりそうなのd…終わらせるので早めに出したい
Pinterestとかに対応して名前を変えてバージョンを2.x系にしたい
…12月中に出せるかなぁ…

この辺で

Office Insiderとかいうのが始まったけど

感想文です
Novemberアップデートがちゃんと来てないので来たらそっちは書きます

OfficeでもWindowsみたいに新機能が早く降ってくるOffice Insiderが始まったようです
Office Insiderのページは次のやつ
https://products.office.com/en-us/office-insider

追記(11/27):Morphとかがはいったビルドがおちてくるのは12月だそうです。Office Insiderですら12月だそうなので実際に出るのはいつになるのやら…answers.microsoft.com


ITmediaによる記事www.itmedia.co.jp

で、どうやらOffice Premium(プレインストールのOffice)でも使えるようなのでとりあえず入ってみました
入り方はOffice Insiderのページから "Install the Office Insider build now"のリンク踏んでOffice Premiumを関連付けてるMSアカウントでログイン、そのあと"Other versions of Office"(その他のバージョンのOffice)のところで"Office Insider - 32 / 64ビット"として(初期値がOffice Insider - 32ビットなので触らなければ入る)インストールを押すとOfficeのインストールが始まるので普通に進めればOK
32ビットと64ビットは使ってるほうで変えてください。Office Insiderで始まってれば行けます

あとは普通にいつも通りのOfficeインストールが行われるだけです

ですが現段階(2015/11/14時点)では何も変わってません
バージョンのみ"16.0.6001.1038"から"16.0.6228.1010"になっていますが機能が何もないです
OneNoteのリボンからメディアのGroupが増えてるのは確認できますが中身がありません。Online Video……

やることが一気になくなったのでいつも通りDLLを比較した結果、とりあえずExcelにまったく変更がかかってなかったので機能自体載ってないものと思われます
PowerPointのPpEntryEffect列挙子にppEffectMorphByObject, ppEffectMorphByWord, ppEffectMorphByCharの3つが追加されていたのでおそらくは「一般ユーザーにNovemberアップデートが来るまでの間のバージョン」か何かが降ってきてるんじゃないかという予想
(Morphはアニメーション効果なので、NovemberアップデートされたOfficeで編集したプレゼンテーションを壊すことなく編集できるようにするのが目的?)
(Morphアニメーションは見れるとかあるかもしれませんがプレゼンテーションが作れない)

ちなみにNovemberアップデートの内容は次の記事にあります
What's New and Improved in Office 2016 for Office 365 - Office Support

雑に並べると
・Morph:PowerPointの遷移アニメーションにMorphという効果が追加
・Designer:PowerPointのスライドのレイアウトのテンプレートみたいなのを提供してくれる? テンプレートからレイアウトを変更できる
・Calendar Insights Template:Exchangeとつなげて何とかかんとか
・Financial Templates:My Cashflow templateとStock Analysis templateがなんとかかんとか
・共有時のオプションが増えたよ(Word/PowerPoint)?
OneNoteYouTubeとかOffice Mixを埋め込んで再生できるようになる

Excelのテンプレートとか知りません
Morphは使えればかっこいいとは思います。やり方わからないのでアップデート来たら調べたい
DesignerはSwayに近い印象をなんとなく受けましたが近いような遠いような
OneNoteの埋め込みは気になるところ


まあ何が言いたいかっていうと早く来いって話です
Morphがマジで動画で見てうおお!?ってなったのでついにOffice 2016始まったかみたいな感じが(大げさ)

この辺で

TumblrLikesSaving ver1.21

ソースコードが維持できないレベルになってきた

とりあえず1.21です。1.20のバグフィックス

ダウンロードは https://dl.dropboxusercontent.com/u/12260653/TumblrLikeSaving-1-21.zip からでも
Dropboxに戻してみた

変更点は次の通り
・URL重複判定を利用している場合、リトライが正しく行えないのを修正
タイムアウトを設定できるようにしてみた
・Writelogのフォーマットを変更

一番上は早い段階で気づいてはいたのですがなぜか放置されていた……ぐぬぬ
リトライの処理でもURL重複判定が効いてしまって話にならなかったので修正しました

タイムアウトはすべての処理に適用されます
デフォルトは60秒です。特に問題なければこのままでいい気はします

WriteLogはキャプション部分が表示されないのでポストのキャプションをそのまま張り付けたのですが微妙


かつてない短さ

いや違うんですよ。リブログに対応させるとか思ったときにそんなん微塵も考えてない設計で投げたくなったっていう
Bindingとか一切なしのWinFormsでよくね実装なのでいったん作り直したい…

というわけで次のバージョンは1.50か2.0になります。2.0にするならUI作り直したいけどそんなんやってたらリリースいつになるのかってレベルなので1.50かなぁ
バージョンの数値がでかすぎるのも不便だなぁ…

この辺で

オンラインストレージをどう使うか

ポエムストリームアタックだ!

おとといだかにOneDriveが値上げしたり容量減らしたりでよく燃えてましたね
私も正直高いと思ったので移動するかなぁと思ったりしている次第です

だらだらと書いていきましょう

オンラインストレージの役割を考える

まずオンラインストレージは何に使うものかを考えておきます。じゃないと話がとても面倒だからです
私の場合オンラインストレージは次の三つの目的に分別できます
・保存:ファイルをオンラインストレージ上に保持する(バックアップその他)
・連携:ファイルを自分の利用する複数のデバイス間で同期する
・共有:ファイルを他のユーザーが利用できるようにする
保存ってまあ普通に保存してれば保存です。Disaster Recoveryなりバックアップなり後日使うなり何でもいいですが
連携は例えばスマートフォンで撮った画像をPCでも見たいとか、ドキュメントを別のPCでも編集したいとかそういうの
共有は普通にファイルを別の人がダウンロードできるようにするって考えてもいいです(共同作業的なのもありますが)

まあきっとおそらく個人用途であれば上の目的のどれかに当てはまるはずでしょう。もしあなたがこれ以外で使ってるなら私が頭悪いだけなのでこの記事をそっと閉じましょう
ところでなんで分けたかというと、どれが目的としての比重が大きいかで話が違うからです

もしファイルの保存を重視する場合、従量課金制のサービスのほうがかかる費用は安くなるのではと思います
逆に共有目的であればAWSGCPみたいないわゆるクラウドと呼ばれるようなサービスは避けたほうがよいでしょう
(クラウド…って何だろうと思うのですがいまいちそういうサービスを指す言葉がわかりません。IaaS…?でいいのかなぁ)
完全に共有だけが目的ならアップローダを使うのも手ですし

というわけでとりあえず目的を確認したので次の話に行きましょう

何をもって安いと考えるか

結論から言えば「払った額が少ない」ほうが安いです。普通ですが

オンラインストレージには2種類の課金があります。従量課金制と定額課金制ですね。まあ普通です
従量課金制はいわゆる1GB何円みたいな感じで使ってる分だけお金を要求されるものです。Azure、AWS(Amazon Web Services)、GCP(Google Cloud Platform)などがこれ
逆に定額課金は100GB何円といった一定のサイズで課金するものです。個人向けのオンラインストレージはほぼこっちでしょう

さて、この二つを比べるときに1GB単価で割ると話がおかしくなります。なぜかって?使用率が考慮されないからです
従量課金制では使用率は100%で計算されますが定額課金においては使用率は100%である保証がありません

例を考えてみます。1GBにつき1円の従量課金制オンラインストレージと100GB50円の定額課金制オンラインストレージがあるとしましょう(こんな安いのないけど)(どっちも月額でも年でもいいですが同じ期間の値段)
どちらも100GBで利用した場合お値段としては倍の差がつきます。しかしこれは100%利用している状況です。
もしどちらも50GBしか使っていない場合、値段は一緒になってしまいます(従量課金制は普通に50GB * 1円/GB。定額課金であれば100GBしかないので50円) つまり使用率50%以下になると保存用途において定額課金制はGB単価が従量課金制を上回ることになります
極端に言えば1GBしか使ってない場合、1GB単価は従量課金制は1円ですが、定額課金制の場合50円です。

つまり比較するにあたって「1GBあたりの単価が安いか」よりも「自分の想定する使用率の単価が安いか」を見るべきなわけです。1GB単価で割りたかったら100%使用しましょう

もう一つ、見逃せないのは通信料のお話です。従量課金制を採用するクラウドなサービスはたいてい通信料がかかってきます。逆に個人向けなオンラインストレージの場合通信料はほとんどの場合かかりません
ここで最初に考えた目的が重要になってきます。バックアップなどの低頻度でしかアクセスしない保存用途であれば通信料をほぼ無視できるでしょう。しかし共有などがメインの場合むしろ通信料に引っ張られてしまいます

まああれですよ、ただのGB単価がお安いものが~ってやっても意味がないという話です。AWS S3なりGCSがいくつかのプランを用意しているのもこのあたりがあるからですし
本気で何も考えないでGB単価だけを見ればS3 GlacierとかGCS Nearlineが一番安いでしょうが実際はそんなことはなかったりするわけですし

OneDriveについての話

OneDriveというオンラインストレージは最初の3つの目的を平均以上にこなせるサービスでした
Windows(というよりOffice?)への統合からも見て取れる連携性能の高さを重視し、保存と共有についてもしっかりしていました

事実として私も依存度自体は高かったわけです
現在3つのオンラインストレージを利用していますが
・OneDrive:保存、連携、共有
Dropbox:連携、共有
AWS S3:保存
という感じで案外よく使っていたわけですね

ただし今回の件でも思いましたがOneDriveはサービス自体への信頼度が低いと思われます
理由としては
・ファイルに対し向こうが監視しているという事実
・ストレージ容量が変動する
の二点です
前者はGoogleでもなんでもありそうですけど。緩いのはDropboxでしょうか…

問題は後者です。これはつまり「限界まで使うと損する」可能性があることを示唆しています
例えば今回も変更後の5GBより多く15GBより少ない場合も1年たてば課金することが求められるわけです。215GBの人で210GB使っていたら5GB減らすか255GBにするかを迫られるわけです。
これでは安心して使えないです。何かのボーナスのように一定期間の間利用可能というものであればそれを利用した結果はユーザー次第ですが、今回の変更はボーナスのように何らかの期限があると決まっていないものの変更です
容量が増える分には問題ないですが、減るとなると再び減る可能性があるためそう簡単に使用率を上げれなくなります。
(OneDriveについては25GB→7GB→15GB→5GBと2回目の容量削減)

オンラインストレージを分散することへの可否

ここの点も考えておきます

同一の目的を達成するためにオンラインストレージを分散することは非常に使いにくいです
これはオンラインでなくても様々な場面で発生します。とても簡単に言えば"My Document A", "My Document B", "My Document C"と何も考えずにランダムに分散させた場合、ファイルの重複検知、検索性のどちらもとても面倒になります
そう考えた場合「オンラインストレージの容量がいっぱいになったから別のサービスに手を出す」というのはあまりよい手であるとは言えません。

しかしやむを得ず分散を図る場合は目的も分割することである程度検索性能などを保つことができるといえます
例えばファイルの保存だけが目的だった場合、「画像ファイルだけは別のサービスで管理し、画像以外はもとのサービスで利用する」といった形で分割することで画像を探す場合は新たなサービスを、他はもとのサービスを探せばよくなります

というわけで「ファイルだけでなく目的も分散させる」ことが複数サービスの利用において最も大事ではないかと思います

で、OneDriveからどこに移ればいいの

いい加減主題に入りましょう

OneDriveはかなり高いレベルの水準のサービスであるといえます。保存容量についても「現在の課金プランを使用しているユーザーについては変更されない」とのことです
つまり、2016年の変更までに契約すれば月に"100GB190円"、"200GB380円"のプランが継続できます
変更後は"50GB190円"となり実質二倍の金額となります

ですが現状のプランが今後継続されていく保証がありません。気が付いたら2倍の金額を払うようになっていたとなってもおかしくないわけです
(まあすべてのサービスが値上げしない保証なんかありませんが、OneDriveの場合かなり変な体系になっているため上がる可能性が特に高いと言える)
上がらないに越したことはないですが、結果として上がった場合契約し続けたいと思うか?がOneDriveを使い続けるかのポイントではないかと思います

「こんなサービスを使っていられるか!おれば別のサービスに行くぞ!」って方向けにいくつか見ておきます。お金は基本月額

Google Drive
炎上ブログ的には最も人気なオンラインストレージ

無料で15GB利用可能
100GBで$1.99、1TBで$9.99
ファイルサイズは1ファイル最大5TB

機能やら利用可能なデバイスも似てるので割と人気なようです
Windowsとかの連携以外はほぼそのまま使えそうですし
ただし凍結されるとGmailのアカウントが飛ぶのでそこだけ注意ですかね(OneDriveも一緒ですが)


Dropbox
無料で2GB利用可能。キャンペーンで増やせるのはまだあるのかな…?
1TBで1200円+税(1296円?)
ファイルサイズの制限は特になし。(ウェブブラウザ上で行う場合は10GBのアップロード制限がある)

Dropboxはいまいち保存用途というよりも共有とかの用途に思えてあれです。(PC上にファイルを置くことを前提とした利用方法がメインに見えてくる)
スマートフォンだけで利用するなら他のと一緒なんですけどね


Amazon Cloud Drive
無料で5GB利用可能
年間で課金する形式。
20GBで800円、50GBで2000円、100GBで4000円、1TBで4万円
(1GBで40円単位の課金。月で割ると100GBは333.3円。1TBは3333円)
ファイルサイズの制限はなし(ウェブブラウザ上では2GBの制限)

値段がお高いですね…あと若干規約が厳しいかなという感じ
(共有メインだとつらい? 国外からのアクセス不可)

一通りの機能はそろってますがまだこれから感が


・box
無料で10GB利用可能
100GBで1200円
ファイルサイズ制限が無料だと250MB、Proだと5GBの制限

サイズ制限がいつぞやの---Drive並みです。目的次第といったところ

日本でよく言われてるのはこの辺でしょうか?

あと気になったのはこのあたり?

・Copy
無料で15GB利用可能
250GBで$4.99、1TBで$9.99。年間契約でもう少し安くできる
ファイルサイズ制限はなし

プランの間隔が広いかなぁという感じ。あとは会社をどこまで信頼できるかって感じかなぁ


・Bitcasa Drive
無料で5GB利用可能
1TBで$10、10TBで$99。年間契約でもう少し安く
ファイルサイズの制限はPCから上げればなし

えんたーぷらいず向けのせきゅりてーが使われているとかなんとか。容量が多いならありかなーという気もする


他にもあるって?ググってください。知らないサービスを調べて使いたいとあんまり思いません
エンタープライズ向けプランも出せ? それも知らない…

以下従量課金制を並べときます。無料枠なんてない。上級者向け

Amazon S3 (Simple Storage Service)
Standard Storageで$0.0330 ~ $0.0302/GB、Standard-IA(低頻度アクセス)で$0.019/GB
データアウトで$0.140~$0.120/GB。最初の1GBは無料
リクエストはGETが$0.0037/10000req, 他のメソッドは$0.0047/1000req。Standard-IAは二倍弱

移行なのでStandardストレージがメインかなという感じ。保存メインならStandard-IAでしょうか
Glacierはハイパー頭がいい人向けなので無視。候補に挙がる人ならこんな比較記事見なくても生きていけるでしょう
requestで結構お金が飛びやすいのとStandard-IAに若干制約があるので注意。


Google Cloud Storage
Standardで$0.026/GB、DRA(Durable Reduced Availability) Storageで$0.02/GB
データ通信は理解できなかった
リクエストはクラスに応じて$0.01/1000reqか$0.01/10000reqに分類される

データ通信の費用の計算方法がわからなかったので興味があったら Google Cloud Storage Pricing - Cloud Storage — Google Cloud Platform
StandardだとS3よりもGCSのほうが安いですね、たぶん(通信料がわからん)
リクエストの費用が若干高いので公開を考えるとS3のほうがいいのでしょうか。値段しか見てないので何とも
NearlineはGlacierよりも高速に復元できますが計算方法が魔界っぽいので頭が良かったらどうぞ


・Azure Storage
うーーん、Azure Storageはぶっちゃけ使いにくいイメージしかないのですがとりあえず書きましょう

ブロックBLOBでLRS(Locally Redundant Storage)で東日本リージョンの場合
$0.024 ~ $0.0224/GBとなります
データ通信はゾーン2なので?$0.138 ~ $0.12/GB
トランザクションについては$0.0036/100000トランザクション

Azure Storageは計算が面倒くさいのとアップロードをするためには何らかのツールが必須なのが難点
プランが柔軟なのはいいのですが頭が悪いのでめんどくさい。Webブラウザから上げれないのは若干マイナス

DR的なバックアップであればGRS(Geographically Redundant Storage)のほうがよいのかなーと思いますがLRSの倍
まあ知識があれば一番需要にこたえてくれそうなのはAzure Storageなんですかねぇ…


他のサービスは知りませn


まとめなんてなかった

考えるのが面倒だけどOneDriveから移りたいという場合Google Driveが強いかなーという印象です
まあいろいろ試すのはありでしょう。OneDriveも1年の猶予はあるはずです。1年使って碌なのがなかったらOneDriveに残るのも手ですし。1年たつ前に状況が改善するかもしれませんし…?

ちなみに私は様子見でいいかなーと。ロイヤリティボーナスが死んだらあきらめます
アカウント2つで共有フォルダ作ってもげもげしてるし足りないことはないんでしょうけど…

なんか個人向けじゃないものまで入ってザ・Poemしてしまった

この辺で

VSTOアドインでPowerPointにオレオレズームを追加する

デバッグ回数3回だしそもそも誰もいらなそうだし公開はしませんが

PowerPointのズームがなんだか変な倍率で決め打ち?なのかわかりませんが、もっと細かくズームしたい!と思ってもなんだか微妙です
だからといってズームのダイアログ開いていちいち数値入力してっていうのもうーん

というわけでもっと細かくズームできる仕組みを作ろう!というお話です
ただし私は頭がよくないのでWindowsのイベントをフックしてPowerPointへのイベントを強奪するような仕組みを作らないで手抜き実装です

(最良なのはPowerPointへのCtrl+ホイールのイベントをこっちで拾ってPowerPointに渡さないでズームすることなんでしょうがそんなん知らないという)

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

PowerPointのズームの変更

これは次のコードで実現できます

private static void zoomChange(int val)
{
    if (isAvailableZoom(val))
    {
        Globals.ThisAddIn.Application.ActiveWindow.View.Zoom = val;
    }
}

private static bool isAvailableZoom(int val)
{
    return val >= 10 && val <= 400;
}

やる気がないコード

とりあえずズームの有効範囲は10 ~ 400なのでそれに合わせたintを設定するだけです
適当に呼ぶと例外間違いなしなのでタイミングだけは間違えないようにしましょう

ただまあいちいちこんな感じで設定する数値指定したくないので次のようなメソッドで今回は対応します

internal static void ZoomIncrement(int val)
{
    if (isAvailableZoom(Globals.ThisAddIn.Application.ActiveWindow.View.Zoom + val))
    {
        Globals.ThisAddIn.Application.ActiveWindow.View.Zoom += val;
    }
    else
    {
        if (Globals.ThisAddIn.Application.ActiveWindow.View.Zoom != 400)
        {
            Globals.ThisAddIn.Application.ActiveWindow.View.Zoom = 400;
        }
    }
    
}
internal static void ZoomDecrement(int val)
{
    if (isAvailableZoom(Globals.ThisAddIn.Application.ActiveWindow.View.Zoom - val))
    {
        Globals.ThisAddIn.Application.ActiveWindow.View.Zoom -= val;
    }
    else
    {
        if (Globals.ThisAddIn.Application.ActiveWindow.View.Zoom != 10)
        {
            Globals.ThisAddIn.Application.ActiveWindow.View.Zoom = 10;
        }
    }
}

現在のズームの値に足す、引くで対応していくほうがホイール操作という点から見ると楽かなという感じです
とりあえずこれでPowerPointのズーム処理は完成です。あとは呼び出し部分を作るだけ

マウスのホイールの検知その他

ここは古き良きWinForms先生に頑張ってもらいます
まあ別にどっちでもいいんですけどどうせ見えないし……

適当にフォームを作ります。そこにTextBoxあたりをDock = Fillで設置しましょう
フォームのStartingPositionをCenterParentにして終了

マウスのホイールは Control.MouseWheel イベント (System.Windows.Forms) を使っていきましょう。
コントロールじゃないと取れないっぽいのでTextBoxのイベントを利用します。
MouseEventArgs.Deltaに変化した値がはいっているのでそれの+-だけを利用していきましょう

こんな感じでホイールの変化をとってみます

private void TextBox1_MouseWheel(object sender, MouseEventArgs e)
{
    var res = e.Delta;
    if (res < 0)
    {
        // ThisAddin.ZoomDecrement(2);
    }
    else
    {
        // ThisAddin.ZoomIncrement(2);
    }
}

ただ、MouseWheelイベントは"コントロールにフォーカスがあり"、さらに"マウスポインターがコントロール上にある"ことが条件なのでForm_LoadでWindowsStateをMaximumにしてあげた後にTextBoxをフォーカスしときます
フォーカスはいらないのかな…? まあどっちでもいいですが… 

とはいえ普通に最大化するとPowerPointが見えないのでFormのOpacityを1%にします。0%にするとイベントが取れなくなるので1%以上で指定。

これでフォームを表示している間はズームが変更できる機能となります。クリックで閉じるようにしとけば完璧(見えないので閉じるの面倒)
リボンからフォームを呼び出すボタンを追加してクイックアクセスツールバーに足しとけば便利かなぁという


ということでただのズームが不便だから別にズームできるようにしたというだけの記事
最近画像編集をPowerPointでやってるので標準のズーム機能が超不便…
少しはましになったと思いたいけどちゃんと使ってないので何とも

最近ブログを書いていないのでもうちょっと頑張りたい

この辺で

tmThemeを利用した痛Visual Studio Code化計画

ま た こ れ か
ごめんなさいまたです。気が済むまでやり続けます。ふぁぼツバメ先生の次回作にご期待しないでください

というわけでVisual Studio CodeがVersion 0.9になりtmThemeによるカスタマイズが可能になりました
TextMate Theme?とかなんとかだそうです。まあエディタの色に宗教はいろいろありそうですからね、こうやって対応できるようになるのはいいと思います

とはいえ私は色はまあ常識的な色なら何でもいいですが画像を出さないとコーディング効率が30%減(0 * 0.7 → 0)なので画像を出せるようにしていきましょう。

ver0.8までは次の記事参照?
artfulplace.hatenablog.com
なんかver0.8のcss違う気がしますがまあ参考程度に

追記(2015/11/19):0.10.1でExtensionが追加されましたが現段階ではどうあがいてもExtensionで背景に女の子が追加できなさそうでした。あきらめてCSSをいじってください。むしろ作り方知ってる人がいたら教えてください……
ちなみに0.10.1でも以下の手順で行けます

追記(2016/02/11):若干追記しました。あと0.10.8でも同様の手法で行けました

追記(2016/05/14):気が付いたら同じ手法でいけなくなっていましたので1.1.0に対応しました

追記(2016/07/01):またダメになっていたのでv1.2.1まで対応しました

追記(2016/07/31):1.3.1でもいけることを確認しました

tmThemeを利用すると何がうれしいの?

一言でいえば「アップデート時に設定が半分消えなく」なります
拡張という形で今回のtmThemeなどは利用するためアップデート時に書き換えられる心配がありません
まあ画像は出せないのでcssを結局いじる必要が出てきますが、今までのようながりがりを書き換えていく必要はなくなります

目標はこんな感じ。前回といssy

f:id:fantasticswallow:20151018223755j:plain

tmThemeの編集

npmでgenerator-codeとか入れてやるのがおすすめらしいです
残念ながら私の環境だとnpm install generator-codeがnot foundって出てきて解決方法不明なのであきらめて最終手段で行きます
まああの説明で使いこなせる人がいるのかって感じではありますが

まずVS Codeの本体があるフォルダの中からすでに入っているextensionsのフォルダに行きましょう
Program Filesの場合はProgram Files\Microsoft VS Code\resources\app\extensionsですね
extensionsの中からお好きなテーマを一つ選んで %USERPROFILE%\.vscode\extensions にコピーします
このとき"Light"と"Dark"はtmThemeで定義されていませんので選べません。あしからず

私は白系の背景が好きなので"theme-quietlight"をコピーしました

そしたらまずコピーしたフォルダの中のpackage.jsonをいじるべくエディタで開きます
このpackage.jsonのcontributesの中のthemes→labelが表示されるテーマ名となります。コピーしたままだと同じ名前でわからないので適当にわかる名前に変えておきましょう
uiThemeはベースとなるテーマがlightとdarkから選べます。"vs"がlightで"vs-dark"がdarkですね。お好きなほうを選んでください
ここの変更はあとで重要です。変えなくても覚えておきましょう
nameも一応変えておくと競合しなくていいかもです。調べてません

ここまでやったらpackage.jsonは保存して閉じます
次にthemes\hogehoge.tmThemeを編集していきましょう
改行文字の都合でメモ帳で開くと大変面倒なのでVSCodeなりで開きましょう

開いて最初のほうにこんな記述が見えると思います

	<array>
		<dict>
			<key>settings</key>
			<dict>
				<key>background</key>
				<string>#FFFFFF</string>
				<key>caret</key>
				<string>#000000</string>
				<key>foreground</key>
				<string>#333333</string>

stringの中身は適当です
key:settingsのところのbackgroundっていうやつがエディタ部分の背景色を表しています。これはアルファ値を適用できるので次のように書き換えましょう

	<array>
		<dict>
			<key>settings</key>
			<dict>
				<key>background</key>
				<string>#FFFFFF99</string>
				<key>caret</key>
				<string>#000000</string>
				<key>foreground</key>
				<string>#333333</string>

アルファ値は #FFFFFF の後につけましょう
透過率は0.6にしたいので99にしてあります
普段よりも高いのはわけがありますが後で

tmThemeはこだわらなければこれで十分です。他もいじりたかったら頑張ってください。
tmtheme-editor.herokuapp.com
tmThemeをブラウザ上で定義できるのもあるのでこういうサービスを使うと便利かもしれません

追記(16/02/11):glyph-marginが邪魔だと思いません?と思ったのでthThemeを調べてました
tmThemeの場所的にはgutterが効くようなのですがsettingsにgutterの値を追加しても効果がないようです…
つまるところ無視されてるみたいですね。さすがに仕様を全部読みたくないし断念

cssの変更

こっちも必要ですよ
じゃあ変わらないじゃんって? まあそうなんですけども

workbench.main.cssが0.9から超絶読みにくくなってるので解読はあきらめましょう
次のスタイルをworkbench.main.cssの最後に付け足します

.monaco-workbench .part.editor {
	 background: url('vsc-bg.png') no-repeat;
	 background-size: cover;
}
.monaco-editor.vs-dark.vscode-theme-transparentquietlight-themes-TransparentQuietLight-tmTheme {
	 background: none;
}
.monaco-editor.vs.vscode-theme-transparentquietlight-themes-TransparentQuietLight-tmTheme {
	 background: none;
}
.vs .monaco-workbench .editor:not(.empty)>.content {
        background: none;
}
.monaco-editor, .monaco-editor .inputarea {
        background: none;
}

ああ、クラス名が違うのでこれこのままじゃだめです
.vscode-theme-transparentquietlight-themes-TransparentQuietLight-tmTheme っていうのは自動生成でつけられた名前なので、tmThemeの名前によって変わってきます
じゃあどうやって調べるのって? Toggle Developer Toolsを使って調べてください。monaco-shell-content→div→monaco-editor-container→monaco-workbenchで調べられます
monaco-workbenchの部分をmonaco-editorに書き換えればOKです

追記(2015/11/19):今更ですけどここvsとvs-darkの両方に対応できるように書いてありますが、package.jsonで定義したどっちかだけでいいです。面倒なのでどっちも書いてますが

該当するクラス名にしたら同じフォルダにvsc-bg.png っていうのをコピーすれば完了です。
ところで今回は透過率を指定しなくてもtmThemeをいじることで対応できます。というのも画像と文字の間に色を指定できるレイヤーがはいるため、透過率を下げれば画像も見えにくくなります。
このためいちいち画像に透過処理を行う必要がなくなります。やったね!

追記(2016/02/11):glyph-marginが邪魔なので透過させたい方はこんな感じです

.monaco-workbench .part.editor {
	 background: url('vsc-bg.png') no-repeat;
	 background-size: cover;
}
.monaco-editor.vs-dark.vscode-theme-transparentquietlight-themes-TransparentQuietLight-tmTheme {
	 background: none;
}
.monaco-editor.vs.vscode-theme-transparentquietlight-themes-TransparentQuietLight-tmTheme {
	 background: none;
}
.monaco-workbench-container .monaco-editor .glyph-margin {
	opacity: 0.6;
}
.vs .monaco-workbench .editor:not(.empty)>.content {
        background: none;
}
.monaco-editor, .monaco-editor .inputarea {
        background: none;
}

クラス名は頑張ってください


というわけで少しだけこれからの作業量が減る感じでした
もっとcssをガシガシ変えられるようなテーマが実装されてほしかった気もします。無理か…

最近何もしていないのでもう少しプログラミングなりしていかないとなぁという感じです

この辺で