ラベル

Server (108) work (77) Idea (68) Car (31) PC (29) DAW (28) other (19) MakingWEBsite (18) 趣味 (18) health (13) CentOS (11) drupal (11) (9) android (4) スマホ (4) communication (3) drupal7 (3) hint (3) meno (3) モバイル (3) 歯医者 (3) 第二種電気工事士 (3) 英語 (3) PC Server (2) drupal8 (2) ms access (2) uwp C# (2) めし (2) 整備 (2) 音楽 (2) MIDI (1) diy (1) 会計 (1) 動画再生 (1) 生活 (1) 郵便 (1) 食べ物 (1)

2018年3月23日金曜日

DOM XPhthを調べる。

DOM XPhthを調べる。

Chromeを使う方法
調べたい要素を選択して右クリック>検証
デベロッパーツールの中の該当箇所を右クリック。Copy > Copy XPath


これをそのままC# UWP HTML Agility Packで使ったのだけど、htmlから情報を取れなかった。
(HAPExplorerを使えばいいのだろうけど、自分の環境では起動しなかった。)

例えばこの方法で調べて
/html/body/div/table[3]/tbody/tr[3]/td[4]
と表示された。
それをそのままコピーするとエラーが出る。

この場合、/tbody
を取って
/html/body/div/table[3]/tr[3]/td[4]
としたらうまくいった。

2018年3月16日金曜日

SMFファイル MIDI 可変長数値表現

CUBASEからSMFファイルを作って、それを秀丸のバイナリエディタで開いた。
そのバイナリエディタの中身がどうなっているのか調べた。

CUBASEで単純なSMFファイルと作った。
内容は
4分音符
ノートC4(YAMAHAはC3になるのかな?ノートナンバーが60(16進数で3C))
チャンネル0
それをフォーマット1でMIDIファイル(SMF)に出力した。
それを秀丸のバイナリエディタで開いた。

そのSMFファイルの中身の解説メモ。

MIDIファイル(smf)-----ここから

4D,54,68,64,ここからがヘッダーだという意味の記号。ヘッダチャンク。
00,00,00,06,データ長(ここからのこのヘッダチャンクのバイト数が6という意味)
00,01,フォーマット(フォーマット1が複数トラック。フォーマット2が1トラックにすべてを押し込む形式。)
00,02,トラック数
01,E0,時間単位

4D,54,72,6B,ここからがトラックのデータという記号。トラックチャンク。(このトラックは空トラック)
00,00,00,1D,データ長(4 byte)
00,デルタタイム
FF,03,06,74,65,73,74,43,33,シーケンス、トラック名、FF,03,に続く数値は文字の数(この場合は6文字がシーケンス、トラック名に使われているという意味)
00, デルタタイム、データ長が0で次の音を鳴らす。
FF,51,03,07,A1,20,テンポ
00,デルタタイム
FF,58,04,04,02,18,08,拍子
00,デルタタイムFF,2F,00,トラックチャンクの終わり

4D,54,72,6B,ここからがトラックのデータという記号。2つ目のトラック。
00,00,00,1C,データ長(4 byte)
00,デルタタイム
FF,03,0B,48,41,4C,69,6F,6E,20,36,20,30,31,シーケンス、トラック名(0Bつまり11文字)
00, デルタタイム、データ長が0。
90,3C,50,MIDIイベントノートオン(ノートナンバー60、16進数で3C)
83,60, デルタタイム、4分音符分後に次のイベント(可変長)
80,3C,40,MIDIイベントノートオフ
00,デルタタイム
FF,2F,00,トラックチャンクの終わり

----------ここまで


データ長
可変長数値表現
MIDIをバイナリエディタで開いて、デルタタイムを見てみると。
例えば可変長16進数の
8F 00
と書いてあった場合。
これを2進数で表すと
10001111 00000000
と16桁になっている。
可変長数値表現は2進数の桁が必ず8の倍数桁になっていて、8桁毎の一番左の桁は
数値を表すものではなくて、可変長数値の表示範囲を表している。
始まりと途中が1。最後は0。のビットが立つ。つまり、8桁の左端が1で始まって8桁の左端が0で終わる。

