Tools

Hugo に数式を挿入する その2

  • POST
[前回までの記事] Hugo に数式を挿入する 経緯 mathjax のバージョンを 3 系 にアップデートした際に単純にいかなかったので備忘録として残しておく 手順 参考 を見ながらアップデートする ※version2 から version 3 への変換を利用 partials フォルダ配下の以下のファイルを修正する CDN で提供されている最新の MathJax.js の URL は、cdnjs.com で確認する <script type="text/javascript"> MathJax = { tex: { inlineMath: [['$','$'], ['\\(','\\)']], processEscapes: true, tags: "ams", autoload: { color: [], colorV2: ['color'] }, packages: {'[+]': ['noerrors']} }, chtml: { matchFontHeight: false, displayAlign: "left", // version 2 で css で変更していた 数式の表示位置の設定 displayIndent: "2em" }, options: { skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre'], renderActions: { /* これを記述しないと インライン数式(例. ${}_n \mathrm{ P }_k$) が機能しない */ find_script_mathtex: [10, function (doc) { for (const node of document.querySelectorAll('script[type^="math/tex"]')) { const display = !!node.type.match(/; *mode=display/); const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display); const text = document.createTextNode(''); node.parentNode.replaceChild(text, node); math.start = {node: text, delim: '', n: 0}; math.end = {node: text, delim: '', n: 0}; doc.math.push(math); } }, ''] } }, loader: { load: ['[tex]/noerrors'] } }; </script> <script type="text/javascript" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" id="MathJax-script"></script> 1 で作成した partial を head or footer で読込

Excel でテスト用シートを自動生成するツールを作成する

  • POST
経緯 結合テストなのでエビデンスを残しておく必要があり テスト項目ごとにシートを分ける必要があった テスト項目が多い場合手作業で シート作成 => シート名変更をするのは手間だったため ツール化をすることにした 使用方法 「パラメータ」シートにて以下を指定する [設定項目] シート数: 作成するシート数 表示倍率: 作成するシートの表示倍率 シート作成後ワークグループ設定: チェックをつけるとシートを作成後に ワークグループ(各シートが選択状態)になる 「パラメータ」シートの「実行」ボタンを押下する 実際のコード Rem Attribute VBA_ModuleType=VBAModule Option VBASupport 1 Sub ExecuteButtonClick() Dim ws As Worksheet Dim wsArray() As String Dim chkFlg As Long 'ワークシートの初期化 For Each ws In Worksheets 'ワークシート名が"パラメータ"以外の場合 If ws.Name <> "パラメータ" Then Application.DisplayAlerts = False ws.Delete Application.DisplayAlerts = True End If Next ws 'チェックボックスの値を取得 chkFlg = Worksheets("パラメータ").OLEObjects("Chk_WorkGroup").Object.Value 'ワークシートの追加 For i = 0 To Worksheets("パラメータ").Cells(2, 3).Value - 1 Sheets.Add after:=ActiveSheet ActiveSheet.Name = "No." & i + 1 ActiveWindow.Zoom = Worksheets("パラメータ").Cells(3, 3).Value ReDim Preserve wsArray(i) wsArray(i) = ActiveSheet.Name '100の倍数ごとに画面に制御を返す If i Mod 100 = 0 Then DoEvents End If Next '作業グループ設定フラグがオンの場合 If chkFlg Then '作業グループの設定 Sheets(wsArray).Select End If End Sub 作成したツール

Microsoft Edge Developer(旧Modern IE)でhostsファイルを設定する方法

  • POST
経緯 普段 Mac にて開発を行っているが動作端末は Windows であることが多い そのため、表題のツールを使用することがあるがその際に Mac 上の hosts ファイルと同様の設定をしたい場合があり苦労したため備忘録として残しておく Microsoft Edge Developer(旧Modern IE)について ダウンロードは以下から行う ダウンロードページの「Virtual Machines」より「Virtual machine」と「platform」を選択してダウンロードする 手順 hostsファイルの権限変更 Microsoft Edge Developer 上で以下を行う 「C:/Windows/System32/drivers/etc」に hosts ファイルがある そのファイルを右クリック>Properties>Security>Editボタンで、 Users の権限に全部チェックを入れる Mac の hosts ファイルを複製 Mac の hosts ファイルは「/private/etc/hosts」にあるので、それを前述のファイルに中身をコピーする ※hosts ファイルのループバックアドレスは固定のホスト側のIPアドレスに置き換えて記述すること Rails での確認の際の注意点 確認作業を Rails で行う場合には追加で以下の作業を行う IEの場合 サーバの起動の際に以下のコマンドで行う bundle exec rails s -b 0.0.0.0 インターネットオプションのLocal intranetに「localhost:3000」を登録 Edgeの場合 サーバの起動の際に以下のコマンドで行う bundle exec rails s -b 0.0.0.0 インターネットオプションの Local intranet に「localhost:3000」を登録 about:flags を入力し、「Developer Settings」の「allow localhost loopback(this might put your device at risk)」のチェックを外す

Windows 環境でバッチファイルからiniファイルを読込んで値を取得する

  • POST
対応方法 バッチファイルから ini ファイルを読込む場合 VBS を使用することで実現する 具体的には、バッチファイルから VBS を呼び出して ini ファイルより値を取得して VBS から戻り値を受け取り、実現する 取得する ini ファイルの中身 <設定値>*****************************************************'<コメント>####################################### [Path] WorkPath=C:/src/wk 'Work Folder Path 実際のコード @echo off set iniFileName=sample.ini for /f "usebackq tokens=* delims=" %%A in (`call cscript //Nologo getProfileString.vbs "%iniFileName%" Path WorkPath`) do set ret=%%A echo "%ret%" pause exit Option Explicit rem /***************************************************************** rem * getProfileString.vbs iniFileName, sectionName, entryName rem * rem * 引数 rem * iniFileName : 設定ファイル名(フルパス) rem * sectionName : セクション名 rem * entryName : エントリー名 rem * 動作 rem * 引数に指定された設定ファイルより指定した rem * 「セクション」,「エントリー」に対応する設定値を返す rem * 先頭がカンマの場合はコメント行として扱う rem * 行の途中でカンマがある場合は直前までの文字列(右空白除去)を rem * 設定値として扱う rem * 戻り値 rem * 設定値(見つからなかった場合およびエラーの場合は空を返す) rem *****************************************************************/ Dim ret Dim fs Dim readLineObj Dim searchFlg Dim buffer rem ファイルシステムアクセス用 Set fs = CreateObject( "Scripting.FileSystemObject" ) ret = "" rem ファイルを開く on error resume next Set readLineObj = fs.OpenTextFile( Wscript.Arguments(0), 1 ) if Err.Number <> 0 then rem ファイルアクセスエラーの場合は終了 Wscript.Echo ret Wscript.Quit end if on error goto 0 rem 検索処理用のフラグ searchFlg = false rem 読込みループ Do While not readLineObj.AtEndOfStream rem 行単位の読込み buffer = readLineObj.ReadLine rem 空の行以外の場合 if Trim(buffer) <> "" then rem 対象セクションの場合 if Ucase(Trim(buffer)) = "[" & Ucase( Wscript.Arguments(1) ) & "]" then searchFlg = true else rem 設定値を取得 ret = GetProfileString(buffer, Wscript.Arguments(2), searchFlg) rem エントリー名が見つからなかった場合 if searchFlg And IsEmpty(ret) then ret = "" end if rem 設定値を取得できた場合はループを抜ける if searchFlg And (Len(ret) <> 0) then Exit Do end if end if Loop readLineObj.Close Wscript.Echo ret Wscript.Quit rem /***************************************************************** rem * 引数に指定された設定ファイルより指定した rem * 「セクション」,「エントリー」に対応する設定値を返す rem * 先頭がカンマの場合はコメント行として扱う rem * 行の途中でカンマがある場合は直前までの文字列(右空白除去)を rem * 設定値として扱う rem * rem * 引数 rem * buffer : 設定ファイルより読込んだ行 rem * sectionName : セクション名 rem * searchFlg : 検索用フラグ rem * 戻り値 rem * 設定値(見つからなかった場合およびエラーの場合は空を返す) rem *****************************************************************/ Function GetProfileString ( buffer, sectionName, searchFlg ) Dim ret Dim entries Dim entry ret = "" if searchFlg then rem 次のセクションの場合 if Left(Trim(buffer) ,1) = "[" then rem ループを抜ける GetProfileString = Empty Exit Function end if entries = Split(buffer, "'") entry = Split(entries(0), "=") rem エントリーの場合 if (Ubound(entry) = 1) then rem 検索対象のエントリーの場合 if Ucase(Trim(entry(0))) = Ucase(sectionName) then ret = RTrim(entry(1)) End if end if end if GetProfileString = ret End Function