読者です 読者をやめる 読者になる 読者になる

IT業界のすみっこ暮らし

ふと気がついたときの記録

EntityFramework:Interceptor

Entity Framework 開発

参考サイト

www.entityframeworktutorial.net

EntityFrameworkのInterceptor作成例

EFCommandInterceptor.cs

class EFCommandInterceptor: IDbCommandInterceptor // ★
{
    public void NonQueryExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        LogInfo("NonQueryExecuted", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync, command.CommandText));
    }

    public void NonQueryExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
    {
        LogInfo("NonQueryExecuting", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync,  command.CommandText));
    }

    public void ReaderExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContextt<System.Data.Common.DbDataReader> interceptionContext)
    {
        LogInfo("ReaderExecuted", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync, command.CommandText));
    }

    public void ReaderExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<System.Data.Common.DbDataReader> interceptionContext)
    {
        LogInfo("ReaderExecuting", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync, command.CommandText));
    }

    public void ScalarExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        LogInfo("ScalarExecuted", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync, command.CommandText));
    }

    public void ScalarExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
    {
        LogInfo("ScalarExecuting", String.Format(" IsAsync: {0}, Command Text: {1}", interceptionContext.IsAsync, command.CommandText));
    }

    private void LogInfo(string command, string commandText)
    {
        Console.WriteLine("Intercepted on: {0} :- {1} ", command, commandText);
    }
}

Global.asax.cs

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            // filter, routeなどの設定諸々

            DbInterception.Add(new EFCommandInterceptor()); // ★
        }
    }

以上

Voice Dream ReaderのNeoSpeechライセンス期限切れ問題

雑談

Voice Dream Readerとは?

公式ページの説明では

耳で読む!Voice Dream Readerは記事、ドキュメント、本の読み上げで幅広い評価を得ているデスクトップクラスのアプリです。

と書いてあります。

Voice Dream Reader

Voice Dream Reader

  • Voice Dream LLC
  • 教育
  • ¥1,800

NeoSpeechとは?

下のブログに詳しく書いてありますが、要は読み上げアプリで使う「ボイスエンジン」です。 Voice Dream Readerには複数のボイスが存在しており、その中でお気に入りの声を使って文章を読み上げることができます。

reliphone.jp

※因みに日本語はHOYAのMISAKIが超お勧めです。 voicetext.jp

何が問題なの?

2017/03/13(月)にNeoSpeechのライセンス期限切れでNeoSpeechのボイスエンジンが使えない…わけではないけど、文章を読み上げる前に必ず

  • こんにちはボイスウェアの日本語合成エンジンボイステキストです。
  • ボイスウェアです。
  • 未登録のバージョンです。
  • ライセンスが必要です。
  • ボイスウェアよりライセンスの発給を受けてください。
  • 登録をお願いします。

上記の文章をランダムに読み上げてから、目的の文章を読み上げるようになってしまいました。

これではそれなりの金額を払ってアプリとボイスを購入したのに(NeoSpeechのボイスはアプリ内課金で有料)使い物にならない。


で、さっそく問い合わせしてみました。そして、下の返信を頂きました。

Thanks so much for reaching out.

We’re aware of this issue and a fix will be released very shortly. NeoSpeech gave us a bad license file a year ago.

We’re so sorry for the inconvenience. Rest assured that it’ll be fixed as soon as we possibly can, and it won’t happen again!

In the mean time, you could set the date of your device before 3/12/2017. But we don’t advise that, since it can cause other issues.

Thanks!

Voice Dream Team.

私たちも問題を認識してるんで、なるはやでリリースする予定だよ。NeoSpeechが1年前に悪いライセンスをくれたんだ。

とてもすまんが、こんなことは二度と起きないはずだから安心して!

対応までは端末の日付を2017/03/12にいじれば使えるけど、これは別の問題が起きる可能性が高いから推奨はできない。

じゃあな!

まとめ

新しいバージョンがリリースするまではしばらく待とう。

追記(2017/03/14(火))

Voice Dream Reader

Voice Dream Reader

  • Voice Dream LLC
  • 教育
  • ¥1,800
バージョン 4.1.1で上記の問題が解決されたことを確認。

対応は早かったけど、知ってるなら気付かれる前に対応して欲しいなと思う一件でした。

自作プラグインをPlugin Directoryに登録する

開発 WordPress

1、 アカウント登録&プラグイン登録申請

こちらからwordpress.orgのアカウントを作成します。
そしてこちらこちらからプラグインの登録申請を行います。

下の画像は既に申請後の画像で、「Pending requests」項目から該当プラグインが審査待ちであることが分かります。 f:id:papamau:20170301150730p:plain

プラグインの登録申請のとき、プラグイン圧縮してをWeb上にアップロードしておく必要があります。
今回はソースコードを管理しているgithubにzipファイルをアップしてそのurlを使いました。 f:id:papamau:20170301150744p:plain

2、登録結果が届く