実際の16進数の数値を求めるには、各8ビット左端の
10001111 00000000
から上の例で色付きの1と0を取って、それぞれを7ビットにする。
それをドッキングさせて、
0001111 0000000
これをこのまま16進数に戻せばいい(780)。

別の例で、16進数を可変長16進数に変換してみる。
例えば16進数80を可変長16進数に変換してみる。
16進数80は2進数で表すと下の8桁。
10000000
これを7桁毎で区切ると、
1 0000000
これを各8桁の左端に途中1、終わり0、のビットをつけると
10000001 00000000
これは16進数で8100。
よって、16進数80は、可変長16進数で8100になる。





2018年3月15日木曜日

samba

samba3.5以下の場合
セキュリティ上の理由でWindows側のSMB 1.0/CIFSクライアントが無効になっているからそれを有効にしないとつながらない。
3.5以下の状態のまま一時的につなぎたいときにはそれをONにする。
コントロールパネルから「Windows 機能の有効化または無効化」を開く。
SMB1.0/CIFSファイル共通のサポートのすべてのチェックを入れる。

sambaは3.5以下と3.6以上で別物。CentOS6を普通にアップデートしていると3.6にはならない。
現行最新のsambaはバージョン4。


samba3.6を使うときは
[global]
  min protocol = SMB2
  max protocol = SMB2
を追加しないと今のWindowsからはつなげないらしい。

2018年1月13日土曜日

xaml にC#のコードから線を引いたり、円を描いたりする。

C#コード側からXAML側図形の位置や形をコントロールする。

Canvas、Line、EllipseなどをC#コードから定義するときは、
Canvas canvas = new Canvas();
とインスタンス化して使う。

UWPは色の指定方法が変わったそうだ。
WPFの
hoge.Stroke = System.Windows.Media.Brushes.Silver;
として指定する方法から
SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
line1.Stroke = greenBrush;
と、インスタンス化してから使うやり方に変わっている。


 //Canvasの中の描写されたものをすべて消す。
canvasName.Children.Clear();

 //次のif文は一つ前に描写されたものが消される。
if (canvasGakufu.Children.Count > 0)
         {
              canvasGakufu.Children.RemoveAt(canvasGakufu.Children.Count - 1);
          }



XAML側
 コード側から名前を指定して何かさせたい場合には、XAML側のGridやCanvasなどのパネルに名前を付ける。

<Page
    x:Class="UWP_動的に線を描く20180113_1958.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWP_動的に線を描く20180113_1958"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid x:Name="yy" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    </Grid>
</Page>

C#コード側
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Shapes;


// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace UWP_動的に線を描く20180113_1958
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

           //線を引くUWPは色を指定するのにSolidColorBrushを使う
            var line1 = new Line();
            SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
            line1.Stroke = greenBrush;
            line1.X1 = 302;
            line1.X2 = 302;
            line1.Y1 = 220;
            line1.Y2 = 283;
            line1.StrokeThickness = 3;
            canvasName.Children.Add(line1);  //yyはXAML側のGRIDにつけた名前。
             
            //円を描く
            var ellipse1 = new Ellipse();
            ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.SteelBlue);
            ellipse1.Width = 200;
            ellipse1.Height = 200;
            canvasName.Children.Add(ellipse1);
        }
    }
}
--------------------------------------------------------------------------------
//円を描く。で位置を指定。と、回転。
var ellipse1 = new Ellipse();
            ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.Black);
            ellipse1.Width = 10;
            ellipse1.Height = 25;
            RotateTransform rotateTransform45 = new RotateTransform { Angle = 45, CenterX = 0, CenterY = 0 };
            ellipse1.RenderTransform = rotateTransform45;
            Canvas.SetLeft(ellipse1, 300);
            Canvas.SetTop(ellipse1, 278);
         
            canvasName.Children.Add(ellipse1);

-----------------------------------------------------------------------------------
例えば、XAMLコードだけで図形を描く場合は、

