追記

雑記帳


2018-01-28 (Sun) [長年日記]

[GTD] 今年登場するOmniFocus 3は刷新されるようなので新機能をまとめた

The Omni Blogで、2018年のロードマップが公開された。

中でも特に、OmniFocusはバージョン3で刷新されるとのことで、どのように変化するのかが詳しく書いてあった。自分も長く使っている中で、不満に思っていたことが、かなり解消されるようなので、超うれしい!ということで、ちょっとまとめてみた。

コンテキストからタグに変更

従来は、GTDで言うところのコンテキストは、一つのタスクに対して一つしか設定できなかった。OmniFocus 3では、コンテキストはタグに置き換わることで、一つのタスクに複数のタグを設定できる。

自分もこれまで、複数のコンテキストを設定したいと思っていたので、これは嬉しい。

手動での並び替え

コンテキスト内のタスクの並び順ついて、これまでは自動的に順番が決まっていて、並び替えはできなかった。タグごとのリストでは、任意に順番を変更できるようだ。

これも地味に嬉しい。コンテキストが一つしか使えなかったと同様に、これも使いづらかった要因だったかと思う。その辺りが理由でコンテキストをうまく使えていなかったので、ここが改善されたらさらに便利になりそう。

柔軟なスケジューリング

これについては、どう変わるのかがよく分からなかったんだけど、特に繰り返しに関するタスクのスケジューリングが柔軟にできるようになるようだ。

これまでは、タスクの開始と期限しか設定できなかった。これについては、実際に触ってみたら良さを実感するだろうと思う。

柔軟性のある通知

これまでは、期日に達した時と、位置情報に基づくコンテキストの通知がされていた。

また、複数のタスクが同時に通知された時には「他3件」のようにまとめて通知されていた。この場合は、いちいち詳細を確認する必要があった。

iOSの新しいリッチな通知をサポートするようになったため、位置情報に基づく場合に地図が表示されたり、複数のタスクがリストで表示されるようになった。

さらに細かい通知の設定ができるようなるようだ。

複数のタスクが通知される時に、リストが見られるようになったのが特に嬉しい。

デザイン

iOS 7からのフラットデザインに対応していたが、よりよくリデザインされたようだ。

また、ドラッグ&ドロップに対応して、iPadとかでもタスクの移動がやりやすくなったりするようである。

強力な自動化

JavaScriptに対応した自動化がサポートされる。フィルタリング、レポート作成、テンプレートを使ったコンテンツの作成などができるようだ。

これまで自動化は使ったことはなかったが、機会があれば使ってみようと思う。

コラボレーション

これまでは個人で使うことが前提になっていたため、タスクを共有するような機能はなかった。

OmniForcus 3では、それぞれ個別に所有している別々のデータベース間でのリンクする機能が追加される。タスクがリンクされていると、それぞれのタスクのステータスを確認できるとのとこ。

これも便利そうだ。自分は自分がやらないといけない家事のタスクを管理しているが、これを家族内で共有したいと思うことはよくあったので、ぜひ活用したい。

OmniFocus for The Web

簡易的なビューがWebブラウザで提供される。これはアプリ版のOmniFocusを使っている人向けに、Windowsなどの未対応デバイスでタスクを確認したりするのに使えるもの。 いざという時に使えそうだ。

以上、OmniFocus 3の新機能をざっとまとめてみた。TestFlightもされるようなので、積極的にフィードバックしたいと言う人は登録するのがいいと思う。


2017-12-20 (Wed) [長年日記]

[AzureAD][SSO] Workplace by Facebookを一斉展開する

Facebookによる企業向けのSNS、Workplace by Facebook(以下、WF)というものがある。企業向けSNSということなので、当然ID Providerと連携してSSOすることができる。

今回は、Azure ADをID Provider(IdP)を使い、自動ユーザー登録とSSOを使ったログインができるように構成する。WFはギャラリーに存在するので、そこから追加すれば良い。

