C#でSelenium(ブラウザを自動操作)を使うための準備
C#で Selenium を使ってブラウザ(Chrome)を自動で操作してみました。準備に必要な情報がちらばっていたので、まとめたいと思います。
Nuget からパッケージをインストール下記のパッケージをインストールします。
Selenium.WebDriver(必須)
Selenium.WebDriver.ChromeDriver(必須)
WebDriverManager(任意。Chrome 操作に必要な「ChromeDriver」最新版を自動取得)
一番下の「WebDriverManager」は任意ですがインストールした方が便利です。Selenium から Chrome を操作するためには対応したバージョンの「ドライバ」が必要です。Chrome は頻繁に更新されますが、「WebDriverManager」を使えばドライバを自動取得できます。
Selenium から Chrome を操作する12345678// ChromeDriver最新化new WebDriverManager.DriverManager().SetUpDriver(new ChromeConfig());/ ...
HttpRequestException:「Error while copying content to a stream.」の対策
C#で HttpClient を使って、とある API からデータを取得していたのですがSystem.Net.Http.HttpRequestException: Error while copying content to a stream.が発生してしまいました。根本的な解決はできなかったのですが、調査した内容や実際にやった対策を書きます。
発生したエラーPrism(WPF)で HttpClient を使って API を呼び出すところで、エラーが発生したりしなかったりする状況でした。(発生条件は不明)
.Net Framework 4.6.1
Visual Studio 2017
123456789101112// コード// 参照:https://dekirukigasuru.com/blog/2020/04/24/csharp-httpclientfactory/// Microsoft DependancyInjectionvar provider = new ServiceCollection().AddHttpClient().BuildServiceProvider ...
Dockerでfirebaseローカル実行ができなかった原因
Docker で構築した開発環境で、firebase のローカル実行ができなった原因を解決したので書いておきます。
TL;DR
Docker で firebase をローカル実行して、ホストから接続するには –host 0.0.0.0 が必要
12# hostオプションがないとホストのブラウザから閲覧不可$ firebase serve --host 0.0.0.0
firebase ローカル実行firabse はローカルで実行する機能があります。いちいちデプロイしてると時間がかかるので、ありがたいですね。
12# ローカルで実行$ firebase serve
ローカル実行したのにつながらない…開発環境は次の記事を参考にして、Docker で構築していました。
[Firebase] Cloud Functions で消耗したくない人のために、開発環境のベストプラクティスをまとめていったら Docker に行き着いた話(随時更新)
で、同じようにfirebase serveでローカル実行したのですが、ホストのブラウザからつながりませんでした。
firebase 起動時 ...
AtCoder Beginner Contest 162
AtCoder Beginner Contest 162に参加したので、学んだことを書いておきます。
問題と結果
問題名
結果
A
Lucky 7
WA:不正解
B
FizzBuzz Sum
AC:正解
C
Sum of gcd of Tuples (Easy)
TLE:実行時間制限超過
D
RGB Triplets
未提出
E
Sum of gcd of Tuples (Hard)
未提出
F
Select Half
未提出
A:Lucky 73 桁の数値に「7」が含まれているかをチェックする問題でした。解けたはずなんですが、最後のテストケースで失敗していて原因はよく分からなかったです。
B:FizzBuzz Sum有名な「FizzBuzz 問題」で、Fizz、Buzz、FizzBuzz いずれでも無い場合の和を求めるという問題でした。単純だったので、これは解けました。
C:Sum of gcd of Tuples (Easy)3 つの変数 a, b, c があります。それぞれを 1 から与えられた数字まで増やしていき、全パターンで 3 つの数字の ...
SQLServerの日付
TL;DR
スラッシュ(/)区切りで日付を設定するときは、シングルクオーテーション(’)で囲む
datetime 型に Insert しようとすると最近、Excel のデータを DB に投入する機会がありました。
単純に Insert 文を書いて入れようとしたのですが、データの種類として文字列や数値、そして日付が混ざっていたので「気をつけないと変に変換されそうだなー」と思っていました。
案の定、次のような SQL を書いて失敗しました。
12-- 日付を入れようとした失敗例INSERT INTO Table_1 VALUES (2020/1/1);
このクエリを実行してもエラーは出ません。でも、実際に設定される値は想定とは異なります。
1234-- 実際に設定される値Datetime---------------------------1905-07-14 00:00:00.000
原因は…想定した「2020/1/1」が設定されなかった原因は、シングルクオーテーション(’)で囲んでいないからですね。
12-- 意図した日付が入る例INSERT INTO Table_1 VAL ...
デブスト2019に行ってきた
デブスト(Developers Boost)2019(11/30開催)に行ってきました。次の2つの講演を聞いてきたので、内容と感想を書きたいと思います。
[A-5]打算的エンジニアの成長戦略~人より得意な部分で勝負する!~
[A-6]組織にモヤっとしたら聞く話
打算的エンジニアの成長戦略~人より得意な部分で勝負する!~
エムスリーキャリア 萩原氏
「打算的=利益を上げ、損失を下げる」に仕事をするために、得意なことで勝負されているそうです。そのために、次の3つのことを考えておられるとのことでした。
場所(業界):自分の得意に価値がある
得意を伸ばす:他人に追いつかれない
得意を増やす:得意の陳腐化を防ぐ
また、転職後にチームになじむためにされたことも、興味深かったです。
チームの価値観を知る:よく使われている言葉から
抱えている課題を把握する:活発なチャットから
上記から、自分の得意を知る
「自分の得意」な部分で勝負できれば、仕事もうまくいくだろうなと思いました。そのための戦略も理解できたので、伸ばしていきたいです。
組織にモヤっとしたら聞く話
IMAGICA Lab. 蜂 ...
Next.jsでBootstrapを使う
ReactのSSRフレームワーク”Next.js”で、Bootstrapを使う方法を書いておきます。
React BootstrapのインストールReact用のBootstrapとして、その名も “React Bootstrap“ がありますので、これを使います。
1npm install react-bootstrap bootstrap
CSSの読み込みReact BootstrapにCSSは入っていないので、別途CSSを適用する必要があります。今回は、通常のBootstrapのものを使うことにします。
Next.jsでCSSファイルを適用するために@zeit/next-cssをインストールします。
1npm install --save @zeit/next-css
次に、CSSファイルを使うためBootstrap自体もインストールします。
1npm install bootstrap --save
準備ができたので、設定ファイルを書き換えとCSSを読み込みます。
123456// next.config.jsconst withCSS = require('@z ...
1TBもあるHyper-V仮想マシンを圧縮した
Hyper-Vの仮想マシンを別のホストへ移行しようとしたのですが、サイズが問題となりました。移行先は800GBほどしか空いてないのに、仮想マシンは1TBもあったので縮小することにしました。
TL;DRHyper-Vの仮想マシンを圧縮するには、
仮想マシンをシャットダウンする
Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly
Optimize-VHD "VHD/VHDXファイルのパス" -Mode QuickまたはFull
Dismount-VHD "VHD/VHDXファイルのパス"
仮想マシンの圧縮仮想マシン全体のサイズの大部分を占めるのが、仮想ディスク(VHD/VHDX)です。これを圧縮するためには「最適化」を行えばOKです。
手順としては、まず、仮想マシンをシャットダウンします。(「停止」は電源を抜く行為に相当するためやめましょう)
次に、仮想ディスクに対してコマンドを実行して最適化を行います。この際、ディスクのパスを指定するため、マシンを右クリックし、設定から確 ...
「わかる!ドメイン駆動設計」を読んだ
最近、「ドメイン駆動設計」(DDD)に興味を持っていろんなサイトや本を読んでいます。
この中で、入門書として紹介されていた「わかる!ドメイン駆動設計」を読んだので、感想を書いてみようと思います。
tl;dr
ドメイン駆動設計の入門書としては分かりやすくて、おすすめ
用語のイメージがつかめる
コードは出てこない
おすすめポイント入門書としておすすめ123DDDを理解する手助けに(すべてを解説するのではなく)入門に必要な知識をわかりやすく、物語を通じて理解できる構成にしました。本書 P.i 「はじめに」より
本書「はじめに」に書かれているとおり、この本はドメイン駆動設計(DDD)の入門書として、おすすめできます。「ユビキタス言語」や「ドメインモデル」といった、DDDを学ぶ上では欠かせない用語の説明が物語形式で書かれており、初心者でも分かりやすいと思います。
一貫した説明でわかりやすい本文では「スマート冷蔵庫用の食材管理アプリ」を題材に、DDDの説明がなされていきます。ブログや解説サイトで断片的にDDDの知識を得ることはできますが、1つのテーマを中心に「DDDではこう考えるんだ」ということ ...
Wake On Lanでつまづいた話
Windows 10でWake On Lan(ネットワークからPCを起動できる機能)を設定しようとして、かなり困りました。最終的には解決できたので、設定方法を書いておきます。
tl;dr
通常、必要な設定
Windows の電源設定
BIOSの設定
それでも起動しないときは
LANポートのドライバを更新する
環境
Windows 10 (1869)
マザーボード: ASRock
LANポート:Intel I217-V
一般的に必要な設定Wake On Lanを有効化するには、一般的に下記2点の設定が必要です。
Windows 10の電源設定Windows 10では、前回終了時のデバイスのイメージを保存しておき、次回起動時に読み込むことで、スタートアップにかかる時間を短縮することができるそうです。
何の関係があるのか分かりませんが、Wake On Lanを使うためにはこれを無効化する必要があるそうです。
BIOSの設定Wake On LanではネットワークからPCを起動させる信号を受け取って、PCを起動させます。そのためには、電源がOFFの状態でもLANポートに電源を供給 ...