<Page
    x:Class="UWP_楽譜描写20180111_2020.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWP_楽譜描写20180111_2020"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Canvas
             Height
             ="600"
             Width
             ="600">
<!--
            <Path Fill="Black" Stroke="Black" StrokeThickness="1">
                <Path.Data>
                    <EllipseGeometry Center="50,50" RadiusX="7" RadiusY="10" />
                 
                </Path.Data>
            </Path>
-->

            <!--音符の棒 ヘ音記号のド-->
            <Line
                X1="302" Y1="220"
                X2="302" Y2="283"
                Stroke="Black"
     StrokeThickness="3"/>

         
            <!--オタマジャクシヘ音記号のド-->
            <Ellipse
    Canvas.Top="278"
    Canvas.Left="300"
    Fill="#FFFFFF00"
    Height="25"
    Width="10"
    StrokeThickness="5"
    Stroke="#FF0000FF">
         <Ellipse.RenderTransform>
            <RotateTransform Angle="45" />
         </Ellipse.RenderTransform>
            </Ellipse>

            <!--五線譜 右手-->
            <Line
                X1="50" Y1="100"
                X2="550" Y2="100"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="120"
                X2="550" Y2="120"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="140"
                X2="550" Y2="140"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="160"
                X2="550" Y2="160"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="180"
                X2="550" Y2="180"
                Stroke="Black"
     StrokeThickness="3"/>
         
         
 <!--左手-->
            <Line
                X1="50" Y1="240"
                X2="550" Y2="240"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="260"
                X2="550" Y2="260"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="280"
                X2="550" Y2="280"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="300"
                X2="550" Y2="300"
                Stroke="Black"
     StrokeThickness="3"/>

            <Line
                X1="50" Y1="320"
                X2="550" Y2="320"
                Stroke="Black"
     StrokeThickness="3"/>


        </Canvas>
    </Grid>
</Page>


---------------------------------------------------------------------------------
C#コード側からxamlにキャンバスを追加する
Canvas myCanvas = new Canvas();
            myCanvas.Height = 810;
            myCanvas.Width = 610;
            myCanvas.Background = new SolidColorBrush(Windows.UI.Colors.LightSteelBlue); //Brushes.LightSteelBlue;
            root_Grid.Children.Add(myCanvas);

-------------------
背景がSolidColorBrush色の100個のCanvasを追加したい時
 List<Canvas> myCanvas = new List<Canvas>();
            for (int i = 0; i < 100; i++)
            {
                myCanvas.Add(new Canvas { Height = 800, Width = 800, Background = new SolidColorBrush(Windows.UI.Colors.LightSteelBlue) });
               gridName.Children.Add(myCanvas[i]);
            }

------------------------------------------------------------------------------------
下の2行は少し試したけどうまくいかなかった。また後でもう一度見直してみる。
nameやaccesskeyを使って、名前やkeyを設定できるかも(後で確認しとく)。
ClearValue、UpdateLayoutも使えるか?
----------------------------------------------------------------------------------
レイヤー。
Framework layer ----Windows.UI.XAML
Visual layer ---------------Windows.UI.Composition
Graphics layer------------ DirectX Family
となっていて、
msによると、
ビジュアル レイヤー
1.コンテンツ: カスタム描画コンテンツの軽量合成
2.効果: 効果をアニメーション化、チェーン化、カスタマイズできる、リアルタイム UI 効果システム
3.アニメーション: UI スレッドから独立して実行される、表現力豊かな、フレームワークに依存しないアニメーション

XAML とビジュアル レイヤーの相互運用機能を使用すると、XAML API 単独では実現できない、高度なアニメーションや効果を作成できます。
だそうだ。

2017年12月1日金曜日

uwp ファイルの書き込み デバイス一覧をテキストファイルに書き込み

UWPでのテキストファイルの書き込み

UWPではStreamWriterが使えない。
UWPでは任意のフォルダにテキストを書き出すことができない。
----------------------------------
自PCの全デバイス名をテキストファイルに書き出すコード。

