2017年12月18日月曜日

SONY Vegas テキストアニメーション一覧

表題の件は「メディアジェネレーター」→「タイトルおよびテキスト」で見られます。


ですが、普段私はテキストを挿入する時は「トラックの挿入したい位置を右クリック」→「テキストメディアの挿入」からテキストメディアを挿入し、ビデオメディアジェネレーター画面でテキストの内容等を編集するので、テキストにアニメーションをつけたい時その名前だけではどんなモーションだったかわからなくなってしまいます。
(上の方法も忘れてしまいます)

何となく一覧できるgifを作ってみました。




2017年12月15日金曜日

楽天モバイル このユーザーはアクセスポイント名を利用できません

家族が使ってる楽天モバイルがネットにつながらなくなりました。
APNの設定の所に「このユーザーはアクセスポイント名を利用できません」と表示され、追加も何もできない状況に。
ググったらSIMのトラブルっぽく、抜き差ししたり向きを確認しましたが解決せず。
修理に出すしかないと思ってサポートセンターに連絡しました。
長ーいガイダンス音声の中に「電源を切ってSIMを抜き差ししてみましたか」というような案内が…。
一応試してみると、つながりました!

ガイダンスに入ってるならQ&Aにも記載しておいて欲しかった。


2017年12月4日月曜日

YouTube Data API を使って YouTube 再生リストを高評価順でソートできる表を作る【C#】

試作品

作ったものはこちら
引数つきでもアクセスできます。
http://tools.ehost.jp/youtube/Playlist/index/PLUL2Tx9e4jQxRfYXbOQB0UYYFXg_z-Yc6


概要

Youtube はチャンネル内の動画は「並べ替え」→「人気の動画」でソートすることができますが、再生リスト単位ではできません。
再生リストのキーを元に Youtube API から再生リストの動画情報を取得し、jQuery プラグインの DataTables でソートできるようにします。
https://www.youtube.com/playlist?list=PLUL2Tx9e4jQxRfYXbOQB0UYYFXg_z-Yc6
の list?= 以下「PLUL2Tx9e4jQxRfYXbOQB0UYYFXg_z-Yc6」が再生リストのキーです。


準備

まずはオフィシャルのドキュメントをご覧頂くのが良いかと思います。


Youtube API を利用するにはまず API キーを取得する必要があります。
API キーはリファラーなどでアクセス制限をつけることができます。

今回は C# と .NET用のGoogle APIのクライアントライブラリを使用します。
nuget パッケージで Google.Apis.YouTube.v3 をプロジェクトにインストールします。


Youtube API

https://www.googleapis.com/youtube/v3/videos?id=28LHGS9hn_g&part=snippet,contentDetails,statistics,status&key=取得したAPIキー
API キーを取得すれば上記のようなURLにアクセスすることで以下のような情報を取ってくる事ができるようになります。

