備忘録

備忘録

LinodeでWindowsを起動する方法

https://github.com/ClickSimply/docs/blob/windows-on-linode/docs/tools-reference/windows-on-linode/installing-windows-on-linode-vps.md

C#でYahooAPIのルビ振りを利用する方法

Ⅰ. はじめに

タイトルの通り「C#でYahooAPIのルビ振りを利用する方法」です。

Ⅱ. サンプルプログラム

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Linq;

static async Task Main(string[] args)
{
  var grade = 1;
  var appId = "YOUR_APP_ID";
  var sentence = "漢字だけにルビを振る。ひらがなカタカナalphabet";

  // YahooAPI側のcharset指定が不正なのでGetStringAsyncするとSystem.InvalidOperationExceptionが発生する
  var bytes = await new HttpClient().GetByteArrayAsync($"https://jlp.yahooapis.jp/FuriganaService/V1/furigana?appid={appId}&grade={grade}&sentence={Uri.EscapeUriString(sentence)}");
  var str = Encoding.UTF8.GetString(bytes);
  var xml = XElement.Parse(str);
  var ns = xml.GetDefaultNamespace();
  
  Console.WriteLine("■ローマ字");
  foreach (var word in xml.Element(ns + "Result").Element(ns + "WordList").Elements(ns + "Word"))
  {
    Console.WriteLine(word.Element(ns + "Roman")?.Value);
    if (word.Element(ns + "SubWordList")?.HasElements ?? false)
    {
      foreach (var subWord in word.Element(ns + "SubWordList").Elements(ns + "SubWord"))
      {
        Console.WriteLine($"\t{subWord.Element(ns + "Roman")?.Value}");
      }
    }
  }

  Console.WriteLine("■ひらがな");
  foreach (var word in xml.Element(ns + "Result").Element(ns + "WordList").Elements(ns + "Word"))
  {
    Console.WriteLine(word.Element(ns + "Furigana")?.Value);
    if (word.Element(ns + "SubWordList")?.HasElements ?? false)
    {
      foreach (var subWord in word.Element(ns + "SubWordList").Elements(ns + "SubWord"))
      {
        Console.WriteLine($"\t{subWord.Element(ns + "Furigana")?.Value}");
      }
    }
  }
}

Ⅲ. 出力

f:id:kagasu:20180215034457p:plain

MariaDB(MySQL)を自動的にGoogleDriveにバックアップする方法

Ⅰ. はじめに

タイトルの通り「MariaDB(MySQL)を自動的にGoogleDriveにバックアップする方法」です。

Ⅱ. やり方

1. git cloneする
$ git clone https://github.com/kagasu/DBAutoBackup
2, gdriveを初期化する
$ gdrive
Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=...

Enter verification code:
3. config.jsonを編集する
$ vim config.json
4. 権限を変更する
chmod 777 /path/to/DBAutoBackup -R
5. cronに追加する
$ crontab -e

# DBAutoBackup(毎日 PM 16:00)
0 16 * * * /path/to/DBAutoBackup/start.sh 1> /dev/null 2> /dev/null

Ⅲ. バックアップデータの復号方法

openssl aes-256-cbc -d -in my_db.gz.enc -out my_db.gz -pass pass:09c9ea1ca79842da94df882d20887bb6

WPFでGridを使いコントロールの位置を動的に変更する方法

Ⅰ. はじめに

タイトルの通り「WPFでGridを使いコントロールの位置を動的に変更する方法」です。

Ⅱ. サンプルプログラム

MainWindow.xaml
<Grid Name="grid1" ShowGridLines="True">
  <Grid.RowDefinitions>
    <RowDefinition Height="1*" MaxHeight="80"/>
    <RowDefinition Height="3*" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="1*" />
    <ColumnDefinition Width="1*" />
  </Grid.ColumnDefinitions>
  
  <Button Name="button1" Content="button1" Grid.Row="0" Grid.Column="0"></Button>
  <Button Name="button2" Content="button2" Grid.Row="0" Grid.Column="1"></Button>
  <Button Name="button3" Content="button3" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"></Button>
</Grid>

f:id:kagasu:20180211150209p:plain

MainWindow.xaml.cs
public MainWindow()
{
  InitializeComponent();

  // button1とbutton2の位置を入れ替える
  Grid.SetColumn(button1, 1);
  Grid.SetColumn(button2, 0);

  // 新しいコントロールを追加する
  var button4 = new Button();
  button4.Content = "button4";
  Grid.SetRow(button4, 1);
  Grid.SetColumn(button4, 0);
  Grid.SetColumnSpan(button4, 2);
  Grid.SetRowSpan(button4, 1);
  grid1.Children.Add(button4);
}

Ⅲ. 実行結果

f:id:kagasu:20180211150626p:plain

参考

Linuxでディスク読書速度を測定(ベンチマーク)する方法

Ⅰ. はじめに

タイトルの通り「Linuxでディスク読書速度を測定する方法」です。

Ⅱ. やり方(簡易版)

書き込み速度
$ dd if=/dev/zero of=benchmark bs=64K count=32K conv=fdatasync
32768+0 records in
32768+0 records out
2147483648 bytes (2.1 GB) copied, 3.0664 s, 700 MB/s
読み込み速度
$ dd if=benchmark of=/dev/null
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 4.7301 s, 454 MB/s

Ⅲ. やり方(fioを使用する方法)

fioのパラメータ指定はこちらを参考にしました。
https://github.com/serverscope/serverscope-benchmark

インストール
$ yum -y install epel-release
$ yum -y install fio
書き込み速度(random read)
$ fio --time_based --name=benchmark --size=256M --runtime=60 --filename=benchmark --randrepeat=1 --iodepth=32 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=8 --rw=randwrite --blocksize=4k --group_reporting
(出力省略)
Run status group 0 (all jobs):
   READ: io=1031.9MB, aggrb=17609KB/s, minb=17609KB/s, maxb=17609KB/s, mint=60002msec, maxt=60002msec
読み込み速度(random write)
$ fio --time_based --name=benchmark --size=256M --runtime=60 --randrepeat=1 --iodepth=32 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=8 --rw=randread --blocksize=4k --group_reporting
(出力省略)
Run status group 0 (all jobs):
  WRITE: io=5960.4MB, aggrb=101679KB/s, minb=101679KB/s, maxb=101679KB/s, mint=60026msec, maxt=60026msec