Buttonをひとつ配置

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace 練習20171130a24UWP_ファイル
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();         
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            string selector = "System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True";
            DeviceInformationCollection collection = await DeviceInformation.FindAllAsync(selector);

            // Create sample file; replace if exists.
            Windows.Storage.StorageFolder storageFolder =
                Windows.Storage.ApplicationData.Current.LocalFolder;
            Windows.Storage.StorageFile sampleFile =
                await storageFolder.CreateFileAsync("sample.txt",
                    Windows.Storage.CreationCollisionOption.ReplaceExisting);

            var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

            using (var outputStream = stream.GetOutputStreamAt(0))
            {
                // We'll add more code here in the next step.

                using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
                {

                    foreach (DeviceInformation info in collection)
                    {
                        dataWriter.WriteString(string.Format("Name={0} IsEnabled={1} Id={2} \r\n", info.Name, info.IsEnabled, info.Id));

                    }




                        // dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");

                        await dataWriter.StoreAsync();
                    await outputStream.FlushAsync();
                }
             
            }
            stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

        }
    }
}



--------------------------------------------------------------------------------

msn
https://docs.microsoft.com/ja-jp/windows/uwp/files/quickstart-reading-and-writing-files#writing-to-a-file
のテキストファイルへの書き込みの解説通りにコードを組み立てた。

buttonを一つ配置

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Devices.Enumeration;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// 空白ページの項目テンプレートについては、https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x411 を参照してください

namespace 練習20171130a24UWP_ファイル
{
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();         
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            // Create sample file; replace if exists.
            Windows.Storage.StorageFolder storageFolder =
                Windows.Storage.ApplicationData.Current.LocalFolder;
            Windows.Storage.StorageFile sampleFile =
                await storageFolder.CreateFileAsync("sample.txt",
                    Windows.Storage.CreationCollisionOption.ReplaceExisting);

            var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);

            using (var outputStream = stream.GetOutputStreamAt(0))
            {
                // We'll add more code here in the next step.

                using (var dataWriter = new Windows.Storage.Streams.DataWriter(outputStream))
                {

                    dataWriter.WriteString("DataWriter has methods to write to various types, such as DataTimeOffset.");

                    await dataWriter.StoreAsync();
                    await outputStream.FlushAsync();
                }
             
            }
            stream.Dispose(); // Or use the stream variable (see previous code snippet) with a using statement as well.

           //書込み終了ダイアログ
           await new MessageDialog("書込み終了", "インフォメーション").ShowAsync();

        }
    }
}

2017年11月21日火曜日

トイレ用ヒーター

冬のトイレの暖房ヒーター。

トイレの照明スイッチとヒータースイッチが同じになるようにしたい。
そうすればトイレに入ったときにすでに暖房が動き出しているし、消し忘れもない。消し忘れても照明がついていれば、消し忘れを発見しやすい。

でも普通のスイッチだと焼ける可能性があるよなぁ。

で、リレー式のスイッチを使おうかとも思ったけれど、600w/hくらいのヒーターならそこまでしなくても「押し釦開閉器」で大丈夫みたいだ。検索かけたら、モノタロウで春日電機というところから単相用で定格通電電流15Aまで、と30Aまでのスイッチが出ているのを見つけた。しかも安い。15Aまでの物で1000円以下。

でも、でかいよなぁ。

2017年11月12日日曜日

擦り傷 絆創膏 モイストヒーリング

2017/11/10
金曜日の午後4時少し前、山を走っていて転んだ。
土の一部に出ているギザギザの石の上にスライディングするような感じで転んでしまって、21cm x 6cmくらいのちょっと深めの擦り傷を右腕に作ってしまった。
転んで手をついた側の右手は軍手をして、その上汗を拭くタオルを持っていたので掌は無傷。長袖を着ていたけど、軍手と長袖の間に入った石に引っかかりながら、その石が袖をまくりながら傷をつけていった感じ。
ついでに書くと、左手は軍手の上から軽い傷、右足の膝が傷プラス直径10cmくらいの青あざ。

帰ってきて、洗面所のシャワーで洗い流した。土もついていたので、いいのかどうかはわからないけど固形石鹸も使って洗い流した。
痛さはズンズン痛い。
その日の午後7時ころ、前からちょっと試してみたかったモイストヒーリング用絆創膏をカワチ薬局で買ってきて貼った。

