IE11 jQueryで外部のテキストを読み込んで表示する方法
実行環境
・Windows Server 2016
・IE11
・IIS10
jQuery 1.12.4 ダウンロード
jQuery 1.12.4 and 2.2.4 Released | Official jQuery Blog
今回はjsファイルをダウンロードして使用しました。
読み込んだテキストを表示するHTML
publish.htm
<!doctype html> <html> <head> <meta charset="utf-8"> <title>sample</title> <script src="jquery-1.12.4.min.js" type="text/javascript"></script> <script> $(function() { $("#txt-text").load("sample.txt"); $("#html-text").load("sample.html"); }); </script> </head> <body> <div id="txt-text"></div> <div id="html-text"></div> </body> </html>
外部ファイル
sample.html
<a href="https://knkomko.hatenablog.com/">html</a>
sample.txt
<a href="https://knkomko.hatenablog.com/">txt</a>
表示の確認
Ubuntu 18.04 LXC SQL Server 定期的な完全バックアップを自動化する方法
はじめに
無料で利用できる SQL Server Express にはエージェントというジョブを定期的に実行するコンポーネントが無いため、別の方法で行う必要があります。
今回は UNIX系のOSにおいて定期的にジョブを実行する cron を使用してバックアップを作成します。
SQL Server のバックアップを作成する際に Transact SQL を使用するため、事前に
sqlcmd (SQL Server コマンドラインツール) のインストールが必要になります。
Ubuntu に SQL Server をインストールする場合はこちら。
knkomko.hatenablog.com
Ubuntu に sqlcmd をインストールする場合はこちら。
knkomko.hatenablog.com
実行環境
・Ubuntu 18.04 LXC
・SQL Server 2019
1. cron プロセスの開始
cron プロセスを開始します。
sudo service cron start
cron プロセスの状態を確認します。
sudo service cron status
プロセスが開始できていると running と表記されます。
2. SQLファイルの作成
例としてemployee データベースの完全バックアップを作成します。
今回は backup.sql としてSQLファイルを作成します。
vim /home/ubuntu/test/backup.sql
以下のクエリでデータベースからemployee.bakという名前でバックアップファイルを作成します。
BACKUP DATABASE [employee] TO DISK = N'/home/ubuntu/test/employee.bak' WITH NOFORMAT, NOINIT, NAME = N'employee-Full Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
3. SHファイルの作成
SQLファイルを実行するSHファイルを作成します。
今回は backup.sh として作成します。
vim /home/ubuntu/test/backup.sh
sqlcmd でSQL Serverに接続をした後に手順2で作成したSQLファイルを実行します。
cronでsqlcmdを実行するには絶対パスで指定する必要がありました。
/home/ubuntu/test/backup.sh
# Execute backup query. /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P Pa$$w0rd -i /home/ubuntu/test/backup.sql # DB backup file name is "employee_YYYYMMdd_HHmmss.bak". mv /home/ubuntu/test/employee.bak /home/ubuntu/test/employee_`date "+%Y%m%d_%H%M%S"`.bak
sqlcmd の絶対パスの確認には which コマンドを使用しました。
which sqlcmd
以下の記事が参考になりました。
qiita.com
4. cron 設定ファイルの作成
ひな型となる cron 設定ファイルをコピーして作成します。
今回は crontestというファイル名にしました。
cron 設定ファイルに拡張子はありません。
sudo /etc/crontab /etc/cron.d/crontest
管理者権限で vim を起動して編集を行います。
sudo vim /etc/cron.d/crontest
初期は以下のような内容だと思います。
/etc/cron.d/crontest
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
今回は毎週、日曜日の午前0時にSHファイルを実行するようにします。
またSHファイルを実行した際の標準出力、標準エラー出力の内容をbackup.logとして作成しています。
00 00 * * MON root /home/ubuntu/test/backup.sh >> /home/ubuntu/test/backup.log 2>&1
定期実行の一文を追記した状態が以下の内容になります。
/etc/cron.d/crontest
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) # 00 00 * * MON root /home/ubuntu/test/backup.sh >> /home/ubuntu/test/backup.log 2>&1
時刻や日付の設定は以下の記事が参考になりました。
nigimitama.hatenablog.jp
ここでは m h dom mon dow user command の書式に注意が必要です。
以下の書式に従わないと cron がエラーとなり実行されませんでした。
[m] \s [h] \t [dom] \s [dom] \s [mon] \s [dow] \t [user] \t [command]
制御文字 \s は半角空白、\t はタブを表しています。
Android LinearLayout ウィジェットを画面中央に配置する
はじめに
Google が「Android」を学べる無償コースを提供しているという記事を読んだので取り組んでみました。
japan.zdnet.com
以下のコースでウィジェットの位置を指定する箇所があるのですが、指定に対して位置がどのように変化しているのか分からなかったので調べてみました。
Android Kotlin の基礎 : 基本的なAndroidプロジェクトの構造
codelabs.developers.google.com
目標の配置
目標としてはTextViewとButtonを中央に縦並びで配置します。
初期の配置
width と height を指定したLinearLayoutを使用すると、左上にテキストとボタンが横並びとなっていました。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/roll_label" /> </LinearLayout>
1. ウィジェットを上下に並べる
LinearLayout の orientation を指定して子要素の並びを変更します。
orientation には vertical と horizon が指定できます。
orientationを指定しない場合の規定値は horizon となるため、初期の位置ではウィジェットが左右に配置されていたようです。
LinearLayout | Android Developers
orientation に vertical を指定してウィジェットを上下に並べます。
android:orientation="vertical"
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/roll_label" /> </LinearLayout>
2. ウィジェットを左右中央に配置する
TextViewとButtonのlayout_gravityは位置を指定する14種類の値がありました。
LinnerLayout の layout_gravity と同じようですが、TextView や Button の layout_gravity の値について説明するドキュメントは見つけることができませんでした。
layout_gravity に center_horizontal を指定して左右中央に配置します。
android:layout_gravity="center_horizontal"
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/roll_label" /> </LinearLayout>
3. ウィジェットを上下中央に配置する
LinearLayout の layout_gravity を使って子要素の位置を指定します。
layout_gravity には位置を指定する14種類の値があります。
規定値は Gravity.Top となっているようです。
LinearLayout.LayoutParams | Android Developers
layout_gravity に center_vertical を指定して上下中央に配置します。
android:layout_gravity="center_vertical"
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center_vertical" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/roll_label" /> </LinearLayout>
Ubuntu 18.04 LXC に SQL Server をインストールする方法
はじめに
UbuntuにSQLServerをインストールする機会があったので、
公式ドキュメントのコマンドを実行する中で発生した問題を解決していきます。
docs.microsoft.com
SQL Server のコマンドラインツールは以下の記事を参考にしてください。
今回と同じ Ubuntu 18.04 LXC にインストールを行った内容になります。
knkomko.hatenablog.com
SQL Server について
SQL Server 2016 からLinuxに対応しています。
SQL Server on Linux のインストール ガイド - SQL Server | Microsoft Docs
メモリ2GBが必要とありますが、Expressエディションを選択した場合は
1インスタンスが1410MBまでしか使用できない制限があります。
Editions and supported features of SQL Server 2019 - SQL Server | Microsoft Docs
1. パブリック リポジトリの GPG キーをインポート
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
上記コマンドを実行するとwgetコマンドとgnupgが必要だとエラーになりました。
まずwgetコマンドをインストールすると権限が無いと拒否されたので
管理者権限で実行すると何事も無くインストールができました。
次はgnupgコマンドをインストールします。
こちらも管理者権限が必要になるので、管理者権限で実行をします。
目的のGPGキーのインポートするコマンドを実行すると無事成功しました。
2. Microsoft Ubuntu リポジトリを登録
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
上記コマンドを実行するとコマンドが無いとエラーになりました。
新たにパッケージをインストールする必要があるようです。
Ubuntu Linuxで、add-apt-repositoryしようとして「コマンドがない」って言われたら - CLOVER🍀
まずは software-properties-common のパッケージをインストールしてから
再びコマンドを実行すると、リポジトリの登録ができました。
3. 次のコマンドを実行して SQL Server をインストール
sudo apt-get update sudo apt-get install -y mssql-server
まずは apt-get update コマンドを実行します。
次に SQL Server のインストールコマンドを実行します。
4. パッケージのインストールが完了したら、mssql-conf setup を実行し、プロンプトに従って SA パスワードを設定し、エディションを選択
sudo /opt/mssql/bin/mssql-conf setup
コマンドを実行するとエディションの一覧が表示されました。
今回はExpressを使用するので 3 を入力してEnterを押します。
ライセンスに同意するので Yes を入力します。
最後に管理者アカウントのパスワードを設定します。
設定が終わるとSQL Serverが自動で起動しました。
5. 構成が完了したら、サービスが実行されていることを確認します。
systemctl status mssql-server --no-pager
コマンドを実行すると running と表記があり、起動している事を確認できました。
6. リモート接続を計画している場合は、必要に応じてファイアウォールで SQL Server の TCP ポート (既定値は 1433) も開きます。
TCPポート1433を開くとManagement Studioから接続を行う事ができました。
Ubuntu 18.04 LXC SQL Server コマンドラインツールをインストールする方法
はじめに
UbuntuにSQLServerコマンドラインツールをインストールする機会があったので、
公式ドキュメントのコマンドを実行する中で発生した問題を解決していきます。
docs.microsoft.com
1. パブリック リポジトリの GPG キーをインポート
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
上記コマンドを実行するとcurlコマンドとgnupgが必要だとエラーになりました。
必要とされたcurlコマンドをインストールすると再びエラーが発生。
どうやらインストールを実行する前にパッケージリストの更新が必要のようです。
Cannot install packages inside docker Ubuntu image - Stack Overflow
そこでパッケージリストの更新を行ってから
再びcurlコマンドのインストールを行うと、今度は問題無く実行できました。
続いてgnupgをインストールする方法を調べるとDockerfileの例を見つけたので
e:gnupg、gnupg2、gnupg1はインストールされていないようですが、この操作にはそのうちの1つが必要です
必要なコマンドだけを実行すると権限が無いと拒否されて実行できませんでした。
こちらは管理者権限でコマンドを実行することによりインストールに無事成功。
本命のGPGキーをインポートするコマンドを実行すると問題無く実行できました。
2. Microsoft Ubuntu リポジトリを登録
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
続いて上記のコマンドを実行します。
3. ソース一覧を更新し、unixODBC 開発者パッケージを使用してインストール コマンドを実行
sudo apt-get update
続いて上記コマンドを実行します。
sudo apt-get install mssql-tools
続いて上記コマンドを実行して今回は最新版のツールをインストールします。
Entity Framework 6 例外の発生原因の調べ方
はじめに
EFを使用してデータベースへInsertを行う際に例外が発生したのですが
原因がすぐに分からなかったので、EFの例外オブジェクトについてまとめます。
例外の発生原因の調べ方
「詳細を表示」のリンクを左クリックして例外オブジェクトの詳細を表示します。
$Exception → EntityValidationErrors → ValidationErrors → [0] ~ [x]
上記オブジェクトの ValidationErrors に例外の原因の数だけ要素が作成されます。
ValidationErrors の2つのプロパティから発生原因を知る事ができます。
① ErrorMessage … エラーの説明
② PropertyName … エラーとなったオブジェクトのフィールド名
Visual Studio 2019 Installer Project で .NET Framework オフライン インストーラ を実行する方法
目次
開発環境
・Windows10 バージョン 1909
・Visual Studio 2019 Community
はじめに
今回は Installer Project から オフラインインストーラを実行してみます。
規定値の場合 .NET Framework はインターネットを介してダウンロードするため、オフラインの場合はオフラインインストーラを実行する必要がありました。
Installer Project の作成方法については以下の記事をご確認ください。
knkomko.hatenablog.com
1. Installer Project 設定の変更
Installer Project を右クリックします。
表示されたメニューから「プロパティ」を左クリックします。r
[prerequisites...]ボタンを左クリックします。
「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」のラジオボタンを左クリックします。
この時、使用する .NET Framework にチェックが入っている事を確認して下さい。
[OK]ボタンを左クリックします。
[OK]ボタンを左クリックします。
2. 不足ファイルの確認
Installer Project を右クリックして「リビルド」を左クリックします。
ビルドエラーの場合は内容を確認します。
.NET Framework のファイルが不足しているという内容が表示されると思います。
今回は"DotNetFX472\NDP472-KB4054530-x86-x64-AllOS-ENU.exe"が必要です。
.NET Framework のバージョンによって名称が変わるので注意してください。
ERROR: [必須コンポーネント] ダイアログ ボックスで [アプリケーションと同じ場所から必須コンポーネントをダウンロードする] を有効にするには、項目 'Microsoft .NET Framework 4.7.2 (x86 および x64)' のファイル 'DotNetFX472\NDP472-KB4054530-x86-x64-AllOS-ENU.exe' をローカル コンピューターにダウンロードする必要があります。詳細については、http://go.microsoft.com/fwlink/?LinkId=616018 を参照してください。
3. 不足ファイルの配置
以下のサイトから不足している .NET Framework をダウンロードします。
dotnet.microsoft.com
今回は .NET Framework 4.7.2 を使用します。
Offline installer と Language packs のファイルをダウンロードします。
今回は日本語の Language packs を使用します。
2つのファイルをダウンロードしました。
・Offline installer : NDP472-KB4054530-x86-x64-AllOS-ENU.exe
・Language packs : ndp472-kb4054530-x86-x64-allos-jpn.exe
以下のフォルダを開きます。
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\
フォルダ名とバージョンの対応は以下の通りです。
今回は 4.7.2 を使用する為 DotNetFX472 を開きます。
DotNetFX472 に Offline installer のファイルをコピーします。
Offline installer : NDP472-KB4054530-x86-x64-AllOS-ENU.exe
DotNetFX472 フォルダ内の ja フォルダを開きます。
ja フォルダに Language packs のファイルをコピーします。
Language packs : ndp472-kb4054530-x86-x64-allos-jpn.exe
4. インストーラの作成
Installer Project を右クリックして「リビルド」を左クリックします。
.NET Framework ファイル不足が原因だったエラーが解消されたと思います。
インストーラを確認すると DotNetFX472 のフォルダが作成されています。
DotNetFX472 のフォルダにはインストーラファイルが入っています。
5. インストーラの実行
オフラインでインストールを行います。
.NET Framework のインストールを行います。
無事 .NET Framework のオフラインインストーラが実行されました。
.NET Framework のインストールが完了すると次はアプリのインストールです。
アプリのインストールが完了して実行できることが確認できました。