Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

Windows10でデータを残しながらシステム修復(OS上書きインストール)する方法

ついこないだWindows10で自動修復がループする自体におちいりました。

原因はあまり心当たりがないのですが、突然起きたのでかなりテンパりました。
藁にもすがる思いでいろいろググっていろいろ試しました。
原因によって対応方法は異なると思いますが、今後のために失敗した手順と一番よいと思った手順を以下に記しておきます。

ちなみに今回のエラーは「CRITICAL_SERVICE_FAILED」でした。

失敗したシステム修復手順

まずは失敗した手順です。 各々の詳細な手順はググればいくらでも出てくるので割愛します。

セーフモードで起動

セーフモードで起動したら直前にインストールしたアプリ、ドライバとか消せば復活することはしばしばありますが、今回は起動しませんでした。
それに直前にアプリやドライバをインストールしていなかったので起動したとしても何すればよかったのか。

回復オプションでシステム復元を選択

そもそもシステム復元ポイントの設定をしていませんでした。。

回復オプションのスタートアップ修復を選択

Windows10にはスタートアップ修復という便利でドンピシャな機能があります。ただこれでは修復されませんでした。
複数回実行すると効果があると記載があったので実行したけど修復されませんでした。

回復オプションでコマンドプロンプトを開いて「sfc /scannow」を実行

よくこれで修復されると記載されていましたが、これでは修復されませんでした。

回復オプションでコマンドプロンプトを開いて「bootrec /fixboot」を実行

あとあとこれを行ったのが一番まずかったです。これを実行したことでリカバリパーティションWindowsから認識されなくなりました。(データは残っている)
よく意味を理解せずやってしまうと危険なので注意ください。

回復オプションでコマンドプロンプトを開いて「notepad」を実行

Cドライブのファイルをバックアップとるため、外付けHDDに接続した状態で起動し、notepadを開いてファイルの選択ダイアログで右クリックメニューを使って別のドライブにフォルダやファイルのコピーができます。
xcopyより手軽でこれは便利です。

リカバリパーティションから復元

もうリカバリするかと諦めて回復オプションで「PC を初期状態に戻す」を選択しようと思ったら出てこなくなりました。
おそらくですが直前の「bootrec /fixboot」を実行したのがいけなかったのかと思います。

起動オプションで「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」を選択

もうどうすればといろいろ悩んだときにだめもとで起動オプションを選択してみたら思いのほかあっさり起動できて拍子抜けしました。

final.hateblo.jp

とりあえず起動できるようになりましたが、毎回「ドライバー署名の強制を無効にする」を選択にしないと起動できないのは不便すぎます。
そこで設定の回復メニューからPCを初期状態に戻すを選択しましたが、やはりリカバリパーティションが認識されずに途中でエラー。

で、ここまでが失敗した手順です。

成功したシステム修復手順

以下から僕が一番いいと思った手順です。 なんか不調だけどWindowsが起動できるときは一番リスクが少ない修復手順と思います。

Windows 10 Media Creation Toolをダウンロード

以下のURLにアクセスして、「ツールを今すぐダウンロード」を実行して、MediaCreationTool.exeをゲットします。

Windows 10 のダウンロード

Windows 10 Media Creation ToolでOSを上書きインストール

ダウンロードしたMediaCreationTool.exeを実行します。
「このPCを今すぐアップグレードする」を選択します。
そうです、Media Creation Toolなのにメディアを作らなくてもいいんです。

重要なのは途中で個人用ファイルとアプリを引き継ぐを必ず選択してください。

ウィザード形式なのでポチポチしていけばできます。

心配な方は以下に手順がまとめられているので参考にしてください。

Windows 10 を上書きインストールする方法 - ぼくんちのTV 別館

アプリやデータを一つも失うことなく、これで無事にシステム修復ができました。

