Blog


UWPのNotificationsExtensionsがUWPCommunityToolkitに移植されてた

UWPを開発するときにほぼ必須といっても過言ではない通知を定義するxmlをクラス構造でラップしてくれてインテリセンスから簡単に通知を表示できるNotificationsExtensionのライブラリが気づいたらUWP Community Toolkitに移植されていました。

UWP Community TookitとはオープンソースではないWindowsのAPIに対し、コミュニティでも簡単に開発に参加できる公式ライブラリとして存在しているUWPのExtensionライブラリみたいなものですがこちらの記事にあるようにNotificationExtensionsは完全にCommunity Toolkitに移植されてたみたいですね

NotificationsExtensions has moved to the UWP Community Toolkit!

なので以降はNugetからMicrosoft.Toolkit.Uwp.Notificationをインストールしろということのようです。




pandasでよく使うけど忘れやすい処理のメモ

特定の列削除

行のイテレーション

列条件に一致する行の抽出

平均をとって平均からの差分を取得

特定の列の条件によって変化する新しい列の生成

 

 

 

 




dotnetcoreからCognitiveServiceを利用する

既存の.net framework向けCognitive ServicesのSDK(Nugetに上がってるProjectOxford的な奴)ってdotnetcoreで使えないみたいですね。

実行しようとするとこのようなエラーがでます。

System.IO.FileNotFoundException: Could not load file or assembly ‘System.Net, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes’. The system cannot find the file specified.

System.Net(2.0.5.0)のアセンブリが無いと言われてるようですがdotnetcoreには該当アセンブリがないのだろうか(おってなかったのでわからない)*1

ProjectOxfordのSDKはオープンソースではないはずなのでソースをいじれないことには対応ができないわけで、直接RESTでAPIを叩こうかとも思ったんですけどすでに公式でCognitiveServiceのDotnetCore向けのSDKがオープンソースで公開されていました。

https://github.com/search?utf8=%E2%9C%93&q=org%3AMicrosoft+cognitive+core&type=

親切なことにNugetにも公開済み。後ろにDotNetCoreが付いているものが該当SDKとなります

ということで.csprojを編集してNugetライブラリの指定を変えます。

あとはdotnet restoreでok

 

*1 社員の方曰く互換性はほとんどないようです。おとなしくコンパイルしなおしましょうということですね

 




Azure設計プラクティス4: MySQLレプリケーション

MySQLにはレプリケーションという同じ内容のデータベースを複数冗長に持つ設定をすることができる機能があります。

Microsoft Azureには現在(2017/5/9)MySQLのレプリケーション機能をサポートするサービスは存在しませんがLinux VirtualMachine内にMySQLを稼働させることで同じ機能を実現することができます。

今回はMySQLのレプリケーションをAzureで行っていきたいと思います。

今回の構成はこのようにします。

同一VirtualNet、同一ネットワーク・セキュリティグループ内にUbuntuOSのVMを2台、MasterとSlaveとして配置します。

レプリケーションについて

MySQLレプリケーションに関してはこちらの記事がとても詳しくまとまっているので参考にしていきます。

MySQL入門 レプリケーション編
http://qiita.com/Tocyuki/items/c224cef57493f536a941

通常、データベースを1台で運用すると1台のDBに負荷が集中してサービスのボトルネックや可用性の低下へとつながります。

そこで同じ内容のデータベースを複数作成(レプリケーション)しアクセスを分散することで1台あたりのデータベースの負荷を減らします。また、1台のDBが使えなくなったとしてももう一台のDBが継続的に稼働し続けることで高可用性を実現します。

しかしDBを複数持つと1台に書き込んだ瞬間にすべてのDBを更新しなければいけません。

そこでDB1台のみに書き込み、読み込みを許可しその他のDBには読み込みのみを許可することでDBの読み込みのトラフィックを分散することができます。上記の書き込み、読み込みを許可するDBをMaster、読み込みのみを許可するDBをSlaveと呼びます。

さらに、Masterが落ちた時はSlaveをMasterへと昇格することでサービスの継続稼働をサポートします。

インスタンスを作成する

今回の本題はMySQLの設定になるので上図の構成のインスタンスをさくっと作ってしまいます。

まずVirtualNetを作成します。アドレス空間はIPv4のクラスCとしましたが別になんでも大丈夫です。

続いて2つのVMを包むネットワーク・セキュリティグループを作成します。こちらも特に問題はありません。

MasterDB用のVirtualMachineを作成します。

OSはUbuntu 16.04LTS

VirtualNetworkとネットワーク・セキュリティグループは先程作成下ものを指定してください。

Slave用のVMを作成します。

OSはMasterと同じUbuntu 16.04LTS、VNet、セキュリティグループもMasterと同じ、先ほど作成したものとします。

VMに紐付いているネットワークインターフェースカードの設定を開き、IPアドレスの割当を静的にし、上図の構成通り、Masterに192.168.0.4、Slaveに192.168.0.5を設定します。

ネットワーク・セキュリティグループの設定を開き、SSHの22番の受信許可をします。

 

これで上図の設定をすることができました。

MySQLにレプリケーションの設定をする

今回はGTIDの使用はなしの方向でいきます。

まずMasterのVMにsshでログインします。

DB、テーブルの作成、データの挿入までを行います。

レプリケーション用のユーザーを作成します。

 

MasterDBの設定を行います。サーバーIDは任意のものを設定します。

SlaveのMysqlインストールと設定を行います。

 

続いてMasterDBでバイナリログの名前とイベント開始位置をめもります。

MasterDBのバックアップをとります。

scpでslaveへと転送します。

SlaveのDBでリストアします。

SlaveでMasterの登録を行います。

レプリケーションをスタートします。

 

レプリケーションの確認を行う

では本当にレプリケーションできたか確認をしてみましょう。

slaveのDBでitemsテーブルを表示してみます。

 

とりあえずレプリケーション登録時点ではMasterと同じ内容が入っています。

ではMasterにデータを追加してみます。

 

ではslaveで変更を確認してみます。

正しくレプリケーションできていました。

master側のステータスを見たいときは

slave側のステータスを見たいときは

でOK

 

感想

思ったよりめんどくさかったという感じはありますがAWSのようなマネージドなMySQLならボタンポチーでできるのだろうか?Azureも早くMySQLのマネージドサービスほしいですね(ClearDBではない)