Pandora Pocket

IT系と日常系の備忘録。三日坊主。

タイトルが結論。

Linux環境で動く.NET Coreアプリを書いていた時、ファイル出力処理でファイルパスを指定する際、下記のようにとりあえず記載してました。

var fileName = AppDomain.CurrentDomain.BaseDirectory + @"\FolderName\fileName";

想定としてはプログラムがあるフォルダにFolderNameというフォルダがあり、その中にfileNameというファイルが生成されるというもの。
Windows環境ではこれで問題なく動くものの、Linux環境に持っていくとファイルが出力されていなかったので確認してみると、プログラムがあるフォルダに FolderName\fileName という名前のファイルが。

Windows環境ではパスにバックスラッシュを使うのに対し、Linux環境ではスラッシュを使うため、上記の指定だとうまくいかないと。なるほど。

というわけで、Linux環境で動かす場合はスラッシュに置き換えればいいんですが、Windows環境でも動かすことを想定すると、Path.Combineを利用してやるのが最適解のようです。

こんな感じ。

var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FolderName", "fileName");

そもそもパスの指定方法が適当ってのは気にしないで・・・。

参考

How to handle file name in System.IO classes in a cross-platform manner to make it work on Windows and Linux? For example, I write this code that works perfectly on Windows, however it doesn't cre...
[はてなブックマークで表示]

クエリ文字列(クエリストリング、URLパラメータとも)は

http://www.〇〇〇.com/search.php?△△=〇×

の?以降のこと。サーバーに情報を送るための文字列になります。

StringBuilderで strBuilder.Append("△△=〇×"); とか、Dictionary使ってよく生成してたんですが、特殊記号や全角文字列のエスケープ処理を別途行う必要があるので面倒くさい。

System.Web.HttpUtility.ParseQueryString

を使えばエスケープ処理を自動的にやってくれる。

using System.Web;  
中略  
var queryString = HttpUtility.ParseQueryString("");  
queryString.Add("△△", "〇×");  

としてやれば、

queryString.ToString();  

でクエリ文字列が生成される。

下記のようにUriBuilderに渡してやれば、スマートにURLが生成可能。

var uriBuilder = new System.UriBuilder("www.〇〇〇.com") {Query = queryString.ToString() };  

ちょくちょく忘れるのでメモメモ。

デブな現状を改善するべく、毎日体重を測っています。

以前作った、タニタの体重計のデータを取得してDiscordに投稿するAzure Functionsについて、私の実装が悪かったのか単に設定がおかしかったのかわかりませんが、Azureの課金額が結構な額になってしまい、現在GCEに.NET Coreなコンソールアプリを配置して、定期実行させるようにしています。

ダイエット仲間と進捗状況をDiscordで共有すべく、HealthPlanetからデータを取得してD...
[はてなブックマークで表示]

現時点でのソースはこちら。

TANITA HealthPlanetのデータをDiscordに投稿するコンソールプログラム. Contribute to Ovis/PostDietProgress_Console development by creating an account on GitHub.
[はてなブックマークで表示]

続きを読む

前職ではSVNばかり戯れていたので(もとはVSSだったのでこれでも進歩したほうだった)Git初心者なひつじです。
絶対まとめておかないとまた後で調べなおすことになるのでメモメモ。

Gitだと以前コミットした場所まで

git reset

を使えば戻すことができます。

で、今回このコマンドで戻した際、うっかり二回実行してしまって戻したくないところまでワーキングツリーを戻してしまいました。

続きを読む

AzureFunctionsのlocal.settings.jsonファイルといえば

 {  
   "IsEncrypted": false,  
   "Values": {  
     "FUNCTIONS_WORKER_RUNTIME": "<language worker>",  
     "AzureWebJobsStorage": "<connection-string>",  
     "AzureWebJobsDashboard": "<connection-string>",  
     "MyBindingConnection": "<binding-connection-string>"  
   },  
   "Host": {  
     "LocalHttpPort": 7071,  
     "CORS": "*"  
   },  
   "ConnectionStrings": {  
     "SQLConnectionString": "<sqlclient-connection-string>"  
   }  
 }  

Azure Functions にデプロイして実行する前に、ローカル コンピューターのコマンド プロンプトまたはターミナルで Azure Functions をコーディングしてテストする方法について説明します。
[はてなブックマークで表示]

のような感じで設定情報が保存されてます。

続きを読む

最近Calibreという電子書籍の管理ソフトを使ってます。

このソフトでKindleの電子書籍を管理してるんですが、私はタイトル欄には書籍名と巻数のみだけ、それ以外の情報は消しておきたいというポリシーがありまして、元のタイトルはカスタム列を作成してそちらに入れるようにしています。

こんな感じで。

が、たくさんデータがあるといちいちタイトル欄からコピーしてカスタム列にコピーして・・・ってのが面倒。

なので、Calibreのコマンドを利用して、一気にカスタム列にコピーするソフトを突貫で作りました。

Calibreの特定のカラム内の値を別のカスタムカラムに一括コピーする. Contribute to Ovis/CalibreBulkCopyMetaDataConsole development by creating an account on GitHub.
[はてなブックマークで表示]

App.config側にCalibreのパスやライブラリパス、コピー先のカラム名、コピー元のカラム名を指定してやると、コピー先カラムに値が書き込まれていない場合にコピー元カラムの値を取得して、コピー先カラムに書き込むだけ。

また、コピー元カラムにコピー先カラム内で利用されている値が含まれている場合に、その値を書き込む処理もフラグを変更したらできるようにしてます(CopyWhenIncludedFlg)。
上の画像でいうレーベルというカラム、単行本レーベルを登録しているんですけど、これも一個一個入れるのが面倒なので、タイトル欄に入っているならそれをコピーして入れておきたいから実装した次第。
実装が糞なので、「ビッグコミックス」と「ビッグコミックススペシャル」みたいなものだとビッグコミックスのほうが採用されちゃうこともあるんですが、まぁいいや。

MarkdownファイルをPDFにするとき、普段はVSCodeのMarkdown-PDFプラグインを使ってるんですが、大量のMarkdownファイルがあるときに一個一個PDFにするのが面倒。

https://unskilled.site/markdown変換コマンドラインツール「pandoc」を使う/

node.jsを使ってmarkdownファイルからPDFファイルに変換してくれる「markdown-pdf」を見つけました。今回はmarkdown-pdfを利用して、PDFのスタイルシートをカスタマイズしたり、gulpタスクで一括変換できるものを作ってみましたのでご紹介します。
[はてなブックマークで表示]

このあたりを使えばいいんでしょうけども、せっかくなので作ってみようと思いまして。

続きを読む

PCが常時2台稼働し、NASも2台稼働させ、夏冬はエアコンをかけっぱなしという生活を続けているので、...
[はてなブックマークで表示]

以前中部電力から別の電力会社に切り替えるため、スマートメータを取り付けてもらったんですが、スマートメーターって電力会社との通信だけでなく、個人に対して通信もできるようになってるんですよね。(HEMSとか)

今の電力会社は電力情報をAPIでくれないので(くれる電力会社あるんだろうか)、日々の電力消費量を見るためにはサイトを見る必要があるんですが、スマートメーターから取得できるならそれで確認できるなということで、試してみることにしました。

続きを読む

Azure Functionsで動かしていたプログラムがあるんですが、(たぶん実装が悪いのだけど)課金が結構な額となってしまい、またDBを使うとなるとそれはそれでよい金額となってしまいます。

というわけでAzure Functions用に作っていたプログラムを.NET Coreのコンソールアプリとして置き換えて、Google Compute Engine上のLinuxで動かすことにしました。

続きを読む