ということでWindows10がおかしくなったときは、いろいろと修復しようとせず、
Windowsの起動ができる場合はMedia Creation Toolを使用して
Windowsの上書きインストールをおすすめします。
アプリとデータの引き継ぎが可能なので失うものはありません。

言うまでもないですが、ハードの問題のときはこの手順はまったく使えないのでご注意を。

Windows10が通常起動しなくなった場合でも「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」で起動できることがある。

ついこないだWindows10が突然起動しなくなりました。

原因不明でいろいろとググりにググりまくっていろいろと調べてありとあらゆる修復方法を試みましたが、
修復できなかったときにふと以下の起動オプションを実行することで起動できることがありました。

これはググったときに載ってなかったので、記しておきます。

ちなみに僕が発生したときのエラーは「CRITICAL_SERVICE_FAILED」でした。

セーフモードで起動しようとしたときに並列に以下のオプションがあると思います。どちらかを選択して起動するか確かめてください。
Windows10が起動しなくなったときにいろんなリカバリをしていてその後の状態によってどっちで起動するかは異なりました。

「ドライバー署名の強制を無効にする」

「起動時マルウェア対策を無効にする」

詳細な手順は以下のページを確認してください。

Windows10/8.1をセーフモードで起動する方法とセーフモードでPCを復旧する方法 - ぼくんちのTV 別館

原因によっては起動できないこともあると思いますが、「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」のどちらかを選択することでいとも簡単に起動することができました。

再起動するとまた自動修復になって起動しなくなるので起動オプションで同じものを選択すればまた起動します。

この起動プションを選択することでみなさんのWindowsが起動できることを祈っています。

SQL Serverでselectした結果のデータをinsert文としてSQLでエクスポートする方法。

SQLでselectしたデータをinsert文として出力したいときがあると思います。
初期データとしていれたデータを構築時にSQL流すだけで構築できるようにしたい場合とかです。

OracleSQL Developerの感覚でManagement Studioでエクスポートしようとしたらできないところから始まりました。
Oracleだと結果をエクスポートって簡単にできます。結果のグリッドでエクスポートを選んでクリップボードにinsert文を出力するとか朝飯前です。

そんな感じでOracleに慣れていたのでManagement Studioで結果のグリッドを選んでもファイル出力しかできません。

そこで調べるとManagement Studioにはスクリプトの生成という機能があり、テーブルからinsert文を生成してくれるというドンピシャな機能がありました。
これだ!と思いウィザードを進めると条件を入力するところがありません。。

そうです。テーブルの全データしか出力できないんです。
大は小を兼ねるということでこれで事足りるときもありますが、一部データを出力したいときもありますがな。

これはどうすっかなーと小一時間考えて思いつきました。
一時的にテーブルに作るしかないと。
幸いSQLとは便利なものでintoを使うと簡単にテーブルを作れます。
以下のような感じのSQLで。

select *
into temp_hogehoge
from hogehoge
where col = 'xxxx'

で、この一時的なテーブルをManagement Studioでスクリプト生成すれば完成です。
ちなみに詳細設定でデータのみにすることを忘れずに。
クリップボードにも出せます。

まとめると、SQLServerでselectした結果のデータをinsert文としてSQLでエクスポートしたい場合は、select intoで一時テーブルを作ってスクリプト生成するべし。

ちなみにこの方法はSQL Server 2008*1での話なので、最新バージョンではOracleみたいにできるようになっているかもしれません。いや、きっとできるはず。

この方法を思いつくのに意外と時間かかったので忘れないように記録しておきます。

*1:なんでこんな10年前ほどのバージョンを使っているかというと顧客指定だからです

SQL ServerにCSVファイル or Excelファイルからデータをインポートする際に注意(NOT NULLと改行)すること。

SQL Serverで開発システムの場合、テスト環境を構築する際に手っ取り早くデータをいれるときはManagement Studioのデータインポート機能を使うと思います。

そこで久々に使ったんですけど、ちょっとはまったので今後も忘れないように記録しておきます。

