無償アップグレード後、Windows 10 の再インストール

無償アップグレード後、Windows 10 の再インストール

テーマ通り、「無償アップグレード後、Windows 10 の再インストール」についての備忘録です。

会社のPCの一台が立ち上がらなくなってしまいました。
どうやらHDDがおかしくなってしまったようです。。。(´;ω;`)ウゥゥ
で、システムファイルが壊れただけかもしれないので、他のPCでHDDのファイル修復を掛けたら直るかもしれないのですが、なんとなく無償アップグレード後のWindows 10 の再インストールを試みようかと思ったので、試してみる次第です。

Windows 10 の再インストールできる条件

実際、無償アップグレードなんのトラブルも無かったので、下調べも何もしてないので、少し調べてみました。
「ハードウェア構成を変えていなければ、Windows 10 の再インストールもできる」と言うものでした。
基本的にインストールはできるけど、ライセンス認証ができるかどうかは、ハードウェア構成次第ってことで、このライセンス認証については、昔から変わらないですね。

ただ、Windows 10への無償アップデートにおける認証は新たな手法が取り入れられているそうです。
アップグレードした時点で、元のOSの認証確認だけでなくハードウェア情報もマイクロソフト側へ登録されているそうです。

マザーボードやLANカードやその他のハードウェア情報をライセンス認証情報と共に登録しておき、再インストールされた際にその情報と照らし合したうえで承認できれば自動でライセンス認証される仕組みです。
で、ハードウェア構成を変えた場合は、十分に承認できるライセンス情報が残っていない可能性もあるわけで、その場合は自動でライセンス認証されません。

正規のWindows 10を購入していれば、ライセンスキーも付属してくるため、自動でライセンス認証さなくても、付いてきたライセンスキーでオンラインで承認できるし、もし、オンラインで承認できなくても電話で承認依頼ができますが、無償アップグレードのライセンスキーではそのような依頼ができないようです。

マザーボードを変えたりするとライセンス認証されないので、マザーボードの故障でPCが使えなくなった場合は、Windows 10 を新たに購入する必要が出てきます。マイクロソフトに事前相談したら何か対応をしてくれる可能性もあるかもですが、わかりません。

Windows 10 の再インストール手順

1)MediaCreationToolsのダウンロード
『Windows 10 ダウンロードサイト(マイクロソフト)』

2)MediaCreationToolsでWindows 10 をダウンロード
MediaCreationToolsを起動し、「別のPCのインストール メディアを作成する(USB フラッシュ ドライブ、DVD、またはISO)」を選択して次に進みます。
随時、説明に従って必要なWindows 10のEditionを、目的のメディアにダウンロードします。
大きなファイルなのでそれなりに時間がかかります。

3)再インストール
目的のPCにダウンロードしたWindows 10を使用してクリーンインストールします。
プロダクトキーの入力ページでは「スキップ」ボタンを選択してください。
ハードウェア構成を変えていなければ、オンラインになったときに、自動でライセンス認証もしてもらえます。

※)不運にも自動でライセンス認証出来なかった場合は、Windows 10を新規に購入する必要が有るようです。
「無償アップグレード版 Windows 10」は、正規のWindows 10と異なるものと考えましょう。

以上、無償アップグレード後、Windows 10 の再インストールの備忘録でした。

Let’s Encryptで無料のSSLを取得する

Let’s Encryptで無料のSSLを取得する

最近のGoogle検索は、WebサイトにSSLが掛かっているかを上位表示の条件にしています。
なのでとりあえず会社のWebサイトくらいはSSLを掛けておこうかと思い、先日から掛けています。

ただSSL証明書発行も無料じゃないし、独自SSLサービスを行っているレンタルサーバも有るのですが、私の契約しているレンタルサーバはそんなサービスもない、格安レンタルサーバなので。。。

そこでLet’s Encryptで無料のSSLを取得することにしました。

更新は2回目なのですが、何かと忘れぽいので、手順の備忘録を残しておきます。
私はスタードメインを利用しているので、スタードメインの管理画面から「Let’s Encrypt SSL証明書」を取得します。

たぶん新規も更新もそう変りない手順かと思いますが、とりあえず更新のみを。
先ずはSSL更新画面を表示します。

SSL更新画面を呼び出す

SSL更新画面を呼び出す


1)メニューから「SSLボックス管理」をクリックします
 右側の画面がSSLの取得証明一覧に更新されます。
 新規の場合は、左側メニューにある新規取得をクリックします。
2)一覧の中のSSLを更新するWebサイトの「更新申込」をクリックします
 画面が「Let’s Encrypt SSL証明書 新規取得」に変わります。
 なぜ、新規取得になるかは。。。不明?
SSL更新 DNS認証を行う

SSL更新 DNS認証を行う


3)Web認証かDNS承認かを選択します。
 私は自由度が低いレンタルサーバのため、DNS承認を選択しています。
4)SSL更新をしたWebサイトのDNSのTXTレコードを更新します
 私の場合は、レンタルサーバのDNSを使っているため、レンタルサーバのDNSの_acme-challenge.xxxxx.xx.xxTXTレコードを更新します。
 DNSの更新はすぐに行われても、既に出回っているTXTレコードは以前前のままなので、しばらく時間を置く必要があります。
 私は、あくまで目安ですがDNS TXTレコード確認をして書き換わっているのを確認してから次の作業に進んでいます。
5)「所有者確認」ボタンをクリックします
 確認が行われ、正常に確認されると「証明書を発行する」にボタンが変わります。
6)「証明書を発行する」ボタンをクリックします
 新しく取得したSSL証明書が表示されます。
 取得したSSL証明書は取得証明書一覧からも確認することができます。

以上、簡単な説明でしたが、Let’s Encryptで無料のSSLを取得するでした。
 

HTML5 Canvusにテキスト表示する

Canvusにテキスト表示する

HTML5から実装されているCanvusにテキスト表示する簡単なプログラム書いて試してみました。
やはり、今更ながらなのですが。。。

この簡単に書いたプログランは、
・背景色を時刻で変える
・日時を表示する
だけの簡単なものです。
テストはChromeとEdgeで行いました。Chromeは毎回確実に動作をしたのですが、Edgeは動かなくなることがありました。
何かいけないことをしているのかも。。。よくわかっていないので、公開するものに使う時はEdgeで十分にテストしてください。
可能ならどうしてEdgeで動かなくなることがあるのかコメントで教えてもらえるとありがたいです。よろしくお願いします。

一読してもらえばおおよその内容がわかると思います。
インターバルで1秒ごとに背景色と日時時刻を書き換えているだけのシンプルなプログラムです。
初期状態のcanvusの状態を保持と初期状態のcanvusの状態を復元はこのプログラムの中では意味はありませんが、複雑なプログラムになってくると便利らしいです。
私もピンと来ていません(イニシャライズ関数を作れば良いような。。。)が、学習した本に載っていたので便利なんだろうと思い、使うようにしています。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>test</title>
<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
	alert("Canvusテスト");

	var cCanvus = null;
	var cContext = null;

	//$('#canvus1').load(function () {
	window.addEventListener("load",function(){
		// id:canvus1が読み込まれた際に実行したい処理
		cCanvus = document.getElementById("canvus1");
		cContext = cCanvus.getContext("2d");
		setInterval(drawCunvas, 1000);
	});

	function drawCunvas() {
		//cContextをクリア
		cContext.clearRect(0, 0, 300, 250);
		//現在時刻を取得
		var t = new Date();
		//背景の描画
		drawBackGround(t);
		//日時を描画
		drowDateTime(t);
		
	}

	function drawBackGround(t) {
		//初期状態のcanvusの状態を保持
		cContext.save();

		//時刻によって背景色を変える
		var h = t.getHours();
		if (h > 6 && h < 18) {
			cContext.fillStyle = "#aaa";
		} else {
			cContext.fillStyle = "#333";
		}
		//背景を塗りつぶす
		cContext.fillRect(0, 0, 300, 250);

		//初期状態のcanvusの状態を復元
		cContext.restore();
	}

	function drowDateTime(t) {
		//初期状態のcanvusの状態を保持
		cContext.save();

		//日付の文字列を作成
		var tDate = (t.getYear() + 1900).toString() + "年" + (t.getMonth() + 1).toString() + "月" + (t.getDate()).toString() + "日(" + ["日", "月", "火", "水", "木", "金", "土"][t.getDay()] + ")";



		//時刻の文字列を作成
		var tTime = (t.getHours()).toString() + "時" + (t.getMinutes()).toString() + "分" + (t.getSeconds()).toString() + "秒";

		//日時を描画
		cContext.font = "18px";
		cContext.fillText(tDate, 100, 210);
		cContext.fillText(tTime, 100, 230);

		//初期状態のcanvusの状態を復元
		cContext.restore();
	}

});
</script>
<style type="text/css">

</style>
</head>
<body>


<form>
 <div>
 Canvusテスト
 </div>
 <fieldset>
  <LEGEND></LEGEND>
	<canvas id="canvus1" width="300" height="250"></canvas>
 </fieldset>

 <p><button type='submit'>送信</button></p>
</form>
</body>
</html>

以上、「HTML5 Canvusにテキスト表示する」の簡単なサンプルテストでした。

HTML5 数値を選択する入力フィールド

数値を選択する入力フィールド

HTML5から実装されているHTML5 数値を選択する入力フィールドを試してみました。
やはり、今更ながらなのですが。。。

もともと必要ならリストやスライダー等とjavascriptを使って自前で組み込んでいたのですが、どの程度使えるのかと思って。
簡単に数値選択が可能なので、アンケート等で使用するならこれで十分な気がします。
下に試したHTMLを貼っておくので試してみては如何でしょうか?
ちなみに、ブラウザによって微妙な違いが出るかもしれませんので、そのあたりのチェックもした方が良いと思われます。

下のHTMLはtype=’renge’を使って単純な数値を選択する入力フィールド2つを試しています。
バーを移動させるごとに数値を取得して表示しています。
送信ボタンをクリックすると送信されてクリアされます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;" />
<title>test</title>
<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
  alert("テスト開始!数値を選択する入力フィールドのチェックHTMLです");

  $("#range1").change(function() {
    //値が変更されたときの処理
    $("#disp1").val($("#range1").val());
  });

  $("#range2").change(function() {
    //値が変更されたときの処理
    $("#disp2").val($("#range2").val());
  });
});
</script>
<style type="text/css">

</style>
</head>
<body>

<form>
 <div>
 テスト
 </div>
 <fieldset>
  <LEGEND></LEGEND>
  <label>デフォルトの場合、min属性の初期値は0、max属性の初期値は100となります。 また、step属性の初期値は1となります</label>
 <p><label>少ない<input type='range' id='range1'>多い</label><input type='text' id='disp1'></p>

 <label></label>
 </fieldset>

 <fieldset>
  <LEGEND></LEGEND>
  <label>min属性の初期値は1、max属性の初期値は5となります。 また、step属性1とした場合</label>
 <p><label>悪い<input type='range' id='range2' min='1' max='5' step='1'>良い</label><input type='text' id='disp2'></p>

 <label></label>
 </fieldset>

 <p><button type='submit'>送信</button></p>
</form>

</body>
</html>

以上、「HTML5 数値を選択する入力フィールド」の簡単なチェックでした。

HTML5 数値の入力フィールド バリデーションチェック

HTML5 数値の入力フィールド バリデーションチェック

HTML5から実装されているHTML5 数値の入力フィールドのバリデーションチェックを試してみました。
今更ながらなのですが。。。

もともと必要ならjavascriptを使って自前で組み込んでいたのですが、どの程度使えるのかと思って。
簡単な入力チェックならこれで十分な気がします。
下に試したHTMLを貼っておくので試してみては如何でしょうか?
ちなみに、ブラウザによって微妙な違いが出るかもしれませんので、そのあたりのチェックもした方が良いと思われます。

下のHTMLは単純な数値の入力フィールド、小数点の数値の入力フィールド、範囲を指定した数値の入力フィールドの3つを試しています。
送信ボタンをクリックするとバリデーションチェックが行われ、問題が有ればメッセージが表示されます。
問題がなければ送信されてクリアされます。

なので、入力中にチェックをしたいのならこのバリデーションチェックを使うことができません。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;" />
<title>test</title>
<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
  alert("テスト開始!入力フィールドに数値以外が入るとバリデーションチェックが入ります。");
});
</script>
<style type="text/css">

</style>
</head>
<body>

<form>
 <div>
 テスト
 </div>
 <fieldset>
  <LEGEND>数値の入力フィールド</LEGEND>
  <label></label>
 <p><label><input type='number' name='number'></label></p>

 <label></label>
 </fieldset>

 <fieldset>
  <LEGEND>小数点の数値の入力フィールド</LEGEND>
  <label></label>
 <p><label><input type='number' name='number1' step='0.1'></label></p>

 <label></label>
 </fieldset>

 <fieldset>
  <LEGEND>範囲を指定した数値の入力フィールド</LEGEND>
  <label>1~99まで</label>
 <p><label><input type='number' name='number1' min='1' max='99'></label></p>

 <label></label>
 </fieldset>

 <p><button type='submit'>送信</button></p>
</form>

</body>
</html>

以上、「HTML5 数値の入力フィールド バリデーションチェック」の簡単なチェックでした。

SQL SERVER 日付の加算、減算

SQL SERVER

日付の加算、減算

SQL Serverは、DATEADD関数を使って日付型の値に日時を加算、減算する事ができます。

構文:DATEADD(element, value, target)

elementには日付要素を記述します。
日付要素は以下のようなものがあります。
year(yy or yyyy) : 年
quarter(qq or q) : 四半期
month(mm or m) : 月
dayofyear(dy or y) : 年始からの日数
day(dd, d) : 日
week(wk, w) : 週
weekday(dw) : 曜日
hour(hh) : 時
minute(mi or n) : 分
second(ss) : 秒
millisecond(ms, s) : ミリ秒

valueには加算、減算した値を設定します。
targetには、基準となる日付型の値を設定します。

日付の加算

日の加算をしたい場合は、elementに「day」、valueに「加算したい日数」、targetに基準日を設定します。

例えば、現在から5日後の日付が欲しい場合は、
DATEADD(day, 5, getdate())
で取得できます。

例えば、現在から12時間後の日付が欲しい場合は、
DATEADD(hour, 12, getdate())
で取得できます。

日付の減算

日の減算をしたい場合は、elementに「day」、valueに「減算したい日数」、targetに基準日を設定します。
減算したい日数は、マイナスで指定します。
1日前なら-1、2日前なら-2

例えば、現在から5日前の日付が欲しい場合は、
DATEADD(day, -5, getdate())
で取得できます。

例えば、現在から12時間前の日付が欲しい場合は、
DATEADD(hour, -12, getdate())
で取得できます。

上の説明でほぼ理解できたと思いますが、一応例を載せておきます。

declare @d datetime
declare @d2 datetime
declare @d3 datetime
declare @d4 datetime

print '現在時刻をセット'
set @d=getdate()
print @d
print ''

print '10時間後を指定'
set @d2=dateadd(hour,10,@d)
print @d2
print ''

print '10日時間を指定'
set @d2=dateadd(hour,-10,@d)
print @d2
print ''

print '10日後を指定'
set @d2=dateadd(day,10,@d)
print @d2
print ''

print '10日前を指定'
set @d2=dateadd(day,-10,@d)
print @d2
print ''

print '簡易な計算方法----------'
print '10日後を指定'
set @d3=@d+10
print @d3
print ''

print '10日前を指定'
set @d3=@d-10
print @d3
print ''

print '簡易な計算方法で少数点を使うと----------'
print '0.001日後を指定'
set @d4=@d+0.001
print @d4
print @d4-@d
print convert(nvarchar(36), @d4-@d,21)
declare @dec decimal(11,6)
set @dec=3600*24/1000
print @dec/60

上の例の中に簡易な計算方法も載せておきました。
基本は日単位の計算なので単純な加算、減算なら+10とか-10で計算してくれます。
また、12時間とか6時間という切りの良い時間なら、0.5や0.25と言った指定でできます。

この辺りは好みもありますが、ちゃんとDATEADDを使った方が面倒にならない気もします。
以上、SQL SERVER 日付の加算、減算の開発備忘録でした。

UTF-8 と UTF-8N

UTF-8 と UTF-8N

Webアプリケーションの仕事をしていると、たまにUTF-8でファイルを保存しないといけない時があります。
今の多くのエディタは保存する際に「文字コードの指定」ができるようになっていて助かります。
以前は、Visual stdio を立ち上げて保存したものです。

で、保存使用する際、UTF-8 と UTF-8Nが選べるエディタも有れば、選べないエディタもあることに気が付きました。
結果はご存知の通りBOMを付けるか付けないかの指定方法が違うだけなんですけね。
これって知らない人にはわかりづらいですね。

BOMって?

ちなみにBOMっていうのは、Byte Order Mark のことで、「テキストファイルの文字コードがUTF-8です」とファイルの頭に付けたマークのことです。

BOMが付くか付かないかだけなので、UTF-8 と UTF-8N の文字コードは全く同じUTF-8です。
違いはありません。

Nが付かないファイルは、BOMあり。
Nが付くファイルは、BOMなし。
ってことです。

UTF-8 と UTF-8N?

現在は、基本的にBOMなしで問題ないと思います。
なので、UTF-8Nを選択します。
で、UTF-8 と UTF-8Nが選べないエディタは、たぶんファイル名を記述する横くらいにBOMの扱いをどうするかの指定があると思います。

しかし、付けるように指定が有ったり、読み込み時に問題が出るようならBOM付けて試してみるのも手です。
現在はBOMなしが主流ですが、古いシステムはBOMあり指定もあるかもなので。

以上、UTF-8文字コードでファイルを保存したときにふと思ったので。。。

IX Web Hosting SSLを設定する(更新)

IX Web Hosting SSLを設定する(更新)

Let’s Encryptからもらえる無料のSSL証明書を使い、独自ドメインのSSLを設定したのでその更新時期が来たので更新の開発備忘録です。

まず、IX Web HostingのHome画面から「Web Options」を選択します。

IX Web Hosting SSL設定 home画面

IX Web Hosting SSL設定 home画面

次に、「Select domain to configure hosting parameters」リストが表示されるので、SSLを設定したいドメインもしくはサブドメインを選択します。

IXWebhostingSSL設定 Select domain to configure hosting parameters

IXWebhostingSSL設定
Select domain to configure hosting parameters

次に、「Web Service」設定画面が表示されるので、「SSL Support」項目の「Editアイコン」を選択します。

SSL更新-WebService設定

SSL更新-WebService設定

次に、「Edit SLL」画面が表示されます。

SSL更新

SSL更新

次に、予め入手しておいたSSL Certificate(CERT/SSL証明書)とSSL証明書の秘密鍵(SSL Server Private Key)をコピーして貼り付け、「submit」送信します。
Let’s Encryptで無料のSSLを取得する

正常に処理されると、ひとつ前の「Web Service」設定画面に戻ります。
エラーが出た場合はコピーミスかコピーした情報に間違いが有ると思われるので、エラーメッセージを確認してみてください。
正常に処理されると、下のようになります。

IXWebhostingSSL設定-SSL設定後

IXWebhostingSSL設定-SSL設定後

これで、https://でアクセスすると保護された通信になります。
ただ、今でも「Edit」で「Force SSL Connection」にしても全てがHttps://になりません。
課題が残っていますが、とりあえず更新できたのでこれで良しとします。

以上、IX Web Hosting SSLを設定する(更新)の開発備忘録でした。

HTML5のDOCTYPE宣言

HTML5のDOCTYPE

HTML5のDOCTYPE は非常にシンプルです。

<!DOCTYPE html>

DOCTYPE宣言とは

DOCTYPE宣言とは「Document Type Definition」(DTD)のことで、日本語に訳すと「文書型宣言」となります。
ブラウザに対しどのバージョンのHTMLやXHTMLで書かれているかを宣言しています。
HTML文書の先頭に書く必要があります。

DOCTYPE宣言をブラウザに示すことで、文書を解析するパーサが文書型宣言に指定されたDTDを参照することで、ブラウザが規則に従った妥当な文書か否かを検証することができます。
また、一部のブラウザ(HTMLレンダリングエンジン)は「DOCTYPEスイッチ」と呼ばれる機能を有しています。
これはMIMEタイプとしてtext/htmlを与えられた文書に書かれた文書型宣言の内容によってレンダリングを「標準モード」や「互換モード(Quirksモード)」というように切り替えるユーザに見えやすくすることができます。

DOCTYPE宣言をすると

DOCTYPE宣言をすることで、ブラウザはどのバージョンのHTMLやXHTMLで書かれているかがわかります。
HTML5で書かれている旨宣言をすると、文書型宣言はもはやモード指定以外の意味をなさなくなります。
すなわちHTML5における文書型宣言は、レンダリングを「標準モード」へ切り替えるためだけの、「ほとんど役に立たないが、それでも必要な」ヘッダという役割を担います。

たいした意味はなくなりましたが、それで宣言は必須です。
必ずDOCTYPE宣言を書くようにしましょう。

020番号帯

020番号帯

020番号帯は、2017年1月1日に施行された「電気通信番号規則等の一部を改正する省令」によって新設された「M2Mサービス専用の電話番号」のこと。

M2Mとは「machine to machine (マシン ツー マシン)」の略で電子機器などの機械同士の通信を示しています。

この総務省の発表を受け、大手携帯会社は2017年10月以降に順次020番号を提供すると発表しました。
この背景には、090/080番号帯はすでに枯渇し、その後に割り当てられた070番号帯もそのうち無くなってしまうと言う予測が有るからです。

既にM2Mで繋がっている機器が存在していますし、これからも増える一方です。
人が使用するよりも独立した機械が通信機能を持つことの方が遥かに使用頻度が高くなってくることが予想されます。

家庭内の電子機器は、家に固定電話が有れば家の電話回線からインターネットに繋ぐことができます。
しかし電話回線を持たない家庭も増えてきています。
そんな時はポケットWifiのような機器を家に置くことになりますが、今までは090/080/070を使っていたものが020を使うようになります。
また、独立した機器といえば自動車がすぐに思い浮かびます。
自動車への搭載も020番号帯が使用されるようになります。

020番号帯は、普通の番号と同じように使用できますが、M2M専用にすることで現在の11桁から2桁増やして13桁として使用されることが(今後どうなるかわかりませんが)予定されています。その方が遥かに番号数を確保できるので。

020番号帯の通信費がどうなるかわかりませんが、安くなるといろいろ助かります。
ふと思ったことでした。。。