なお、今回はSSOとプロビジョニング設定が主眼なので、WF自体の開始方法は説明しない。すでに利用開始できているものとする。

WFの設定情報の取得

社内ダッシュボードの認証設定画面で、LoginをSSOにすると、設定画面が開く。下記の情報が表示されるので、それをメモる。Azure AD側の設定をする際に必要となる。

  • オーディエンスURL
  • 受信者のURL
  • ACS (Assertion Consumer Service) URL

Azure AD側の設定

Azure ADのWorkplace by Facebookを開き、下記の設置を行う。

シングルサインオンの設定
シングルサインオンモード
SAMLベースのシングルサインオン
サインオンURL
WFの組織トップURL(https://<organization>.facebook.com/)
識別子
先にメモしたオーディエンスURL
SAML証明書
自動的に作成されているのでダウンロードする
通知用メールアドレス
証明書が切れそうな時に通知欲しいメールアドレス

そして、最下部に[Workplace by Facebookの構成]があるので、クリックして情報を表示する。下記の情報をメモる。

  • Azure AD Single Sign-On Service URL
  • Azure AD SAML Entity ID

[Download Azure AD Signing Certificate (Base64 encoded)]というリンクから、証明書をダウンロードする。

WF認証の設定

WF側のSSOの設定をする。社内ダッシュボードの認証ページを開き、下記の項目を埋める。

SAML URL
先にメモしたAzure AD Single Sign-On Service URL
SAML Issuer URI
先にメモしたAzure AD SAML Entity ID
SAML証明書
ダウンロードした証明書の内容をテキストで貼り付ける

ここまで設定したら、[SSOをテスト]ボタンを使って設定が正しいのかのテストができる。押してみて正しく動作しているかを確認する。

ここまでの設定で、WFにすでに登録されているユーザーは、SSOができるようになっているので、確認すると良い。

メンバー追加の設定(プロビジョニング)

SSOの設定ができても、WFに登録されていないメンバー(ユーザー)は、ログインすることができない。メンバーアカウントをWFに自動的に登録する必要がある。

ここでは、Azure ADにあるプロビジョニング機能を使ってユーザーの登録や削除を実施する。WFと同期するメンバーは、先ほど作成したグループのメンバーとなる設定を行う。

アプリの登録

WFの社内ダッシュボードにある、[統合]を開き、[カスタム統合]を選択する。[+カスタムアプリを作成]を押す。

カスタムアプリの名前と説明に、 任意の値を入力する。

アクセス許可に、[グループの管理]と[アカウントを管理]にチェックを入れる。

[アクセストークン]ボタンを押して、アクセストークンを取得する。

[保存する]お押して、データを保存する。

プロビジョニングの設定

WFのプロビジョニングを開く。プロビジョニングモードを[自動]にすると、設定項目が表示される。下記の項目に値を入れる。

シークレットトークン
先ほど取得したアクセストークン
テナントのURL
https://www.facebook.com/scim/v1/

[テスト接続]を押して、問題ないか確認する。問題なければ、一旦[保存]する。

[プロビジョニング状態]を[オン]に変更し、[保存]すると、同期が開始される。

同期の状態は、監査ログに出力されるので、そこを確認するといい。

ユーザーの招待

プロビジョニングができたら、自動的にユーザーの登録は実施されるが、まだユーザーはログインすることはできない。利用できるようになるには、招待メールを送信しなければならない。

実はここに罠がある。SSOで構成していると、プロビジョニングされたユーザーに自動的に"Confirm your email for Workspace"という件名のメールが送信される。しかし、そのメールだけではサインインすることができない。サインインするためには、管理者によって、招待メールの送信が実施される必要がある。

社内ダッシュボードにアクセスすると、まだ招待されていないユーザーに招待メールを一斉に送信するボタンがあるので、それを押せば良い。

補足

プロビジョニングをする際には、対象となるユーザーの絞込みが必要になることが多いと思う。その場合は、プロビジョニングのマッピングの設定を使って、対象となるオブジェクトのフィルタができるようだ(未検証)。

また、Azure ADにある情報から、WFに同期する情報の属性マッピングもできるので、ADに有用な情報が含まれている場合は、ここの設定を活用すると便利だろう。


2017-08-01 (Tue) [長年日記]

[AWS] Amazon S3のAPIとAWS CLI、IAM Policyの対応表

S3のAPIは、素のAPIと、AWS CLIのs3apiで使う時の名前と、IAM Policyで制御する時の名前がバラバラだったりするので、大変分かりづらい。ということで、表を作った。これでもまだ不完全または不正確な気がするので、気がついたらコメントいただけると嬉しい。

targetS3 APIAWS CLIIAM Policy
serviceGET Servicelist-bucketss3:ListAllMyBuckets
bucketDELETE Bucketdelete-buckets3:DeleteBucket
bucketDELETE Bucket analyticsdelete-bucket-analytics-configurations3:PutAnalyticsConfiguration
bucketDELETE Bucket corsdelete-bucket-cors
bucketDELETE Bucket inventorydelete-bucket-inventory-configurations3:PutInventoryConfiguration
bucketDELETE Bucket lifecycledelete-bucket-lifecycle
bucketDELETE Bucket metricsdelete-bucket-metrics-configurations3:PutMetricsConfiguration
bucketDELETE Bucket policydelete-bucket-policys3:DeleteBucketPolicy
bucketDELETE Bucket replicationdelete-bucket-replications3:DeleteReplicationConfiguration
bucketDELETE Bucket taggingdelete-bucket-taggings3:PutBucketTagging
bucketDELETE Bucket websitedelete-bucket-websites3:DeleteBucketWebsite
bucketGET Bucket (List Objects)list-objectss3:ListBucket
bucketGET Bucket (List Objects V2)list-objects-v2s3:ListBucket
bucketGET Bucket accelerateget-bucket-accelerate-configurations3:GetAccelerateConfiguration
bucketGET Bucket aclget-bucket-acls3:GetBucketAcl
bucketGET Bucket analyticsget-bucket-analytics-configurations3:GetAnalyticsConfiguration
bucketGET Bucket corsget-bucket-corss3:GetBucketCORS
bucketGET Bucket inventoryget-bucket-inventory-configurations3:GetInventoryConfiguration
bucketGET Bucket lifecycle (deprecated)get-bucket-lifecycle (deprecated)
bucketGET Bucket lifecycleget-bucket-lifecycle-configurations3:GetLifecycleConfiguration
bucketGET Bucket locationget-bucket-locations3:GetBucketLocation
bucketGET Bucket loggingget-bucket-loggings3:GetBucketLogging
bucketGET Bucket metricsget-bucket-metrics-configurations3:GetMetricsConfiguration
bucketget-bucket-notification (deprecated)
bucketGET Bucket notificationget-bucket-notification-configurations3:GetBucketNotification
bucketGET Bucket Object versions
bucketGET Bucket policyget-bucket-policys3:GetBucketPolicy
bucketGET Bucket replicationget-bucket-replications3:GetReplicationConfiguration
bucketGET Bucket requestPaymentget-bucket-request-payments3:GetBucketRequestPayment
bucketGET Bucket taggingget-bucket-taggings3:GetBucketTagging
bucketGET Bucket versioningget-bucket-versionings3:GetBucketVersioning
bucketGET Bucket websiteget-bucket-websites3:GetBucketWebsite
bucketHEAD Buckethead-buckets3:ListBucket
bucketList Bucket Analytics Configurationslist-bucket-analytics-configurations3:GetAnalyticsConfiguration
bucketList Bucket Inventory Configurationslist-bucket-inventory-configurationss3:GetInventoryConfiguration
bucketList Bucket Metrics Configurationslist-bucket-metrics-configurationss3:GetMetricsConfiguration
bucketList Multipart Uploadslist-multipart-uploadss3:ListBucktMultipartUploads
bucketPUT Bucketcreate-buckets3:CreateBucket
bucketPUT Bucket accelrateput-bucket-accelerate-configurations3:PutAccelerateConfiguration
bucketPUT Bucket aclput-bucket-acls3:PutBucketAcl
bucketPUT Bucket analyticsput-bucket-analytics-configurations3:PutAnalyticsConfiguration
bucketPUT Bucket corsput-bucket-corss3:PutBucketCORS
bucketPUT Bucket inventoryput-bucket-inventory-configurations3:PutInventoryConfiguration
bucketPUT Bucket lifecycle (deprecated)put-bucket-lifecycle (deprecated)
bucketPUT Bucket lifecycleput-bucket-lifecycle-configurations3:PutLifecycleConfiguration
bucketPUT Bucket loggingput-bucket-loggings3:PutBucketLogging
bucketPUT Bucket metricsput-bucket-metrics-configurations3:PutMetricsConfiguration
bucketput-bucket-notification
bucketPUT Bucket notificationput-bucket-notification-configurations3:PutBucketNotification
bucketPUT Bucket policyput-bucket-policys3:PutBucketPolicy
bucketPUT Bucket replicationput-bucket-replications3:PutReplecationConfiguration
bucketPUT Bucket requestPaymentput-bucket-request-payments3:PutBucketRequestPayment
bucketPUT Bucket taggingput-bucket-taggings3:PutBucketTagging
bucketPUT Bucket versioningput-bucket-versionings3:PutBucketVersioning
bucketPUT Bucket websiteput-bucket-websites3:PutBucketWebsite
objectDelete Multiple Objectsdelete-objects(s3:DeleteObject)
objectDELETE Objectdelete-objects3:DeleteObject
object(DELETE Object)(delete-object, delete-objects)s3:DeleteObjectVersion
objectDELETE Object taggingdelete-object-tagging(s3:DeleteObject)
objectGET Objectget-objects3:GetObject
object(GET Object)(get-object)s3:GetObjectVersion
objectGET Object ACLget-object-acls3:GetObjectAcl
objectGET Object ACL (Versioning)(get-object-acl)s3:GetObjectVersionAcl
objectGET Object taggingget-object-taggings3:GetObjectTagging
object(GET Object tagging)(get-object-tagging)s3:GetObjectVersionTagging
objectGET Object torrentget-object-torrents3:GetObjectTorrent
object(GET Object torrent)(get-object-torrent)s3:GetObjectVersionTorrent
objectHEAD Objecthead-objects3:GetObject
objectHEAD Object (Versioning)head-objects3:GetObject
objectOPTIONS object
objectPOST Object restorerestore-objects3:RestoreObject
objectPUT Objectput-objects3:PutObject
object(PUT Object)put-object-taggings3:PutObjectTagging
object(PUT Object)(put-object-tagging)s3:PutObjectVersionTagging
objectPUT Object (Versioning)put-objects3:PutObject
objectPUT Object - Copycopy-objects3:PutObject
objectPUT Object - Copy (Versioning)copy-objects3:PutObject
objectPUT Object aclput-object-acls3:PutObjectAcl
object(PUT Object acl)(put-object-acl)s3:PutObjectVersionAcl
objectAbort Multipart Uploadabort-multipart-uploads3:AbortMultipartUpload
objectComplete Mulitpart Uploadcomplete-mulitpart-uploads3:PutObject
objectInitiate Mulitpart Uploadcreate-multipart-uploads3:PutObject
objectList Partss3:ListMultipartUploadParts
objectUpload Partupload-parts3:PutObject
objectUpload Part - Copyupload-part-copys3:PutObject
buckets3:ReplicateDelete
buckets3:ReplicateObject