たいていは設計時にねたをExcelにまとめていると思うのでそこからデータインポートすると思います。

その際、Excelをそのまま入れるかCSV(フラットファイル)にして入れるかでそれぞれ注意するべきところが違うことが分かりました。

Excelファイルをインポート

NOT NULLの項目にはそのまま入らない。

varcharなどでNOT NULL制約があるカラムに対してExcelのセルが空欄のままだとNULLをいれるようとしてこけます。
この場合、空欄セルにデータで使われていない文字(★など)をいれといて入れた後にupdateで空文字にしましょう。
以下のようなSQLです。

update hogehoge
set col = ''
where col = '★'
セルに改行があるとそのまま入らない。

セル内に改行があると失敗します。 この場合、Excelで改行をまずデータで使われていない文字(■など)に置換して入れた後に改行に置換します。
Excelの改行コードは置換のときにCtrl+Jキーを押すと入力できます。見えませんけど。
以下のようなSQLです。

update hogehoge
set col = replace(col, '■', CHAR(13) + CHAR(10))
CSVに比べてエラーメッセージが不親切

な気がします。なのでエラーメッセージが何を言っているかわからない場合はCSVインポートに切り替えてみるのも一つの手です。
CSVでもそれほど親切なエラーメッセージはでませんが。

CSVファイルをインポート

セルに改行があるとそのまま入らない。

CSVでもこれは同じです。

50文字以上ある場合そのまま入らない。

1項目が50文字以上あるはCSV取り込み時の詳細設定で文字数を変更する必要があります。
なぜかデフォルトすべて50になってました。
これに気付かずにテーブルより桁数が少ないのに切り捨てましたみたいなエラーがでてはまりました。

まとめ

上記のような感じなのでおすすめは50文字以上のデータがあるテーブルはExcelで、それ以外はCSVで試して最終的にだめならCSVでエラーをつぶす。ですがね。

ちなみにこれはSQL Server 2008*1の場合ですので最近のバージョンだと違うかもしれません。というか改善されていてほしい。

*1:なんでこんな10年前ほどのバージョンを使っているかというと顧客指定だからです

JenkinsでビルドしてCheckstyleでエラーになることがあることを初めて知った日。

Javaで開発していてJenkinsでビルドを自動化している環境ならついでにCheckstyleで静的解析でもしておくかーみたいな感じで、 ついてくると思います。

仕事で提供されたJenkinsの環境もその一つでした。

で、いままでJenkinsのビルドが通っていたのにあるプルリクエストをマージしてから失敗するようになりました。

原因を見るとCheckstyleのところでfailとでている。

Checkstyleでfail???

僕みたいなにわかJava使いはCheckstyleは静的解析して警告だけ出してくれるものと思ってたのでこのエラーは意味不明でした。

これを機に調べるとCheckstyleもレベルがあって"error"と"warning"と"info"があるみたいですね。
Javaのプロジェクト結構やってますが、初めて知りました。

だいたいCheckstyleの定義ファイルは上から降ってきますからね。新規開発でも過去のを流用したり。
定義ファイルまで書けるようになる必要はないでしょう。

なので僕みたいにCheckstyleをなんとなく使っているひとはCheckstyleにはレベルがあり、CIでエラーにすることもできる。とだけ覚えておきましょう。

ちなみに今回の件は、JavaでよくやりがちなStringを==比較しているのがerrorレベルでした。修正したら通るようになりました。
僕がコーディングしたわけではないですが、.NETerはやっちゃいますよね。気持ちはわかります。

SourceTree v1.9以降のバージョンをアカウント登録せずに使用する方法。

会社でGitを使ったプロジェクトをやっており、慣れ親しんだSourceTree(v1.9.6)をいれるかーと思って、インストールして起動し、ウィザードを進めていくと以下の画面が出現。

f:id:finalstream:20161016180457p:plain