{
 "kind": "youtube#videoListResponse",
 "etag": "\"7991kDR-QPaa9r0pePmDjBEa2h8/IUqB8ABuJ4Ti-yT_NEhPLuW8lKY\"",
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "kind": "youtube#video",
   "etag": "\"7991kDR-QPaa9r0pePmDjBEa2h8/-iOhnLdrI3sM37vS6XdtYJPit1s\"",
   "id": "28LHGS9hn_g",
   "snippet": {
    "publishedAt": "2014-12-24T06:16:45.000Z",
    "channelId": "UCwQNrx9GQZamvdxVuVgaMtQ",
    "title": "猫 赤ちゃんと初対面Cat First Meeting with Baby",
    "description": "出産のため入院していた嫁と赤ちゃんが帰ってきました。\n嫁との1週間ぶりの対面、赤ちゃんとの初対面。\nさて、シイの反応やいかに・・・?\n\n【日記:http://www.neko-jirushi.com/user_home/diary/diary_detail-84394-46706.html】\n【ブログ:http://catlife0601.blog.fc2.com/】",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/28LHGS9hn_g/default.jpg",
      "width": 120,
      "height": 90
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/28LHGS9hn_g/mqdefault.jpg",
      "width": 320,
      "height": 180
     },
     "high": {
      "url": "https://i.ytimg.com/vi/28LHGS9hn_g/hqdefault.jpg",
      "width": 480,
      "height": 360
     },
     "standard": {
      "url": "https://i.ytimg.com/vi/28LHGS9hn_g/sddefault.jpg",
      "width": 640,
      "height": 480
     }
    },
    "channelTitle": "catlife",
    "tags": [
     "猫",
     "Cat",
     "シイ",
     "ペット",
     "動物"
    ],
    "categoryId": "15",
    "liveBroadcastContent": "none",
    "localized": {
     "title": "猫 赤ちゃんと初対面Cat First Meeting with Baby",
     "description": "出産のため入院していた嫁と赤ちゃんが帰ってきました。\n嫁との1週間ぶりの対面、赤ちゃんとの初対面。\nさて、シイの反応やいかに・・・?\n\n【日記:http://www.neko-jirushi.com/user_home/diary/diary_detail-84394-46706.html】\n【ブログ:http://catlife0601.blog.fc2.com/】"
    }
   },
   "contentDetails": {
    "duration": "PT1M45S",
    "dimension": "2d",
    "definition": "hd",
    "caption": "false",
    "licensedContent": true,
    "projection": "rectangular"
   },
   "status": {
    "uploadStatus": "processed",
    "privacyStatus": "public",
    "license": "youtube",
    "embeddable": true,
    "publicStatsViewable": true
   },
   "statistics": {
    "viewCount": "1482776",
    "likeCount": "2274",
    "dislikeCount": "81",
    "favoriteCount": "0",
    "commentCount": "59"
   }
  }
 ]
}

取得できるデータはリソースと呼ばれ以下の種類があります。

リソースの種類

activity 特定のユーザーが YouTube サイトで行った操作に関する情報が格納されています。アクティビティ フィードで報告されるユーザー操作は、動画の評価、動画の共有、お気に入りへの動画の追加、チャンネルのお知らせメッセージの投稿などです。
channel 単一の YouTube チャンネルに関する情報が格納されています。
channelBanner 新しくアップロードされた画像をチャンネル用のバナー画像として設定するために使う URL を示します。
guideCategory コンテンツや人気などの指標に基づいて YouTube がチャンネルに関連付けるカテゴリを示します。guideCategory により、YouTube ユーザーが目的のコンテンツを容易に見つけられるようにチャンネルを整理できます。チャンネルは 1 つ以上のガイド カテゴリに関連付けられる場合がありますが、何らかのガイド カテゴリに属することが保証されているわけではありません。
playlist 単一の YouTube 再生リストを表します。再生リストとは、順序を付けて表示し、他のユーザーと共有できる動画のコレクションを指します。
playlistItem 再生リストを構成する動画などのリソースを示します。また、playlistItem リソースには、対象となるリソースが再生リストでどのように使用されるのかを説明する詳細な情報も格納されています。
search result API リクエストで指定した検索パラメータに一致する YouTube 動画、チャンネル、または再生リストに関する情報が格納されています。検索結果は、動画など一意に識別可能なリソースを出力しますが、検索結果自体は永続的なデータを持ちません。
subscription YouTube ユーザーの登録チャンネルに関する情報が格納されています。subscription は、新しい動画がチャンネルに追加された場合や、別のユーザーが YouTube で動画のアップロード、動画の評価、動画へのコメントといった何らかの操作を行った場合に、ユーザーに通知します。
thumbnail リソースに関連付けられたサムネイル画像を示します。
video 単一の YouTube 動画を表します。
videoCategory アップロードした動画に関連付けられているか、関連付けることができるカテゴリを示します。


API に指定できるパラメータはリソースによって異なりますが、主な2つを紹介します。

part パラメータ

必須項目です。カンマ区切りで複数指定することができ、上記 videos リソースの例で言うと、part=snippet,contentDetails,statistics,status の部分です。
取得するデータの items 要素の中身でどの部分を取得するかを指定します。


fields パラメータ

カンマ区切りで複数指定することができ、fields=pageInfo,items(snippet/title,snippet/thumbnails/default) のように記述します。
part パラメータでは子要素を全て含みますが、その内容をさらに詳細にフィルタリングすることができます。
(正直 part と fields は冗長な気もいたしますが…)


