【VB.NET】DateTimeで取得した日時が和暦になってファイルが作成されてしまう

DateTimeが和暦を取得している?

エラーログのファイルを「ErrorLog_yyyyMMdd_HHmmss.txt」という形式で出力していたが、急に「ErrorLog_300427_HHmmss.txt」になってしまった。

どうやら2018が和暦の30に変換されたファイルが作成されているっぽい。

以下のようにして、現在日時を取得してファイルを作成している。

Dim dtNow As DateTime = DateTime.Now
Dim stNow As String = dtNow.ToString("yyyyMMdd_HHmmss")

errorLog = "ErrorLog_" & stNow & ".txt"

解決策

結論からいうとエクスプローラー側の問題。 「更新日時」の列が和暦で表示されているので、ここを西暦に直す。

スタートボタン(Windowsボタン) →コントロールパネル →時計、言語、および地域 →地域と言語 →形式タブ

日本だとyyyyにしているのに和暦で表示されているのは謎。 因みにドロップダウンでggとかを選択すると和暦になるのはわかるんだけど。 f:id:saneeeatsu:20180427102714p:plain

ん~しょうがないから形式の国のところを英語(米国)に変更して解決。 f:id:saneeeatsu:20180427102731p:plain

そしてこの後もう一度日本にしたら普通に西暦になってるし、ドロップダウンからggが無くなってる!! なんで????

f:id:saneeeatsu:20180427102738p:plain

あと、そもそもコントロールパネルなんか開いてないのになんで今まで西暦だった表示形式が和暦に変わったんだ?? Win7だから?

ん~よくわからん。

MacにNode.jsをダウンロードする際に「Warning: Failed to create the file ... curl: (23) Failed writing body (0 != 847)」というエラー

qiita.com

上記サイトを参考にしながらNode.jsをインストールする際にエラー。

$ nodebrew install-binary latest
Fetching: https://nodejs.org/dist/v10.0.0/node-v10.0.0-darwin-x64.tar.gz
Warning: Failed to create the file                                                                                                   
Warning: /Users/sane/.nodebrew/src/v10.0.0/node-v10.0.0-darwin-x64.tar.gz: No 
Warning: such file or directory

curl: (23) Failed writing body (0 != 847)
download failed: https://nodejs.org/dist/v10.0.0/node-v10.0.0-darwin-x64.tar.gz

ファイルが作れない?

$ mkdir -p ~/.nodebrew/src

ファイルを作ってあげて解決。

インストールの全コマンド。

$ brew install nodebrew
$ nodebrew -v                                  // インストールされたかチェック
$ mkdir -p ~/.nodebrew/src                     // 上のエラーを回避
$ nodebrew install-binary latest               // 最新版のnode.jsをインストール
$ nodebrew list                                // インストールされているnode.jsを表示
$ nodebrew ls-remote                           // インストール可能なバージョンを表示
$ nodebrew install-binary 9.6.1                // バージョンを指定してインストールする
$ nodebrew use  v10.0.0                        // 使用するバージョンを設定
$ echo 'export PATH=$PATH:/Users/sane/.nodebrew/current/bin' >> ~/.bashrc  // saneのところは各自変更
$ node -v                                     // これはターミナルを再起動した後に実行

【VBA】入力された文字列でフィルタをかける

シンプルだけど使いそうだからメモ。

以下のような場合、B1セルに入れられた材料名に対してフィルタをかけたい。

f:id:saneeeatsu:20180417174057p:plain

Sub make_filter()
    Dim str_target As String
    Dim int_target As Integer
    
    str_target = Range("B1").Value
    Selection.AutoFilter
    
    int_target = Cells.Find(What:=str_target).Column - 1

    ActiveSheet.Range("$B$4:$E$9").AutoFilter Field:=int_target, Criteria1:="<>"
End Sub

「〇」をフィルタリングする方法がわからなかったけど、マクロを記録すると「Criteria1:="<>"」で取れるっぽい。