丸々3日間絆創膏を貼りっぱなしにして、2017/11/13月曜日、夜飯を食べてお風呂に入った後、午後7時ころ洗面所のシャワーで水を使ってきれいに洗い流してから、新しいものに貼り替えた。
この時の状態は傷口の上をきれいに柔らかいぶにょぶにょの新しい組織が覆っているという感じ。
3日間も絆創膏を貼って、中がぐちょぐちょ状態だったので膿んでしまわないか心配だったけど、洗い流したらきれいないい感じの状態になっていた。
最初貼る時にちゃんと洗ったのがよかったのかもしれない。

2017/11/18日
5日ぶりに絆創膏を貼り替えた。絆創膏にはまだ液体がついていた。まだ傷は残っている。でも、もう貼らなくてもいいかも。と思うくらいになっていた。

11月10日と11月13日は
薬局に置いてある中では一番大きなMサイズの
白十字 モイストヒーリングパッド
シートサイズ:8cm×10cm パッドサイズ:4.5cm×6cm
を貼った。
11月18日は
ケアリーヴ 治す力
CN4J ジャンボサイズ:4枚
を貼った。

白十字のは傷口が透けて見えるので安心できる。初めてモイストヒーリングをする人には状態が分かるのでいいかもしれない。すごく薄いので台紙が両面についている。肌に触れない側の台紙は貼った後にはがすこと。そうしないと薄いので絡まってしまう。

ケアリーヴは少しくらい水にぬれてもはがれにくい。傷口は見えない。


モイストヒーリング
傷口を乾かさずに治すことをそう言うみたいだ。
ネット上では高機能絆創膏と書いてあったりする。
買うときには「管理医療機器 家庭用創傷パッド」と書かれているものを買えばいいそうだ。

少し前はサランラップを巻けとか書いてあったよなぁ。
今でもそれでいいのだろうけど・・・。

瑞光メディカルのプライモストのPシリーズが結構ネットを検索すると出ているけど、P1など自分の今のキズをカバーできる大きさの物は3000円ちょっとするし、2回分としてもそんなに安くはないよなぁ。
同じく瑞光メディカルのハイドロコロイド包帯 HCARRを傷口に直接使っている人がいるけども、これはプライモストの上から押さえる物として使う、と製品の説明に書いてあった。紫外線をカットしてくれるからその点でもいいと書いてある。
上から押さえるのならニチバン 防水フィルムロールタイプ 10cm幅 1m巻きを買う人も多くいるみたいだ。ハイドロコロイド包帯 HCARRをこのニチバン 防水フィルムロールタイプで留めている人がアマゾンのレビューでいるみたいだけど、その使い方でいいのか?実物を見てみないとそこいら辺はわからない。

自分のキズは21cm x 6cmくらいの擦りキズで、3枚重ねて貼った。
両端は内側の粘着部分を切って貼って真ん中は上からかぶせて貼るのが良かったのだろうけど、それか、端から順番に貼る時は重ねて貼る部分の下側の粘着部分は切り落として、上になる部分は粘着部分を切り落とさずに貼る。
(そうすれば、貼り合わせ部分を粘着部分で覆える。そういう貼り方をすれば、絆創膏から血が漏れ出てこない。)
端から順番に貼るときに、2番目の絆創膏の両側の粘着部分を切り落としてしまったので、つなぎ目の部分を粘着部分で覆えなかった。でつなぎ目には漏れを防ぐために普通の絆創膏を貼った。

最初のうちは1日に一回張り替えてくれと書いてある。少ししたら2,3日に一回。水できれいに洗って張り替えるそうだ。で、2週間くらいで治る。そうだ。

自分は今のところ日曜日午後3時15分まで貼りっぱなし。
液体でじゅぶじゅぶしている。
洗って貼り替えた方がいいのか。
2週間くらい貼りっぱなしでいいと思っていたから予備の絆創膏は買わないとない。
適当に様子を見ながらやってみる。