.NET用のGoogle APIのクライアントライブラリを使用したデータ取得

.NET用のGoogle APIのクライアントライブラリのガイドやリファレンスはこちら


やりたい事は YouTube 再生リスト内の動画を評価順にソートすることなのですが、まず playlist リソースから再生リストの情報を取ってきます。
続いて playlistItem リソースから再生リスト内の動画情報を取得しますが、この動画情報の中には評価は含まれていません。
面倒ではありますが、いったん動画の Id を取得するにとどめて、その動画 Id で videos リソースから評価情報を取得いたします。
それぞれリソースから取得できる件数は最大50件までなので、50件を越える場合には複数回リソースにアクセスして取得することになります。
コードの一例は以下の通りです。

//YouTubeServiceクラスを生成
var youtube = new YouTubeService(new BaseClientService.Initializer()
{
    ApiKey = "APIキー"
});

//Playlist検索
var requestPlaylist = youtube.Playlists.List("snippet");
requestPlaylist.Id = key;
requestPlaylist.Fields = "pageInfo,items(snippet/title,snippet/thumbnails/default)";
var responsePlaylist = requestPlaylist.Execute();
var vm = responsePlaylist.Items.Select(x => new PlaylistViewModel()
{
    Id = key,
    Title = x.Snippet.Title,
    Url = "https://www.youtube.com/playlist?list=" + key,
    ThumbnailUrl = x.Snippet.Thumbnails.Default__.Url,
    Videos = new List<videoviewmodel>()
}).FirstOrDefault();

//Playlist内の動画id一覧取得
List<string> videoIds = new List<string>();
var requestPlaylistItems = youtube.PlaylistItems.List("id,contentDetails");
var responsePlaylistItems = new PlaylistItemListResponse();
requestPlaylistItems.PlaylistId = key;
requestPlaylistItems.MaxResults = 50;
requestPlaylistItems.Fields = "nextPageToken,pageInfo,items(contentDetails/videoId)";
do
{
    requestPlaylistItems.PageToken = responsePlaylistItems.NextPageToken;
    responsePlaylistItems = requestPlaylistItems.Execute();
    videoIds.AddRange(responsePlaylistItems.Items.Select(x => x.ContentDetails.VideoId));
} while (responsePlaylistItems.NextPageToken != null && responsePlaylistItems.NextPageToken != "");

//動画情報の取得
var requestVideos = youtube.Videos.List("snippet,statistics");
var responseVideos = new VideoListResponse();
var size = 50;
var currentPage = 1;
var totalCount = videoIds.Count;
requestVideos.MaxResults = size;
requestVideos.Fields = "items(id,snippet/publishedAt,snippet/title,snippet/thumbnails/default,statistics/likeCount,statistics/viewCount)";
do
{
    requestVideos.Id = string.Join(",", videoIds.Skip(size*(currentPage-1)).Take(size));
    responseVideos = requestVideos.Execute();
    vm.Videos.AddRange(
        responseVideos.Items.Select(x => new VideoViewModel
        {
            Id = x.Id,
            Title = x.Snippet.Title,
            LikeCount = (int)x.Statistics.LikeCount,
            ViewCount = (int)x.Statistics.ViewCount,
            PublishedAt = (DateTime)x.Snippet.PublishedAt,
            ThumbnailUrl = x.Snippet.Thumbnails.Default__.Url,
            Url = "https://www.youtube.com/watch?v=" + x.Id
        })
        );
    currentPage++;
} while (totalCount > size * (currentPage - 1));

上記では playlistItems からいったん動画 Id のリストを全て取得しましたが、1ページ分(50件)取得する毎に videos リソースからデータを取ってきた方が楽そうですね。

(参考)




2017年11月17日金曜日

メイリオで縦書き印刷が上手くいかない

娘のカタカナの勉強にとパワーポイントでカルタを手作りしようとしたところ、
めったに使わない「縦書き」で長音(ー)やカギ括弧(「」)が上手く印字されませんでした。
どうしたものかと調べたところ、去年から指摘されていた事だったようです。

