インドネギヤ王国情報技術開発局 (original) (raw)
この広告は、90日以上更新していないブログに表示しています。
はじめに
- 現在使用中のメインマシン(自作PC)が非常に遅い。
- 自作してから約5年だが、半導体価格高騰など諸々の事情で新規組み立てはせず、部品交換でなんとかしようと思いました。
- そもそもの動作が重い最大の原因は、ストレージであることは明白でした。
- タスクマネージャーでモニタすると、症状発現中のシステムドライブの使用率はほぼ100%。
- WindowsUpdateやセキュリティツールのスキャン及び更新、クラウドツールの同期及び更新、ブラウザの同期など各種でシステムドライブの使用率が100%になる。
- OS起動に30~60分。
- 設定であれこれ調整するのは煩雑で下手したら不毛。
- したがって、今回はストレージ交換で高速化を試みます。
マシン情報
- OS:Windows 10 pro (21H2)
- CPU:Intel Core i7-6700
- RAM:24GB(8GBx2、4GBx2)
- ストレージ:HDD 7200rpm 1TB SATA(うちシステムドライブ:500GB)
- GPU:Nvidia GeForce GTX1050ti
- MB:ASUS H170-pro
ストレージがHDDなので、SATA3の理論上限値6Gbpsで7200rpmであることが最大のボトルネックと思います。
単にSATA3のSSDに交換するだけでも3倍以上の高速化が見込めそうでしたが、 今回は台湾?のTeam製SSD(M.2 NVMe)1TBがほぼ1万円で購入できたので、これを使用します。
M.2(NVMe)はSATA3の5~10倍の高速になるそうで、同じ容量のSATA SSDとほとんど価格差が同じか数千円だったのでM.2(NVMe)を選びました。
この耳慣れないM.2というのは、マザーボード上のインターフェース規格らしく耳慣れた名称としてはPCIeなど含めモバイル用途の規格だそうです。
またNVMeは接続方式のことらしいです。自分もよくわかりませんので正確かつ詳細は別途確認してみてください。
商品ページを見ても、M.2=NVMeのSSDであるという認識でも間違いはないと思いますが、厳密には両者は全く異なる規格なので注意です。
つまり、M.2(SATA)とM.2(NVMe)という2種の製品が存在するようです。
たぶんSATA→PCIeへの変換ボードなんかはこういう状態になると思います。
したがってM.2にしたからといって、爆速にならない場合はここを見落としていると思います。あと、世代を表すGen 3やGen 4だったり、ピンの数なども確認してみてください。
交換作業
交換後のセットアップを省略できるクローニングも考えましたが、適当なクローニングツールがなかったのと、大雑把でめんどくさがりな筆者が5年も使っていれば設定とかごちゃごちゃになってるのでこの際まっさらにしていきます。
したがって、作業はクリーンインストールの手順となります。
※マザーボードがM.2に対応していることを確認してから作業しましょう。
データや設定のバックアップ
- 必要なデータや設定情報は予め別のHDDやメモ書きなどにバックアップしておきましょう。
- 今どきは、アプリによっては設定情報も含めてクラウドバックアップできるので便利です。
- ストレージ交換だから、あとで吸い上げるからいいやーって場合は省略してもいいですが…
クリーンインストールツールの準備
MS公式ページからツールをダウンロードしておきます。
「ツールを今すぐダウンロード」をクリックするとダウンロードが始まります。
インストールメディアの作成
任意の場所にダウンロードしたら、起動します。
USBとISOの2種類から選べます。
今回は適当なUSB(8GB以上)がなくBD-Rが余っていたので、以下の手順ではBD-R作成を行います。
「同意する」を押します。
「別のPCのインストールメディアを作成する」を選択し、「次へ」を押します。
「このPCにおすすめのオプションを使う」にチェックを入れたままで、「次へ」を押します。
※チェックを外すと、言語やエディション等を変更できます。
「ISOファイル」を選択し、「次へ」を押します。
ISOの保存先選択のダイアログが出てくるので、任意の場所に保存します。
「DVD書き込み用ドライブを開く」を押します。
特に何もWindowsの設定をいじっていなければ、Windows10標準「DVDディスクイメージ書き込みツール」が起動します。
空のDVDやBD等を入れて、「書き込み用ドライブ」を確認します。
また、「ディスクイメージファイル」が先程保存したISOファイルであることも確認します。
正しく選択されているのを確認できれば、「書き込み」を押します。
書き込みが完了したら、「閉じる」を押します。
インストールメディアの作成ツールがまだ起動していれば、「完了」を押します。
ストレージ交換
PCの電源を落とし、念のため電源スイッチやアダプタ、バッテリー等をOFFまたは取外します。
静電気対策を施し、HDDと取り外します。
M.2 SSDを取り付けます。このとき、スペーサやネジはM.2用があるので事前に用意しておきましょう。今回はマザーボードに同梱付属していたものを使用しました。
クリーンインストール
インストールメディアから起動
PCの電源を入れます。
予めBIOS設定からブートドライブを変更しておくか、BIOS起動時にブートメニューキーを押すなどして開き、手動で光学ドライブにを選択します。
インストール
セットアップ開始画面が起動します。ここからは新規で組み立てた時と同様のWindows10のインストール作業になります。
「今すぐインストール」を押します。
日本語版、日本語キーボードになっていると思うので、特に問題なければ「次へ」を押します。
今回はクリーンインストールなので何も入力せずに、「プロダクトキーがありません」を押します。
インストールするシステムを選択し、「次へ」を押します。 筆者の場合、Windows10 proを選択しています。
「同意します」にチェックを入れて、「次へ」を押します。
パーティション設定をしたいので、今回は「カスタム」を押します。
ドライブを選択して「次へ」を押します。
「サイズ」を入力して、「適用」を押します。
今回はシステムドライブを500GBとしました。最小容量で運用したい場合は80GBくらいになるようすればいいと思います。
残りの未割り当て領域は、インストールが完了したあとでデータ保存用途のドライブとして割り当てます。
ちなみに、1GB=1024MBです。
「OK」
パーティション割当が完了したので、そのドライブを選択して「次へ」を押します。
処理が終わるまで待ちます。
日本在住の日本人はたいてい「日本」でいいと思います。選択したら「はい」を押します。(あとで変更できます。)
特になければ「スキップ」を押します。(あとで追加できます。)
私用だし、あとで後で設定すればいいので、「個人設定」で大丈夫です。
今回はMSアカウントではなく、ローカルアカウントを作りたいので「オフライン アカウント」を押します。 嫌なら後でアカウントの変更や削除などできます。
ローカルアカウントを設定していくので「制限付きエクスペリエンス」でいいです。
任意のアカウント名を設定します。 嫌なら後でアカウントの管理とかから変更や削除などできます。
パスワードを設定します。未入力でも行けたかもしれません。必須だとしても後で変更できます。
秘密の質問3つを選び、設定します。
こういうおすすめ機能・設定は、基本的にすべてオフ(無効)をおすすめします。必要なら後で設定すればいいです。
「同意」を押します。
「スキップ」を押します。
コルタナはいらない邪魔な人なので、「今は実行しない」を押します。
インストール設定は以上で、待っていればログオン画面またはデスクトップに遷移しています。
あとは、各種アプリケーションのインストールやシステムの設定、Windowsアップデート、データ移行を実施していけばOKです。
おわり
- ひとまずOSバージョンとか以前のまま引き継がれるので最新状態を保っていれば、インストール作業自体は数時間以内で終わると思います。
- あらかたインストールやデータ移行が終わった段階で、動作の感触は非常に良好でした。
- OS起動してデスクトップ操作可能になるまでは10秒ほど、180倍以上の高速化になりました。驚異的です。
- ゲーム(ApexLegends)やAdobe、VisulStudioなどの起動も以前は数分~5分、下手したら10分以上かかっていたのが、30秒~1分ほどになり快適です。
- SSD登場当初は、フラッシュメディア特有の書き込み回数制限及び速度低下がどうだの言われていましたが、たぶん10年以上立っているので技術的に改善されているだろうし、当時より価格も下がっているので、なによりM.2(NVMe)の速度が圧倒的なので、もうHDDになんて戻れないですね。
M.2 SSD、感動した。
はじめに
SQLエディタの実装(SELECT命令編)
- VB系環境では、SQLはADO(ActiveX Data Objects)を使用します。
- 「ツール」→「参照設定」から**Microsoft ActiveX Data Objects X.X Libraryを追加する必要があります。X.X**は2.7などバージョンになるので、環境に合わせて選択します。
- これにより、使用できるデータベースは
今回は、SELECT命令のみ実装していきます。
実装
※本記事では、SQLインジェクション等のセキュリティ対策は考慮していません。
まず、プロバイダを設定します。
本記事の範囲ではモジュールを分ける必要は特にないですが、今後の拡張を考慮して、
今回はモジュール名:Comを作成し、ここに記述します。
Public Const Provider As String = "MSDASQL" Public ConnectionString As String
次に、モジュール名:Initを作成し、DB接続設定を進めます。
今回はEXCELの同Book内のシートをデータベースとして運用していきます。
Sub initDB() Com.File_Name = ThisWorkbook.FullName Com.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & "DBQ=" & Com.File_Name & "; ReadOnly=True;" End Sub
テスト用SQLを実行する処理は以下のとおりです。
SQLの記述にはシート名:SQL、実行結果の出力先にはシート名:resultとしています。
主処理部はモジュール名:SqlBrowserに作成し、以下のサブプロを記述します。
Sub SqlBrowser()
Dim thisSheet As String
thisSheet = "SQL"
Dim outSheet As String
outSheet = "result"
Dim row As Long
Dim col As Long
row = 1
col = 1
Dim i As Long
i = 0
Do While i <= 10000
If Worksheets(outSheet).Cells(row + i, col).Value = "" Then
i = i + 1
End If
Worksheets(outSheet).Rows(row + i).ClearContents
Loop
Call init.initDB
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Dim sql As String
sql = Worksheets(thisSheet).Cells(1, 2).Value
Call Sql_select.Sql_select(cn, rs, sql)
Dim fld As ADODB.Field
Dim j As Long
j = 0
For Each fld In rs.Fields
If IsNull(fld.Name) Then
Worksheets(outSheet).Cells(row, col + j).Value = "null"
Else
Worksheets(outSheet).Cells(row, col + j).Value = fld.Name
End If
j = j + 1
Next fld
i = 1
j = 0
Do Until rs.EOF
Dim f As Long
For f = 0 To (rs.Fields.Count - 1)
If IsNull(rs.Fields(f)) Then
Worksheets(outSheet).Cells(row + i, col + f).Value = ""
Else
Worksheets(outSheet).Cells(row + i, col + f).Value = rs.Fields(f)
End If
Next f
i = i + 1
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
主処理部からSQL実行部を呼び出します。
モジュール名:Sql_selectを作成し、以下のサブプロを記述します。
Sub Sql_select(cn As ADODB.Connection, _ rs As ADODB.Recordset, _ sql As String)
cn.Provider = Com.Provider
cn.ConnectionString = Com.ConnectionString
cn.Open
rs.Open sql, cn, adOpenStatic
End Sub
実行結果
テスト用のテーブルは以下のシート名:tblTestを作成し、内容は以下の通り。
また、SQLエディタは**シート名:SQL**を作成し、以下の通り。
今回テスト用に実行するSQLは以下の通り。
select * from [tblTest$] where id >= 200
実行ボタンを押すと、シート名:resultに列名付きで出力します。
この例では、idが200以上のレコードを抽出し出力されているはずです。
日付データとかの扱いや表示が課題かなあ...
おわり
- 今回はSELECT命令のみ実装しました。
- INSERTやUPDATE、DELETEなども使えるようにしていく予定です。
- あとSQLインジェクション等のセキュリティ対策は考慮していません。
はじめに
- VBAで指定フォルダ内のファイル一覧を取得するプログラムを作ります。
- 開発及び実行環境はWindowsを前提にしています。
- インストール等不要なBatchやVBScriptや、人気のPythonでやってもよいのですが事務作業で馴染みやすいVBAでやっていこうと思います。
ファイル一覧取得
基本となるソースコードは以下を参考にしています。excel-ubara.com
FileSystemObjectを使用するため、予め「ツール」→「参照設定」から**Microsoft Scripting Runtime**を有効にしておく必要があります。
プログラムの大まかなかな流れとしては、
- フォルダ選択するためのダイアログ操作
- 結果出力シートの初期化
- サブフォルダ一覧の取得
- ファイル一覧の取得
となります。
以下が、全体のソースコードです。
Sub ファイル一覧() Dim objFso As FileSystemObject Dim objFldr As Folder Dim objSubFldr As Folder Dim objFile As File Dim strDir As String Dim i As Long
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択"
.AllowMultiSelect = False
If .Show = -1 Then
strDir = .SelectedItems(1) & ""
Else
Exit Sub
End If
End With
Set objFso = New FileSystemObject
If Not objFso.FolderExists(strDir) Then
MsgBox ("指定のフォルダは存在しません")
Exit Sub
End If
Cells.ClearContents
Cells(1, 1) = strDir
Cells(3, 1) = "ファイル名"
Cells(3, 2) = "サイズ"
Cells(3, 3) = "更新日時"
i = 4
Set objFldr = objFso.GetFolder(strDir)
For Each objSubFldr In objFldr.SubFolders
Cells(i, 1) = objSubFldr.Name
i = i + 1
Next
For Each objFile In objFldr.Files
With objFile
Cells(i, 1) = .Name
Cells(i, 2) = WorksheetFunction.RoundUp(.Size / 1024, 0)
Cells(i, 2).NumberFormatLocal = "0 ""KB"""
Cells(i, 3) = .DateLastModified
i = i + 1
End With
Next
Set objFso = Nothing
Set objFldr = Nothing
Set objSubFldr = Nothing
End Sub
実行すると、「フォルダを選択」ウィンドウが起動します。 ファイル一覧を取得したいフォルダを選択します。 今回はtestフォルダを選択します。
フォルダ指定
また、testフォルダの内容は以下の通りです。
testフォルダ
ファイル一覧の取得結果は以下の通り出力します。
一覧
おわり
- サブフォルダも含めたファイル一覧の取得や、EXCELのシート名一覧取得もやろうと思います。
はじめに
- ProphetはPython3.7以上3.9未満に対応し、事前にPyStan、ephemのインストールが必要です。
- また、PyStanには2.19.1.1までに対応しています。
- PyStanインストールにはCythonのインストールが必要です。
- C++コンパイラのバージョンはgcc9.0以上、またはClangを使用の場合はXcodeを最新版にしておきましょう。
環境
インストール
本環境にはPython2系も存在しており、Python3系はpython3
やpip3
で環境設定されている。
今回は3系にインストールしていく為、pip3
コマンドを使用している。
このへんは自分の環境を必ず確認する。
ターミナルはzshで実施している。
PyStanに必要なCythonとNumpyをインストール。
pip3 install Cython numpy --user
PyStan 2.19.1.1のインストール。
pip3 install pystan==2.19.1.1 --user
さらにephemをインストール。
pip3 install ephem --user
Prophetをインストール。
fbprophet
であることに注意
pip3 install fbprophet --user
matplotlibやpandas、plotly(jupyter notebook用)など他に必要なパッケージがあればインストールしておくとよい。
インストールは以上で終了。
動作確認
(省略)
おわり
- Windowsでインストールするより遥かに簡単でした。
- 癖があるとしたら、Xcode(Clang)なら最新版にしておくとか、gccとClangどっちを使っているのか確認するとかそのあたりだと思います。
- jupyter notebook用のパッケージを使いたい場合は、Anacondaやjupyter単体で使えるように準備しておく必要があるようです。
- というかProphetはグラフ描画にplotlyを使う?ようで、つまりjyupyter notebookが必要?
- なので結論は、Macでも素直にAnacondaでやれ…ということか。
はじめに
- FacebookのProphetを使いたいが、インストールにはPyStanが必要。
- 2022/3/30時点でPyStan 3以上はWindows非対応、LinuxとMacOSに対応。
- ProphetはPyStan 2.19.1.1までに対応。
- PyStanに必要なCythonにC++コンパイラが必要(VC++ 14以上またはgcc9.0以上)
- WindowsではAnaconda環境でしか上手くインストールできない。(頑張ればインストールできるかもしれないが私は無理でした)
- Anaconda環境にインストールしていくが、pipと混ぜると危険らしいので、原則condaでインストールをすすめる。
環境
インストール
- 仮想環境へインストールする。
- Prophetをインストールするには、事前にPyStan 2.19.1.1をインストールしておかなければならない。
- PyStanインストールは別記事でまとめている。
- PyStanのインストールが済めば、以下の参考記事のように進めていく。
まず、Anaconda Promptを管理者権限で起動する。
予めPyStanまでインストールを済ませた仮想環境に入る。
今回の例では、myenv1
という名前の仮想環境で進める。
conda activate myenv1
ephemとplotlyをインストールする。
conda install ephem plotly
途中でProceed ([y]/n)?
ときかれるのでy
で進める。 以降の手順でもよく聞かれるので同様に進める。
PlotlyはPandasのコードを実行した時に
Importing plotly failed. Interactive plots will not work.
というエラーが出たので、一応インストールしておく。
次に、Prophetをインストールする。fbprophet
であることに注意。
conda install fbprophet
インストールが完了すれば、仮想環境を終了する。
conda deactivate
動作確認
Anaconda Navigatorを起動し、画面のApplications on項目をmyenv1にする。
そして、jupyter notebookを起動する。 サンプルプログラムは以下の記事を参照引用した。
サンプル:
import pandas as pd from fbprophet import Prophet
df = pd.read_csv('test.csv')
m = Prophet(daily_seasonality=True) m.fit(df)
future = m.make_future_dataframe(periods=365) future.tail() forecast = m.predict(future) forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
実行結果:
図も出力してみる。
fig1 = m.plot(forecast)
実行結果:
インストールできたようだ。
おわり
- Prophetがなんとか使える環境になったと思うので、これから株価解析等やってみようかなと思います。