テンプレートテスト
ブログの説明
ブログの説明2
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
Home
›
Archives for 5月 2019
2019/05/24
image
NO IMAGE
Windows の時刻を正確に合わせる
update
event_note
label
Windows
PC の時刻は NTP サーバーと同期を取っているはずなのですが、Windows PC の場合それでも少しずれてしまいます。
自分の PC の時刻がどの程度ずれているかは以下のページで確認できます。 - http://www.nict.go.jp/JST/JST5.html 私の場合は 0.2 秒ほどずれている状態でした。 または以下のコマンドで確認できます。 ```sh > w32tm /monitor /computers:ntp.nict.jp ``` 今回とある Web サービスとの連携で、出来れば誤差を数十ミリ秒くらいまでにしたかったので、精度をあげる方法はないかと調べてみました。 ## Windows Time サービスの起動 私の場合、そもそも時刻同期を行う Windows Time サービス (w32time) が起動していませんでした。 起動するには、まず `Windows キー + R` を押して `services.msc` を入力してサービス画面を起動します。 `Windows Time` を右クリックして「開始」を押せば w32time サービスが開始されます。 とりあえずはこれだけで正確に時刻同期されました。 尚、私の場合、この `Windows Time` のスタートアップの種類が「手動」になっていたので、「自動(遅延開始)」に変更しました。 ## w32time の設定 ### NTP サーバーの変更 コマンドプロンプトで以下を実行することで現在の設定を確認できます。 ``` > w32tm /query /status ``` 私の場合、以下のように表示されました。 ```sh 閏インジケーター: 3 (同期未実行) 階層: 0 (未指定) 精度: -23 (ティックごとに 119.209ns) ルート遅延: 0.0000000s ルート分散: 0.0000000s 参照 ID: 0x00000000 (未指定) 最終正常同期時刻: 未指定 ソース: Local CMOS Clock ポーリング間隔: 10 (1024s) ``` ソースが `Local CMOS Clock` となっており、これは内蔵時計だそうなので、これを `ntp.nict.jp` に変更します。 コマンドプロンプトを管理者権限で起動して、以下のコマンドを実行します。 ```sh > w32tm /config /syncfromflags:manual /manualpeerlist:ntp.nict.jp /update > w32tm /resync > w32tm /query /status ``` これで NTP サーバーと同期されます。 尚、時刻はいきなり補正されるのではなく、少しずつ補正されていきます。 ### ポーリング間隔の設定 w32time サービスを起動していてもしばらく経つとまた時刻はずれてきます。 この場合、時刻同期の間隔を短くしたら改善されます。 この設定については、以下のページが参考になりました。 - https://qiita.com/ymfj/items/380d0b3ea5f6cf3dfdb6 どうやらレジストリを変更しないといけないようですね。
## 参考 URL - https://qiita.com/ymfj/items/380d0b3ea5f6cf3dfdb6 - http://www.jh4vaj.com/archives/4514 - https://www.vwnet.jp/Windows/WS08R2/NTP/w32time.html
Read more
2019/05/23
image
NO IMAGE
unf_ext のインストール時に mkmf がないと言われた
update
event_note
label
Ruby
Ubuntu に gem で unf_ext をインストールする時に、以下のようなエラーが表示されました。
```sh Building native extensions. This could take a while... ERROR: Error installing unf_ext: ERROR: Failed to build gem native extension. current directory: /var/lib/gems/2.5.0/gems/unf_ext-0.0.7.5/ext/unf_ext /usr/bin/ruby2.5 -I /usr/local/lib/site_ruby/2.5.0 -r ./siteconf20190522-156-j2egpd.rb extconf.rb mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h extconf failed, exit code 1 Gem files will remain installed in /var/lib/gems/2.5.0/gems/unf_ext-0.0.7.5 for inspection. Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/unf_ext-0.0.7.5/gem_make.out ``` `mkmf.rb` がないそうですが、`ruby-dev` をインストールすれば解決するそうです。 ```sh sudo apt-get install ruby-dev ``` いやー、はまったわ。
## 参考 URL - https://www.xmisao.com/2014/07/06/cannot-load-such-file-mkmf.html
Read more
2019/05/22
AWS Cloud9 で ASP.NET Core のアプリに外部からアクセスできるようにする
update
event_note
label
ASP.NET Core
label
AWS Cloud9
AWS Cloud9 にて ASP.NET Core で作成した Web アプリケーションを動作させ、外部からアクセスしてみます。
以前以下のような記事を書きました。 - [AWS Cloud9 で ASP.NET Core を使う](https://kuttsun.blogspot.com/2019/04/aws-cloud9-aspnet-core.html) 今回はその延長です。 まずは以下に記載されているように、いろいろと準備が必要です。 - [実行中のアプリケーションをインターネット経由で共有する](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html#app-preview-share) 基本的にここに書かれている通りやるだけです。 ## AWS の設定 まずは [AWS コンソール](https://ap-southeast-1.console.aws.amazon.com/console/home)にアクセスしておきます。 ### AWS EC2インスタンスに Elastic IP(固定グローバルIPアドレス)を割り当てる インスタンス作成時に割り当てられたパブリック IP アドレスは、インスタンスを再起動したりすると違う IP アドレスに変わってしまため、これを固定 IP アドレスにします。 - https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html 尚、Elastic IP の反映にはしばらく時間がかかるようです。 後述の設定が全部終わってもアクセスできず悩んでいましたが、しばらく時間が経つとアクセスできるようになりました。 ### インスタンス ID の確認とパブリック IP アドレスの取得 ナビゲーションバーで、[サービス] を選択します。次に、[EC2] を選択します。 リージョンが正しくない場合はリージョンの選択も必要です。
次に、サービスナビゲーションペインで [インスタンス] を選択します。 インスタンスのリストからインスタンスを選択すると、[説明] タブの中で [インスタンス ID] やパブリック IP アドレスが確認できます。
### インスタンスのセキュリティグループを設定する 以下に従って設定を行います。 - [ステップ 2: インスタンスのセキュリティグループを設定する](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html#app-preview-share-security-group) ### インスタンスのサブネットをセットアップする 以下に従って設定を行います。 - [ステップ 3: インスタンスのサブネットをセットアップする](https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html#app-preview-share-subnet) AWS の設定に関してはこれで完了です。 ## 実行中のアプリケーションの IP を変更する ASP.NET Core アプリケーションの IP をプライベート IP アドレスに変更します。 これについては[以前の記事](https://kuttsun.blogspot.com/2019/04/aws-cloud9-aspnet-core.html)に書いた通り、以下のどちらかで指定します。 ### 環境変数で指定 `ASPNETCORE_URLS` で指定します。 ```sh $ export ASPNETCORE_URLS=http://[プライベート IP アドレス]:8080 ``` ### プログラムで指定 `Program.cs` で以下のように記述します。 ```cs WebHost.CreateDefaultBuilder(args) .UseUrls("http://[プライベート IP アドレス]:8080") ``` ## アクセスしてみる アプリケーションを実行したら、ブラウザにパブリック IP アドレスを入力してアクセスしてみます。 ```sh http://[パブリック IP アドレス]:8080 ``` 尚、前述した通り、Elastic IP の反映にはしばらく時間がかかります。
## 参考 URL - https://qiita.com/ukgraphics/items/b66acd38cda4180b2d7f - https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/environments?view=aspnetcore-2.2 - https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/host/web-host?view=aspnetcore-2.2#server-urls - https://ac-5.net/aws/aws_elasticip_allocation
Read more
2019/05/17
image
NO IMAGE
ASP.NET Core のロギングメソッドの引数
update
event_note
label
ASP.NET Core
label
C#
`Microsoft.Extensions.Logging` のロギングメソッドにはいくつかのオーバーロードがありますが、いくつか分からないものがあったので確認してみました。
ログレベルは何でもいいんですが、`LogError` を例とします。 メソッドの定義は以下です。 - https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.extensions.logging.loggerextensions.logerror?view=aspnetcore-2.2 このうち、`EventId` と `Object[]` がどのように出力されるのか分からなかったため以下のコードで確認してみます。 `ILogger` の DI の部分などは省略します。 また、出力結果は `Microsoft.Extensions.Logging` デフォルトのコンソール出力の結果です。 ## 環境 - Visual Studio 2017 - ASP.NET Core 2.2 ## サンプル ### メッセージのみ ```cs logger.LogError("Message"); ``` **出力結果** ```bat fail: Default[0] Message ``` ### 可変引数 ```cs logger.LogError("User {hoge} logged in from {Address}", "名前", "住所"); ``` **出力結果** ```bat fail: Default[0] User 名前 logged in from 住所 ``` `string.Format` と同じで、プレースホルダーが可変引数で指定した値に置き換わるだけのようです。 ### 例外 ```cs try { var zero = 0; var foo = 1 / zero; } catch (Exception ex) { logger.LogError(ex, "Message"); } ``` **出力結果** ```bat fail: Default[0] Message System.DivideByZeroException: Attempted to divide by zero. ``` ### EventId - 調査中
## 参考 URL - https://github.com/aspnet/Logging/issues/753 - https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-event-id
Read more
2019/05/14
image
NO IMAGE
[C#] enum 型に対して Interlocked.Exchange を使う
update
event_note
label
C#
`enum` 型の変数に対して排他処理を行うため、`Interlocked.Exchange` を使いたい場合、`int` にキャストして格納します。
```cs int _field; public MyEnum Field { get => (MyEnum)_field; set => Interlocked.Exchange(ref _field, (int)value); } ``` 尚、調べた限りでは、`lock` よりも `Interlocked.Exchange` ほうがコストが低いようです。
## 参考 URL - https://stackoverflow.com/questions/7177169/how-to-apply-interlocked-exchange-for-enum-types-in-c
Read more
2019/05/09
image
NO IMAGE
[C#] Linq の GroupBy の使い方
update
event_note
label
C#
Linq の GroupBy の使い方についてまとめてみます。
## 概要 `GroupBy` でグループ化のキーを指定します。 `GroupBy` の戻り値は `IGrouping` で、以下のように定義されています。 ```cs IGrouping<キーの型, グループ化されたオブジェクトの型>``` ```cs public interface IGrouping
: IEnumerable
, IEnumerable { TKey Key { get; } } ``` ## 基本 ### プリミティブ型の配列やリスト ```cs // Japan と America が重複しているリスト // (わかりやすいように重複する要素は連続して入れています) var countries = new List
() { "Japan", "Japan", "Japan", "America", "America", "China" }; // string のリストなので、グループ化のキーは自身となる var groupedCountries = countries.GroupBy(x => x); // 各グループのキーと個数を表示 foreach (var groupedCountry in groupedCountries) { Console.WriteLine($"{groupedCountry.Key}, {groupedCountry.Count()}"); } ``` **出力結果** ```sh Japan, 3 America, 2 China, 1 ``` `IGrouping` は `IEnumerable` を実装しているので、グループの中身を列挙できます。 ```cs // 各グループのキーと個数を表示 foreach (var groupedCountry in groupedCountries) { Console.WriteLine($"Key:{groupedCountry.Key}, Count:{groupedCountry.Count()}"); // 各グループの中身を表示 foreach (var country in groupedCountry) { Console.WriteLine(country); } } ``` **出力結果** ```sh Key:Japan, Count:3 Japan Japan Japan Key:America, Count:2 America America Key:China, Count:1 China ``` ### オブジェクトの配列やリスト 以下のようなクラスをモデルとします。 ```cs class Person { public string Name { get; set; } public string Age { get; set; } } ``` 以下のようなデータ格納されているとします。 ```cs var persons = new List
{ new Person(){ Name = "Hoge", Age = 20 }, new Person(){ Name = "Piyo", Age = 20 }, new Person(){ Name = "Foo", Age = 30 }, new Person(){ Name = "Bar", Age = 30 }, }; ``` `Age` でグループ化してみます。 ```cs // Age でグループ化 var groupedPersons = persons.GroupBy(x => x.Age); foreach (var groupedPerson in groupedPersons) { Console.WriteLine($"Key:{groupedPerson.Key}, Count:{groupedPerson.Count()}"); // 各グループの中身を表示 foreach (var person in groupedPerson) { Console.WriteLine($"Name:{person.Name}, Age:{person.Age}"); } } ``` **出力結果** ```sh Key:20, Count:2 Name:Hoge, Age:20 Name:Piyo, Age:20 Key:30, Count:2 Name:Foo, Age:30 Name:Bar, Age:30 ``` ## 応用 ### 重複チェック `GroupBy` を使うことで、配列やリストに重複しているものがあるかどうかをチェックできます。 前述の以下のリストについて。 ```cs var countries = new List
() { "Japan", "Japan", "Japan", "America", "America", "China" }; ``` 単純に重複しているかどうかをチェックしたい場合は以下のように書けます。 ```cs // 重複チェック var result = countries.GroupBy(x => x).Any(x => x.Count() > 1); Console.WriteLine(result); ``` 拡張メソッドを作成しておけば楽かもしれません。 ```cs public static bool IsDuplicated
(this IEnumerable
enumerable, Func
keySelector) { return enumerable.GroupBy(keySelector).Any(x => x.Count() > 1); } public static bool IsDuplicated
(this IEnumerable
enumerable) { return enumerable.GroupBy(x => x).Any(x => x.Count() > 1); } ``` ```cs Console.WriteLine(countries.IsDuplicated()); ``` ### 重複している(していない)要素を取得 重複している要素を取得したい場合は以下のように書けます。 ```cs // 重複しているデータを取得 var keys = countries.GroupBy(x => x).Where(x => x.Count() > 1).Select(x => x.Key); Console.WriteLine("重複しているデータ: " + string.Join(", ", keys)); // 重複していないデータを取得 keys = countries.GroupBy(x => x).Where(x => x.Count() == 1).Select(x => x.Key); Console.WriteLine("重複していないデータ: " + string.Join(", ", keys)); ``` **出力結果** ```cs 重複しているデータ: Japan, America 重複していないデータ: China ```
## 参考 URL - https://devlights.hatenablog.com/entry/20091210/p2 - https://www.urablog.xyz/entry/2018/07/07/070000 - http://k2work1.blogspot.com/2014/11/cgroupby-selectmany.html - https://blog.beachside.dev/entry/2016/06/10/210000
Read more
新しい投稿
前の投稿
ホーム
Translate
Popular Posts
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
[ASP.NET Core] 前のページ(遷移元)の URL を取得する
image
NO IMAGE
外部 DLL を NuGet パッケージに含める方法
image
NO IMAGE
[C#] SonarQube で .NET アプリケーションのコード解析を行う
image
NO IMAGE
[ASP.NET Core] Form value count limit 1024 exceeded のエラーが発生した
image
NO IMAGE
マージ元ブランチとマージ先ブランチ
TortoiseGit でリモートリポジトリのタグを削除する
image
NO IMAGE
C# で GitHub からリリースバージョンを取得する
[Jenkins] エラー 1069: ログオンに失敗したため、サービスを開始できませんでした。
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
Apache
3
AppVeyor
2
AsciiDoc
3
ASP.NET Core
55
Atom
4
AWS
2
AWS Cloud9
4
blockdiag
1
Blogger
10
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
Codecov
1
CSS
1
Docker
28
DokuWiki
4
Doxygen
1
draw.io
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
2
Firefox
5
Git
12
GitBook
4
GitBucket
7
GitHub
7
GitLab
30
Go
1
Google
1
Google Cloud Platform
1
Grafana
5
HTML
5
IIS
8
InfluxDB
6
JavaScript
7
Jenkins
7
Linux
25
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MVC
1
MVVM
6
NLog
3
Node.js
3
npm
1
OpenSSL
3
ownCloud
2
Pine Script
1
PlantUML
5
PowerShell
7
Prism
2
Python
11
Razor
3
Redmine
30
remark.js
2
rocketchat
4
Ruby
3
SignalR
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
t
1
TestLink
2
Tomcat
2
TortoiseGit
10
TortoiseSVN
2
Trading View
1
Travis CI
1
Ubuntu
13
Visual Studio
39
Visual Studio Code
9
Vue.js
8
Windows
56
Windows 10
4
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
1
Xamarin
1
xUnit
5
アプリケーション
1
デザインパターン
1
テスト
3
バッチファイル
2
ぴよ
3
プログラミング
3
ライセンス
1
ラベル
3
ラベル1
2
英語
2
雑記
1
書籍
1
数学
1
正規表現
1
Blog Archive
►
2022
(1)
►
2月
(1)
►
2021
(24)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
►
2020
(60)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(7)
►
1月
(12)
▼
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
▼
5月
(6)
Windows の時刻を正確に合わせる
unf_ext のインストール時に mkmf がないと言われた
AWS Cloud9 で ASP.NET Core のアプリに外部からアクセスできるようにする
ASP.NET Core のロギングメソッドの引数
[C#] enum 型に対して Interlocked.Exchange を使う
[C#] Linq の GroupBy の使い方
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)