フォーラムでの指摘に対し、MSの回答は「フィードバック出してくれ」で、その後音沙汰なし・・・。



うーむ。

八村選手【バスケ】

八村選手の活躍がネットで記事になってたので動画を見に行ったら。



Video is not available in your country.

なんでだよ!ESPN!

こっちにゴンザガのハイライトが。


スタッツ的にもプレーの質的にもまだまだこれからって感じだと思いますが、期待しちゃいますね。

2017年8月28日月曜日

Web Deploy に失敗する

Web Deploy で IIS に発行しようとしたところ、「接続の検証」には成功しているのに以下のエラーが発生して失敗してしまいました。

重大度レベル コード カテゴリ 説明 プロジェクト ファイル 行 抑制状態
エラー Web Deploy タスクに失敗しました。((2017/08/28 17:33:28) リモート コンピューターでの要求の処理中にエラーが発生しました。)

(2017/08/28 17:33:28) リモート コンピューターでの要求の処理中にエラーが発生しました。
操作を実行できません。サーバー管理者に問い合わせて承認と委任の設定を確認してください。

サーバ側のエラーを確認したところ以下のようなメッセージが

トレース展開エージェントで例外が発生し、クライアントに伝達されました。
エラーの詳細:
Microsoft.Web.Delegation.DeploymentAuthorizationException: ユーザー '.\WDeployConfigWriter' にログオンできません。 ---> System.Runtime.InteropServices.COMException (0x80070532): ログオン失敗: 指定されたアカウント パスワードの有効期間が切れています。 (HRESULT からの例外: 0x80070532)


Web Deploy の設定をすると、ユーザアカウントに「WDeployAdmin」と「WDeployConfigWriter」というアカウントが作られるのですが、パスワードの設定がデフォルトで「ユーザーは次回ログオン時にパスワードの変更が必要」になっています。
これらのパスワードが期限切れになってしまい、上記のエラーとなったようです。
解決方法は以下の通り。

1.「WDeployAdmin」と「WDeployConfigWriter」のパスワードを再登録し、設定を「パスワードを無期限にする」に変更する。

2.IISマネージャからサーバの「管理サービスの委任」を開き、上記2アカウントが割り当てられているサービスの編集画面を開く。資格情報の指定の「設定」ボタンでパスワードの設定画面を開き1で設定したパスワードを入力する。

3.改めて「Web配置による発行の有効化」を行いデプロイの設定を行う。

(参考)



以上メモまで。

windows10でisoファイルのマウントが表示されない

エクスプローラー上でisoファイルを選択しても、リボン上に「ディスクイメージツール」タブが表示されなくなってしまいました。
これはisoファイルの関連付けがエクスプローラーでなくなってしまった事が原因です。
isoファイルを右クリック→プロパティ→プログラムの「変更」をクリック→関連付けをエクスプローラーにするとディスクイメージツールタブが復活します。

以上メモまで。

2017年8月27日日曜日

セッション状態要求をセッション状態サーバーに対して作成できませんでした。

セッション状態要求をセッション状態サーバーに対して作成できませんでした。ASP.NET 状態サービスが開始されていて、クライアントとサーバーのポートが同じであることを確認してください。サーバーがリモート コンピューター上にある場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection の値を調べて、このコンピューターがリモート要求を受け付けることを確認してください。サーバーがローカル コンピューター上にあり、上記のレジストリ値が存在していないか 0 に設定されている場合、状態サーバー接続文字列ではサーバー名に 'localhost' または '127.0.0.1' を指定しなければなりません。

ここの情報を元にWeb.configの内容を


  
    
    
  


としていたのが原因でエラーの指示の通り「SampleStateServer」を「localhost」にすれば良いだけですが、
デプロイ先のテスト環境、リリース環境、および別の開発者の環境ではエラーが生じず、私の開発環境のみでエラーになり「?」となってしまいました。
もちろん私の開発環境のState Serviceは実行されており、再起動しても同様でした。

解決はしておりませんが、以上メモまで。

2017年8月15日火曜日

SQL SERVER でデータベースのコピー