申請から2日ほど経過して審査通過のメールが届きました。審査待ちのプラグインが多いほど時間が掛かるらしい f:id:papamau:20170303131957p:plain

メールの内容は簡単にまとめると
1、あなたのプラグインが審査を通過したよ!おめでと!
2、あなた専用のsvnサーバー用意したから更新してね!

です。

3、SVNプラグインのソース更新

今回は既存から使っているTortoiseSVNを使って更新しました。 SVNリポジトリブラウザーで見るとこんな感じです。 f:id:papamau:20170303133905p:plain

前後に他のプラグインリポジトリーもずらーっと並んでいて中身を覗くことが出来ました。

4、プラグイン登録完了

readme.txtの記述方法に少し手間取りましたが、なんとか無事に登録を完了しました。 f:id:papamau:20170303134258p:plain 画像がないのでなんだか寂しいので近いうちに画像も作成して更新してみたいと思います。

最後に

上記の流れで登録したプラグインが以下になります。

IP LIMIT

wordpress.org

内部のアクセスIP一覧を登録しておくことで、投稿記事単位で内部にだけ見せるか、外部にも見せるかを設定し、表示制限を行うプラグインです。

以上

WP TEST PJ

開発 C# .NET WordPress

pie001.hatenablog.com

上記で例としてあげてたWP TEST PJのソースコード

github.com

WordPressのデータをASP.NET MVCで作成したサイトでデータ閲覧とか会員追加とかできないかな?と思って試しに作ったものになります。

広告を非表示にする

EntityFrameworkとMySQL

開発 Entity Framework MySQL

下記の記事の実例と問題点の対策

pie001.hatenablog.com


下記前提条件が満たされている場合の新規プロジェクト作成~モデル追加まで

You completely Install mysql-installer-community-5.7.3.0-m13.msi or Install both ofmysql-visualstudio-plugin-1.1.1.msi and mysql-connector-net-6.8.3.msi.

1、Install-Package EntityFramework

f:id:papamau:20170224183252p:plain

2、Install-Package MySql.Data

f:id:papamau:20170224183322p:plain

3、Install-Package MySql.Data.Entity

f:id:papamau:20170224183344p:plain

4、Install-Package MySql.Web

f:id:papamau:20170224183402p:plain

5、Edit Web.config

f:id:papamau:20170224183443p:plain

  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
    </providers>
  </entityFramework>

6、Clean & Build

7、Make ADO.NET Entity Data Model

f:id:papamau:20170224183539p:plain

f:id:papamau:20170224183545p:plain

f:id:papamau:20170224183553p:plain

f:id:papamau:20170224183558p:plain

f:id:papamau:20170224183609p:plain

f:id:papamau:20170224183707p:plain

f:id:papamau:20170224183733p:plain

その他

日付変換でエラーが発生する問題

MySQLからSystem.DateTimeの値を取得するときに下記のエラーが発生する場合がある。

Unable to convert MySQL date/time value to System.DateTime

解決方法

下記内容をconnectionStringsに追加する

  <connectionStrings>
    <add name="WPlocalEntities" connectionString="metadata=res://*/WPlocalModel.csdl|res://*/WPlocalModel.ssdl|res://*/WPlocalModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=root;Charset=utf8;Convert Zero Datetime=True;persistsecurityinfo=True;database=wp-01&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

選択するデータソースの一覧にMySQL Databaseがない問題

Visual Studio 2015のMySQL Database追加手順

f:id:papamau:20170224184250p:plain

References に以下の3点を追加(既存にある場合はアンインストール後、再インストール

https://www.nuget.org/packages/MySql.Data/ https://www.nuget.org/packages/MySql.Data.Entity/ https://www.nuget.org/packages/MySql.Web/

App.configのの内容を修正する。既存の内容はコメントにして、下記urlにある内容を適用する。

下記URLを参考にApp.configの内容を修正する。 http://stackoverflow.com/questions/22031269/enable-entity-framework-6-for-mysql-c-in-winforms-of-microsoft-visual-studio

f:id:papamau:20170224184111p:plain

f:id:papamau:20170224184132p:plain

選択可能なData SourceにMYSQL Databaseが表示される。

f:id:papamau:20170224184204p:plain

[Choose Your Data Connection]から[Choose Your Database Objects and Settings]に移行しようとしたら画面が急に閉ざされる現象が起きる場合の対策

MySQL InstallerのConnector/ODBCが邪魔してる可能性があるので、ODBCをアンインストールして再インストールすると直る場合がある。

日本語の文字化け

Character-setをutf-8に変更

接続文字列に「Charset=utf8;」がない場合、日本語の値が文字化けするため追加。

<add name="WPlocalEntities" connectionString="metadata=res://*/WPlocalModel.csdl|res://*/WPlocalModel.ssdl|res://*/WPlocalModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=root;Charset=utf8;persistsecurityinfo=True;database=wp-01&quot;" providerName="System.Data.EntityClient" />

以上

広告を非表示にする