家だったら自分のアカウントでログインするけど客先のネットワークだし、変にログインはしないでおこうと思ってスキップを探すけどスキップするところがない。どっちのボタンを押しても先に進めない。

あーウィザードを閉じればいいのかと思って閉じるとSourceTreeが起動しない。

もしや…と思って調べてみるとv1.8.2あたりで登録が必須となったらしい。

回避方法としてライセンスファイルみたいなのをどこかに配置すればできるっぽいって書いてあったけど、客先のネットワークにファイルを持ってくるのが面倒なのでパス。
昔使ってたv1.4とかはまったくそんな必要なかったのになー。

じゃあ、旧バージョンでも使うかということで公式サイトを探すけど、ダウンロードできるようなところがない。

怪しいサイトには旧バージョンがあるけど、会社(しかも客先)のマシンにいれてウイルスでも検出されたら大惨事になるので、とても怖くてできない。

ググって以下の記事内にダウンロード先を発見した。

answers.atlassian.com

URLを見るとAtlassianのサーバっぽいので安全みたい。

というわけで、SourceTree v1.9以降のバージョンをアカウント登録せずに使用する方法はないので、旧バージョン(v1.7.0)を使用するしかないです。

旧バージョンで一番新しそうなv1.7.0のダウンロードは以下からできますが、そのうち消えるリスクもあるので客先ネットワーク、オフライン環境等で使用する予定のある方はダウンロードしておいたほうがいいかも。

https://downloads.atlassian.com/software/sourcetree/windows/SourceTreeSetup_1.7.0.32509.exe

v1.7.0は最新版とはインタフェースは異なるものの主要な操作はできるのでまったくもって問題ないです。そしてそんなに古くないです。(2015年くらいやと思う)

2016/11/26 追記

しばらくそのまま使えてたんですけど、30日を過ぎたあたりで使用を続けるには登録してくださいというようなメッセージが表示されて使えなくなりました。
なので上記の方法で使えるのは30日間限定になります。
その後は別の環境でAttlassianにログインして「New SourceTree License」をクリックしてライセンスファイルをダウンロードして、インポートすることで実行する環境ではログインせずに継続して使えるようになりました。

PCをシャットダウンしてもUSB HDDの電源がOFFにならない場合、OFFにする方法。

最近、PCを買い替えてしばらく普通に使っていたんですけど、ある異変に気付きました。

PCの電源を落としてもHDDのランプがついたままなのです。回転もしてるみたいです。

なんで?

調べてみると最近のパソコンはPCの電源が入ってない時でも、スマホとか充電できるように常にUSBに給電している仕様になっているみたいです。

まー場合によってはありがたいときもあるかもしれないけど、そんな機能使わないひと、知らないひとには電気代が無駄にかかる余計な仕様になったんですね。としか思えません。

で、このPCがついていないときもUSBに給電し続けるありがた迷惑な機能はOFFにすることができます。*1

PCがついていないときに動くものなので、Windowsの設定ではどうしようもできません。
ではどこにあるのかというと、BIOSにあるのです。

僕が持っているPC(ASUSマザーボード自作PCとHPのノート)はどちらも設定できました。

マザーボードやPCメーカーによってBIOSの起動方法や設定方法は違うので詳しくは各マニュアルなどを見ることをおすすめします。

以下にASUSマザーとHPのノートの設定方法を記載します。同じメーカーでもモデルによって違うかもしれませんので参考にしてください。

Mother/PC BIOS起動方法 BIOS設定 OFFとなる設定値
ASUS(Z170) DELキー Advanced > APM Configuration > ErP Ready 有効(S4+S5)*2
HP(Spectre13) ESCキー連打 > F10 SystemConfiguration > USB Charging Disabled


今回のまとめですが、PCをシャットダウンしてもUSBに給電し続けるありがた迷惑な機能はBIOSの設定でOFFにすることができるので困っているかたは試してみてください。

*1:できないPCもあるかもしれません。

*2:S4は休止状態、S5はシャットダウン状態を表します。