1.SQL Server インポートおよびエクスポートウィザード


SSMS(SQL Server Management System)から利用する場合、
データベースを右クリックし、[タスク] → [データのインポート] または [データのエクスポート] をクリック

MSDN:SQL Server インポートおよびエクスポート ウィザードを実行する


2.bcpユーティリティを使う


MSDN:bcp ユーティリティ

TechNet:bcp ユーティリティ


3.デタッチ→アタッチ


SSMSでデータベース名を右クリック→タスク→デタッチ
該当のデータベースのldfファイルとmdfファイルをコピーし移行先に配置。
移行先のSSMSでデータベースを右クリック→アタッチから配置したmdfファイルを選択

MicrosoftDocs:デタッチとアタッチを使用してデータベースを移動する方法

ちなみにオフラインにしてバックアップするやり方は問題が生じる可能性があるとのことです。
SQL Server でオフライン バックアップおよびオフライン リストアを行うと問題が出ることがある


4.バックアップ→リストア


SSMSでデータベース名を右クリック→タスク→バックアップからバックアップファイルを作成し、移行先に配置。
移行先のSSMSでデータベースを右クリック→「データベースの復元」または「ファイルおよびファイルグループの復元」を選択
配置したファイルを選択し復元する。
なお「オペレーティング システム エラー 5(アクセスが拒否されました。) 」が出てしまう場合
コンピュータの管理→サービス→当該のSQL SERVERを右クリック→プロパティ→ログオンタブでローカルシステムアカウントを選択

下記を参照するとVSS WRITERがローカルシステムアカウントを要求するのが原因っぽいですが、ローカルシステムアカウントのような強い権限を使用するのは推奨されなさそうです。
MSDN:Windows サービス アカウントと権限の構成


5.スクリプト作成→実行


SSMSでデータベース名を右クリック→タスク→スクリプトの生成→ウィザードを進めた先の詳細設定をクリック→
スクリプト作成の詳細オプションのスクリプトを作成するデータの種類を「スキーマのみ」から適宜「スキーマとデータ」に変更→
ファイル、クリップボードなど用途に応じた形式で保存し、コピー先のデータベース上でスクリプトを実行

スクリプトなので改変が容易などのメリットがありますが、データが大きいとスクリプトが実行できない場合があります。



他にも方法があるかもしれません。
用途や環境に応じて検討する必要がありそうです。
以上メモまで。

2017年7月27日木曜日

IIS, Classic ASP でサイトが重い

メール送信時にサイトが重いなぁと思っていたら、どうやらデバッグの設定に問題があったようです。

ASP のサーバー側のデバッグを有効にすると、ASP はシングルスレッド モードで実行されます。パフォーマンス上の理由から、製品環境での ASP のサーバー側またはクライアント側のデバッグはお勧めできません。

Microsoft TechNet オンライン:IIS 6.0 F1: [アプリケーションの構成] - [デバッグ] タブ
https://technet.microsoft.com/ja-jp/library/cc732003

また、初歩的なところでつまづいてしまった。
以上メモまで。

2017年3月15日水曜日

確定申告 Payeasy でエラーなど

まず入力を要求される以下の4つがわからない。

「収納機関番号」
「納付番号」
「確認番号」
「納付区分」

検索をすると以下のページがヒットする。
http://www.e-tax.nta.go.jp/toiawase/qa/yokuaru09/25.htm

「収納機関番号」欄に「00200」、「納付番号」欄に利用者識別番号(16桁)、「確認番号」欄に納税用確認番号(6桁)、「納付区分」欄に納付区分番号(10桁)を入力してください。なお、納付区分番号の有効期間は受信通知の格納日から2ヶ月間です。

「収納機関番号」と「納付番号」はわかったが『納税用確認番号』と『納付区分番号』が依然としてわからない。
同ページに以下のように続く

納税用確認番号がわからなくなった場合は、納税用確認番号を更新した後で、電子納税を行ってください。
納税用確認番号の更新については、e-Taxホームページから受付システムにログインし、「納税用確認番号等登録・更新」から納税用確認番号(半角数字6桁)を入力して「実行」をクリックします。
※納税用確認番号がロックした場合も、納税用確認番号の更新後に電子納税を行ってください。