f:id:saneeeatsu:20180417174209p:plain

いろいろなツールでAWSにSSH接続する(WinSCP、MySQL Workbench、CloudBerry)

仕事でAWSを使う際にいろいろとDB周りの接続やらが必要だったけど、
用語に対する理解も曖昧だった部分もあったし、
調べながらやったのでメモしておく。

AWSについての基礎はここを読んでおく。超わかりやすかった。
(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita


固定IPの取得・設定

インターリンクで取得し、以下のヘルプサイトを見ながら設定を行った。
Windows 10の設定 ■マイIP ソフトイーサー版■

固定IPアドレスは英語でFixed IP Addressなのか。
Staticではないのかな?
固定IPアドレス ‐ 通信用語の基礎知識


ポート番号

よく出る番号は22、80、443、7000。それぞれ何が違うのかよくわかってなかったので調べた。
【3分で把握】ポート番号とは?と代表的なポート番号まとめ


AWS上で穴あけを行う

既にAWS上で動いているWebアプリケーションにアクセスしようにも、WinSCPMySQL WorkbenchやCloudBerry経由でDBアクセスしようにもまずAWS上で穴あけを行わなくてはならない。つまりセキュリティグループのインバウンドルールに対して固定IPを設定していく。

「EC2 > セキュリティグループ > グループ選択 > インバウンド > 編集 > ルールの追加」で設定しようと思いきや、「送信元は CIDR ブロックまたはセキュリティグループ ID にする必要があります。」とのエラー文が。
IPアドレスの後ろに「/32」をつけて解決!
参考:AWSのEC2のセキュリティのインバウンドのルールでIPを設定する場合は/32をつける - Qiita

インバウンドルール:どんな通信が来たら許可するのか
CIDRブロックVPCが使用できるIPの範囲のこと(10.0.0.0/28(16IPアドレス) ~ 10.0.0.0/16(65,536IPアドレス)まで選択可能)。


PuTTY

ここからダウンロード。
基本的に下の参考にしたサイトの方法で出来たけど、どうやらPCを再起動した後に接続しなおす場合は、ppkファイルをpageant.exeに再度ドラック&ドロップして秘密鍵を登録しなおす必要がある。

・確認方法
Windowsの右下のインジケータ(バッテリーのアイコンの横などにある上矢印のアイコン)をクリック
pageant.exeと同じアイコンを右クリック
→Views Keyをクリック

踏み台サーバを使ってサーバにアクセスする場合の設定方法は以下。

・カテゴリ > セッション > 接続先の指定

ホスト名 踏み台サーバーのElasticIP

他はデフォルトでOK。

・カテゴリ > 接続 > SSH

サーバに送られるデータ ssh 最終的な接続先のプライベートIP(ssh 170.20.20.20)

他はデフォルトでOK。


参考:PuTTYでプライベートなAmazon Linuxサーバへ多段ログインしてみた | Developers.IO


Cloud Berry

ここからダウンロード。

左上の「File > New Amazon S3 Account」を押下。

名前表示 任意の表示名
Access key AWS IAMでユーザを追加したときのアクセスキー
Secret key AWS IAMでユーザを追加したときのシークレットキー

OKを押下。
タブに「My Computer →(名前表示で設定した表示名)」となっていることを確認。
あとは「Source:」を切り替えて表示する内容を自由に変更させる。


WinSCPで多段接続

ここからダウンロード。

・Session

Host name 最終的な接続先のプライベートIP
User name ユーザー名

・Advanced...(Passwordの下) > Connection > Tunnel

Host name 踏み台サーバーのElasticIP
Port number 22
User name ユーザ名(Sessionと同じ)
Private key file 秘密鍵のファイル(.ppk)

OKを押下し、初めの画面に遷移しSaveを押してLogin。
新しく接続させる場合は「New Session」タブを押す。

参考:AWSの仮想マシンにWinSCPでの接続 - ts0818のブログ


MySQL Workbench

ここからダウンロード。

MySQL Connectionsの右側の+アイコンを押す。

Connection Name 任意の名前

・Connectionタブ

Connection Method Standard TCP/IP overSSH

・Parametersタブ

SSH Hostname Elastic IP:22 (13.100.100.100:22)
SSH Username ユーザー名
SSH Password -
SSH Key File 秘密鍵のファイル(.ppk)
MySQL Hostname ~~~.rds.amazonaws.com
MySQL Server Port 3306
Username ユーザー名

「:22」を付けてなくて嵌った。

参考:MySQL WorkbenchからRDSに接続する | ヤマムギ

コマンドプロンプトからファイルを開くWindowsのstartコマンド(=Macのopenコマンド)

最近、Win10をシャットダウンせずに何日か使用していると、エクスプローラーなどを立ち上げたときにファイル名などが全て白色になってしまい表示できなくなる。

解決策としては再起動するしかわからないけれど、どうしても今ファイルを見たいって時がある。
けど、ファイル名は見れない。
ってことでコマンドプロンプトから開くしかないかなと思ってコマンドを調べた。

MacのopenのようなコマンドがWindowsでもある。
コマンドプロンプトで、

> start hoge.pdf
> start /? 

これで関連付けられたアプリケーションで開いてくれる。
「start /?」は要するにhelpだけど、Powershellでは効かなかった。

sekika.github.io

Windowsでファイル内の文字を検索する

エクスプローラーの検索窓だとひっかからないものがあったりするのでコマンドプロンプトを使う。

「foldername」以下で「HOGE」という文字を探しして出力結果を「findhoge.txt」に吐き出す場合。

> findstr /s /i "HOGE" foldername/* > findhoge.txt
コマンド 説明
/s サブディレクトリを検索する
/i 検索文字列の大文字・小文字を区別しない(デフォルトは区別する)
/x 完全一致する文字のみ取得(デフォルトは部分一致)
/n 行番号を表示(デフォルトは非表示)

参考:
Windowsでファイルから文字列検索するコマンド、findstr - Qiita
findstrコマンドで覚えておきたい使い方8個 | 俺的備忘録 〜なんかいろいろ〜

言語処理100本ノック with Python【第3章】

No 日付 学んだこと
20 4/13 jsongzip
21 4/14 正規表現、re、raise
22 4/16 正規表現

www.cl.ecei.tohoku.ac.jp



第3章: 正規表現

Wikipediaのページのマークアップ記述に正規表現を適用することで,様々な情報・知識を取り出します.

20. JSONデータの読み込み

Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.

1行に1記事の情報がJSON形式で格納されるので、2章のように1行読み込んでifで判定させる。

解法

import gzip
import json
fname = 'jawiki-country.json.gz'

with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile:
    for line in jsonfile:
        l = json.loads(line)
        if l['title'] == 'イギリス':
            print(l['text'])
            break

以下のように内包表記を使って書こうと思ったけどエラーが出てしまって無理だった。。
44行目を参考にifではなくwhileを使用してみた。
もしPythonの内包表記に終了条件が指定できたら · GitHub

result = [json.loads(line) for line in jsonfile while json.loads(line) != 'イギリス']
json
# 基本的な使い方
import json
fname = open('sample.json')

print (json.load(fname))

・ファイルの入出力(ファイル ⇔ Pythonオブジェクト)

load() JSON形式のファイルを読み込んでPythonオブジェクトへ
読み込んだJSONファイルは辞書型で保存される
dump() PythonオブジェクトをJSON形式でファイルに書き込み
こっちは文字列型で保存される

・オブジェクトの変換(文字列 ⇔ Pythonオブジェクト)

loads() JSON文字列からPythonオブジェクトへ変換(デコード)
dumps() PythonオブジェクトからJSON文字列へ変換(エンコード

19.2. json — JSON エンコーダおよびデコーダ — Python 3.6.5 ドキュメント

gzip
gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

'rt'はread + text
13.2. gzip — gzip ファイルのサポート — Python 3.6.5 ドキュメント

gzという拡張子は見慣れなかったけど圧縮形式の一つで「GNU zip」の略らしい。
gunzipコマンドで解凍可能。




21. カテゴリ名を含む行を抽出

記事中でカテゴリ名を宣言している行を抽出せよ.

素人の言語処理100本ノック:21 - Qiita
参考のQiita記事ではraiseを使った処理を書いているけどtry-exceptとの違いがわかってないのでメモる。

import gzip
import json
import re
fname = 'jawiki-country.json.gz'

def get_UK_article():
    with gzip.open(fname, 'rt') as jsonfile:
        for line in jsonfile:
            line_json = json.loads(line)
            if line_json['title'] == 'イギリス':
                return line_json['text']

    raise ValueError('Not Found Article.')


# 正規表現のコンパイル
pattern = re.compile(r'^(.*\[\[Category:.*\]\].*)$', re.MULTILINE + re.VERBOSE)

# 抽出
result = pattern.findall(get_UK_article())

for line in result:
    print(line)

# [[Category:イギリス|*]]
# [[Category:英連邦王国|*]]
# [[Category:G8加盟国]]
# [[Category:欧州連合加盟国]]
# [[Category:海洋国家]]
# [[Category:君主国]]
# [[Category:島国|くれいとふりてん]]
# [[Category:1801年に設立された州・地域]]
正規表現
メタ文字 説明 使用例
. 任意の一文字 a.c
^ 文字列の先頭 ^abc
$ 文字列の末尾 abc$
* 0回以上の繰り返し ab*
+ 1回以上の繰り返し ab+
? 0回または1回 ab?
.* 任意の文字0文字以上
.*? 任意の文字0文字以上、非貪欲マッチ 貪欲だと後半の"l"で始まる装飾を巻き込んでしまう

Pythonの正規表現の基本的な使い方 | UX MILK

re
raise

22. カテゴリ名の抽出

記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.

素人の言語処理100本ノック:22 - Qiita

import gzip
import json
import re
fname = 'jawiki-country.json.gz'

def get_UK_article():
    with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile:
        for line in jsonfile:
            line_json = json.loads(line)
            if line_json['title'] == 'イギリス':
                return line_json['text']

    raise ValueError('Not Found Article.')

pattern = re.compile(r'^.*\[\[Category:(.*?)(?:\|.*)?\]\].*$', re.MULTILINE + re.VERBOSE)

result = pattern.findall(get_UK_article())

for line in result:
    print(line)

# イギリス
# 英連邦王国
# G8加盟国
# 欧州連合加盟国
# 海洋国家
# 君主国
# 島国
# 1801年に設立された州・地域

23. セクション構造

記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ.

素人の言語処理100本ノック:23 - Qiita

# 23
import gzip
import json
import re
fname = 'jawiki-country.json.gz'

def get_UK_article():
    with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile:
        for line in jsonfile:
            line_json = json.loads(line)
            if line_json['title'] == 'イギリス':
                return line_json['text']

    raise ValueError('Not Found Article.')

pattern = re.compile(r'^(={2,})\s*(.+?)\s*\1.*$', re.MULTILINE + re.VERBOSE)

# 抽出
result = pattern.findall(get_UK_article())

# 結果表示
for line in result:
    level = len(line[0]) - 1
    print('{indent}{sect}({level})'.format(
        indent='\t' * (level - 1), sect=line[1], level=level))
    
# 国名(1)
# 歴史(1)
# 地理(1)
# 	気候(2)
# 政治(1)
# 外交と軍事(1)
# 地方行政区分(1)
# 	主要都市(2)
# :
# :

24. ファイル参照の抽出

記事から参照されているメディアファイルをすべて抜き出せ.

素人の言語処理100本ノック:24 - Qiita