ここの「受付システム」にリンクでもあれば親切なのだが、そうなっていない。
「受付システム」はこちらのことである。
https://uketsuke.e-tax.nta.go.jp/UF_APP/lnk/loginCtlKakutei

e-Taxのトップページ中央にある「メッセージボックスの確認」からもいける。
http://www.e-tax.nta.go.jp/



そして最期の『納付区分番号』であるが、検索して不運にも以下のページに行き当たった方はハマってしまったのではないだろうか。
http://www.e-tax.nta.go.jp/toiawase/qa/yokuaru06/05.htm

「受付システム」から確認するように説明してあるが、そんなものは見当たらない。

以下のページにたどり着きようやく解決した。
http://www.e-tax.nta.go.jp/tetsuzuki/tetsuzuki4_3.htm

要は平成28年の確定申告であれば「0204428」という事だ。



で、万事解決かと思いきや、Payeasyの入力画面(私の場合は三菱東京UFJ銀行)でエラーになった。
この原因は最初に紹介したQ&Aページの3つ目の内容であった。
http://www.e-tax.nta.go.jp/toiawase/qa/yokuaru09/25.htm
e-Taxの受付システムへログインするための暗証番号を変更してから3年以上経過している。
 e-Taxにログインの際に、「暗証番号変更」画面が表示された場合は、暗証番号を変更してください。
 同一の暗証番号を3年間使用して、暗証番号を変更していない状態では納税用確認番号は使用できませんので、暗証番号の変更後に電子納税を行ってください。



・・・1年後にはすっかり忘れて、またハマるんだろうな。
来年の自分がこのエントリを思い出す事を期待してメモ。

2017年2月24日金曜日

ASP.NET MVC の AntiForgeryToken がIE,Edgeでエラー

ASP.NETにはCSRF対策にTokenを発行して検証してくれる機能がありますが、IEとEdgeでだけエラーになり、FirefoxとChromeでは大丈夫、しかもデバッグ時にはIEやEdgeでもエラーにならないという不可思議な現象に悩まされました。

必要な偽造防止 Cookie "__RequestVerificationToken" が存在しません。

結構ハマってしまったのですが、原因はこれでした。

Cookie を使用するドメインでは、ドメイン名およびサーバー名に英数字 ("-" または ".") だけを使用しなければなりません。サーバー名にアンダースコア ("_") など、その他の文字が含まれている場合、Internet Explorer は Cookie をブロックします。

デプロイ先のテスト環境のドメインに「test_xxxx」とアンダースコアが含まれていたのが原因でした。
結構古くからの常識のようで、まだまだ勉強不足を痛感します。

以上メモまで。


2017年2月14日火曜日

Chromeのアドオンでキャプチャした画像がMS Officeに貼り付けられない

FireShotなどの画面キャプチャアドオンが便利ですが、それでキャプチャしたデータをMS OfficeのWORDやEXCEL、POWER POINTなどに単純に貼り付けようとすると上手くいきませんでした。

どうもBASE64エンコードされた画像データを直接Ctrl+Vで貼り付ける事ができないようです。(違ってたらすみません)

解決策1
「形式を選択して貼り付け(Ctrl + Alt + V)」で「ビットマップ」を選択して貼り付ける。

解決策2
ペイントにいったん貼り付けてからコピー&ペーストする。

解決策3
FireFoxのFireShotアドオンを利用する。

解決策1だとかなり手間です。
「ブラウザのキャプチャした画面を表示しアドオンをクリック」→
「キャプチャ後表示された画像を右クリック『画像をコピー』を選択」→
「Officeウィンドウ上で『形式を選択して貼り付け』を選択」→
「『ビットマップ』を選択してOKをクリック(Enter)」

解決策2もキャプチャ表示された画像を右クリックしてコピーという作業は必要ですし、
いったん別のウィンドウ(ペイント)を経由するのでひと手間かかります。

FireFoxを起動しないといけないという問題はありますが、直感的にパパっと作業できる3の方法が当面の解決策でしょうか。

もっと良い解決策もありそうですが、ひとまずメモ