読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

駅メモ #20:久々の遠征

遠征といっても行先が旦那実家なので、往復のルートを工夫して若干増やしただけですが。
会津田島~浅草間の新しいリバティに乗ってきました。
栃木の山奥の電波とGPSが悪すぎて飴とレーダーとビューンを駆使する羽目に…。
位置飛び先で固定されまくるのもイラッとするけどその位置飛び先が会社と至近距離っていうのがつらい。なんでよりによってそんなところに…。

称号イベントは無事50個達成。最終的に68個。
今月の新駅イベントは250駅達成しているのでまあとりあえず満足。1000駅はきついかな…


↓アクセス済み都道府県が増えているのは盛大な位置飛びの数々により。

進捗:前回(12/26)からの比較

  • 駅 3142 → 3291(+149)
  • 路線 375 → 388(+13)
  • 都道府県 31 → 34(+3)
  • コンプ路線 180 → 186(+6)

育成進捗 ()内は前回比
[S]セリア 42/80 (Lv23up)
[T]みろく 11/75 (Lv3up)
[S]レイカ 16/70 (上限5up)
[T]シーナ 10/70 (Lv3up)
[D]しいら 12/75 (Lv1up)
[D]もぼ 12/60 (Lv2up)
[T]にころ 54/65 (上限5up)
[A]レン 12/80 (Lv4up)
[T]みらい 12/75 (Lv2up)
[D]ベアトリス 14/65 (Lv5up)
[S]うらら 50/75 (上限5up)
[A]ほこね 17/80 (Lv8up)
[A]リオナ 14/65 (Lv7up)
[A]レーノ 10/80 (Lv2up)
[D]ありす 77/80 (Lv4up)
[D]いおり 16/80 (Lv2up)
[S]ミオ 13/80 (Lv7up)
[A]ハル 12/60 (Lv4up)
[D]にちな 10/70 (Lv1up)
[A]そら 11/80 (Lv3up)
[A]さいか 17/65 (Lv4up)
[T]あたる 11/50 (Lv10up)
[S]スピカ 51/60 (Lv1up)
[D]メイ 6/60 (Lv5up / 上限5up)
[D]なほ 12/55 (Lv5up)
[S]ヒメギ 9/55 (Lv8up)
[A]ノア 14/50 (new!)
[T]マリン 8/50 (Lv3up)
[T]なより 11/50 (Lv1up)
[S]ひまり 11/50 (new!)
[A]Liko 11/80 (Lv5up)
[T]ハッカ0号 1/50 (new!)
[T]ハッカ1号 7/50 (Lv6up)
[T]ハッカ2号 5/50 (Lv4up)
[T]ハッカ3号 8/55 (Lv7up)
[T]ハッカ4号 1/50 (new!)
[T]雪ミク 12/50 (Lv4up)
[D]シアン 14/50 (Lv9up)
[A]チュチュ 8/50 (Lv3up)
[S]レトリー 47/60 (Lv12up)
[T]モア 8/55 (Lv2up)
[T]アイレーン 9/50 (Lv3up)

未所持(コラボ除く)

  • なつめ

称号イベントのためのお仕事回数稼ぎにより、Lv低めの子がちょっとずつ底上げされた形。

その他進捗はこちら。
駅メモ:でんこ育成状況とコンプ進捗状況 - アナログCPU:5108843109


自分用育成メモ:

相変わらず、(防御寄りの)サポーター優先。

  • もし上限突破したら最優先:ふぶ>アサ
  • Lv50目指す:セリア>レトリー
  • Lv60目指す:スピカ>くに>みこと>セリア>レトリー

あとは、称号イベントはまたあるかもしれないし
育成に飽きたときにでも、あまり使わなそうなでんこのお仕事称号を寸止めにしておこうかと思います。

駅メモ #19:久々に進捗

まあ最近は特に遠征とかもしていないのですが。

進捗:前回(12/26)からの比較

  • 駅 3134 → 3142(+32)
  • 路線 375 → 375(+2)
  • 都道府県 31 → 31(+0)
  • コンプ路線 179 → 180(+2)

育成進捗 ()内は前回比
[S]セリア 19/80 (Lv11up)
[A]メロ 30/75 (上限5up)
[T]みろく 8/75 (上限5up)
[T]いろは 51/60 (Lv16up)
[S]ふぶ 75/75 (Lv7up)
[T]ダッチュー 50/60 (上限5up)
[A]イムラ 50/75 (上限5up)
[D]ベアトリス 9/65 (上限5up)
[S]うらら 50/70 (上限5up)
[A]ほこね 9/80 (上限5up)
[A]リオナ 7/65 (上限5up)
[T]エリア 18/65 (上限10up)
[S]みこと 50/80 (Lv27up / 上限5up)
[D]くに 50/65 (Lv21up)
[S]アサ 75/75 (Lv5up)
[A]さいか 13/65 (上限5up)
[S]スピカ 50/60 (Lv4up / 上限5up)
[D]メイ 1/55 (上限5up)
[T]マリン 5/50 (new!)
[T]なより 10/50 (new!)
[T]雪ミク 8/50 (new!)
[D]シアン 5/50 (new!)
[A]チュチュ 5/50 (new!)
[S]レトリー 35/60 (new!)
[T]モア 6/55 (new!)
[T]アイレーン 6/50 (new!)

未所持

  • なつめ
  • ノア

駅奪取コラボが終わりそうですが、ダッチューはLv60が上限になりました。
ラッピングは小悪魔とハロウィンを確保。かわいい。

あとは、ほこね・みことの上限が80になりました。
最近はレトリーちゃん溺愛中。

その他進捗はこちら。
駅メモ:でんこ育成状況とコンプ進捗状況 - アナログCPU:5108843109


自分用育成メモ:

称号イベントが発表されたので当分はお仕事回数調整に徹する感じ。
それは置いとくとすると、

しばらく育てていたいろは、くに、みことが無事Lv50になったのでセリアさん育成中でした。
(ここしばらくレトリーちゃんに持ってかれてますが)

レトリー>セリア>しぐれ>ひいる>カノン>レイカ>ヒメギ>ミオ
という感じかな。
飽きたらサポーター以外に走る。

  • もし上限突破したら最優先:ふぶ>アサ
  • Lv50目指す:レトリー>セリア
  • 次点:しぐれ>ひいる
  • 気が向いたら:カノン>レイカ>ヒメギ>ミオ

ある文字列について、特定文字以外が含まれている場合に取り除く関数

正規表現を使わない書き方。
例えば「ある文字列について、半角英数以外の文字を削除したい」という場合などに。

'*
'* StrFilter
'* ある文字列について、特定文字以外が含まれている場合に取り除く(もしくは置換する)関数
'*
'* [in]  sStr     対象文字列
'*       sInstead 置換する文字(指定がなければ空、つまり特定文字以外を削除する)
'* [out] 処理後の文字列
'* 
Private Function StrFilter(ByVal sStr As String, Optional ByVal sInstead As String = "")
    
    Dim i As Long
    Dim sFilter As String

    ' フィルタ文字列(含まれてよい文字をすべて記載)
    sFilter = "abcdefghijklmnopqrstuvwxyz0123456789"
    
    ' 対象文字列を1文字ずつ順番に参照
    StrFilter = ""
    For i = 1 To Len(sStr)
        If InStr(sFilter, Mid(sStr, i, 1)) Then
            StrFilter = StrFilter & Mid(sStr, i, 1)
        Else
            StrFilter = StrFilter & sInstead
        End If
    Next
    
End Function

呼び出し元は例えばこんな感じ。

' 「bchoge1」が表示される
Debug.Print StrFilter2("Abc_hoge_1")

' 「*bc*hoge*1」が表示される
Debug.Print StrFilter2("Abc_hoge_1", "*")

htpasswdでつまづいた件

※ほとんどネタ記事です。ちゃんとヘルプを読もうね、という話。


basic認証のユーザーを追加することになったのでググる

「よし、htpasswdというコマンドを使うんだな!」
「使いそうなオプションはbとmとnあたりかな!」
(※ b:パスワードを引数に渡すことができる
   m:md5でハッシュする
   n:実際には追加されず、確認用の表示だけする)

ということで試してみる。

まずは怖いのでパスワード用ファイルをコピー。

# cp .htpasswd .htpasswd_bk

これで壊れても大丈夫。

よし、ググった情報を参考にさっそくコマンドを打ってみよう!

# htpasswd -b -m -n .htpasswd testuser testpass

どれどれ…

Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

いや使い方なんか聞いてねーし。
でもなんか間違えてるってことだよな…

つーかオプションは別にまとめてもいいよね。

# htpasswd -bmn .htpasswd testuser testpass

とりあえずまとめた。

Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password
(以下略)

まあそうだよね!!!

その後もいろいろ試す。

オプションを入れ替えたり

# htpasswd -nbm .htpasswd testuser testpass

md5やめてデフォルトにしてみたり

# htpasswd -nb .htpasswd testuser testpass

オプションを消してみたり

# htpasswd .htpasswd testuser testpass

既にrootなのにsudoつけてみたり

# sudo htpasswd -n .htpasswd testuser testpass

何故か中途半端にオプション分けてみたり

# htpasswd -nb -m .htpasswd testuser testpass

パスワードを引数にするオプションとパスワードを外してみたり

# htpasswd -n .htpasswd testuser

ファイル名書き忘れたり

# htpasswd -bm testuser testpass

ファイル名書き忘れたままmd5オプション消してみたり

# htpasswd -b testuser testpass

さらにパスワードも消えたり

# htpasswd -b testuser

あっやべえいつの間にかnオプション消してたわ、と書き換えたり

# htpasswd -n testuser

New password:

…ん!?
なんか出た!!

Re-type new password:

これは!!!

testuser:qwertyuiop@[

初めて成功したのでは!!!!

意気揚々と.htpasswdをcatするが、増えてない。

なんでや!と思って自分の書いたコマンドをよく読む。
…ファイル名抜けてるじゃん!!!!!(ここで初めて気づいた)
というかそもそもnオプションついてるもんね!!!(明らかに疲れている)

もうね。アボカド。バナナかと。(古い)

nオプションのおかげでどこも書き換わったりはしていないのが救い。

でもこの一歩は大きい。
今度はきちんとファイル名指定しよう。

# htpasswd -n .htpasswd testuser
Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

…。

……。

なんでや!!

まあ確かに全く同じコマンドを既に試しているな…と脱力。
えーもうやだー…と思いながらこのヘルプのようなものをぼけっと眺めているとあることに気付いた。

htpasswd [-cmdpsD] passwordfile username

htpasswd -n[mdps] username

…nオプション付けたらファイル名指定不可なのか…orz

orz

ということで、迷走しまくった挙句、最終的に

# htpasswd .htpasswd testuser

という、どシンプルなコマンドで解決したのでした。おしまい。
md5すら不要だった)




いくら英語嫌いでも、コマンド例くらいは見ようね!!

orz




…間違ったコマンドまみれの記事なので、せめてきちんと動作するコマンド例も置いとこ…

カレントディレクトリ以下にある「.htpasswd」に「testuser」ユーザーを追加する
パスワードは後から2回聞かれる
mを追加するとmd5ハッシュ

# htpasswd .htpasswd testuser
# htpasswd -m .htpasswd testuser

「testuser」ユーザーを追加しようとすると実際に何が追加されるのかプレビューされる
パスワードは後から2回聞かれる
mを追加するとmd5ハッシュ

# htpasswd -n testuser
# htpasswd -nm testuser

bオプションを使用して、IDとパスワードの両方を引数に渡すことができる
mを追加するとmd5ハッシュ

# htpasswd -b .htpasswd testuser testpass
# htpasswd -bm .htpasswd testuser testpass

番外:ユーザーを削除する

# htpasswd -D .htpasswd testuser

ExcelVBA入門 #10:定数を定義することとそのメリット

はじめに

久しぶりの記事追加です。
今回は、地味ながらもプログラミング言語問わずの人気者、「定数」について。

定数って何?

もしかしたら、中学か高校かの数学の時間に聞いたことがあるかもしれません。
それとだいたい同じで、「値が変化しないもの」です。

ちょっとVBAで書いてみましょう。
商品価格に消費税を加えた合計金額を計算するプログラムです。

Public Sub calcSum()
    Dim lSum As Long
    Dim lItemPrice1 As Long
    Dim lItemPrice2 As Long
    
    lItemPrice1 = Range("A1").Value
    lItemPrice2 = Range("A2").Value
    
    lSum = 0
    lSum = lSum + lItemPrice1 * 1.08
    lSum = lSum + lItemPrice2 * 1.08
    
    MsgBox "合計は" & lSum & "円です。"
End Sub

ここで、「1.08」は定数です。
セルのアドレス「A1」と「A2」も定数といえます。

これで何か問題あるの?

さて、ここで消費税が10%になったら…?
「1.08」を「1.1」に書き換える必要がありますね。
商品価格を保存するのが「A1」「A2」以外のセルになったら…?
これも「A1」「A2」を別のセルに変える必要がありますね。
数行しかないプログラムなのでまだともかく、ちょっと大きなものになると、全部書き換えるのは大変なことです。

じゃあどうすればいいの?

プログラムを最初から以下のようにしておきます。

Const TAX As Double = 1.08
Const ITEM_1_RANGE As String = "A1"
Const ITEM_2_RANGE As String = "A2"

Public Sub calcSum()
    Dim lSum As Long
    Dim lItemPrice1 As Long
    Dim lItemPrice2 As Long
    
    lItemPrice1 = Range(ITEM_1_RANGE).Value
    lItemPrice2 = Range(ITEM_2_RANGE).Value
    
    lSum = 0
    lSum = lSum + lItemPrice1 * TAX
    lSum = lSum + lItemPrice2 * TAX
    
    MsgBox "合計は" & lSum & "円です。"
End Sub

関数の前の「Const [定数名] As [型] = 値」で、定数を定義しています。
それから、消費税やセルのアドレスが入っていたところで、定義したものを用いるよう変更しています。
最初に定義しておけば、プログラム中に何度出てきても、変更するときは定義部分だけで済むのです。

尚、定数は最初に書いたとおり「値が変化しないもの」なので、
ここで定義した定数は、プログラム中で変更することはできません。

Const TAX As Double = 1.08

Public Sub calcSum()
    ' だめ(エラーになります)
    TAX = 1.1
End Sub

今回の例のように、
「(いつか変更する可能性はあるけれど)プログラムの動作中には変わらない数字や文字」を定義すると良いです。

おしまい

コード中に直接埋め込まれている数字を「マジックナンバー」と呼びます。
(一般的にはどうか知りませんが、新入社員の頃にそういう話を聞きました)
「なんの数字かわかんないけどちゃんと動く!不思議!」という皮肉を込めての呼び名だそう。

たしかに定義なんてしなくてもプログラムは動くわけですが、そのうち痛い目を見ます。
簡単なプログラムを書いているうちから、定義して使う癖をつけておくとよいかもしれません。

次回予告

次は…何書こうかな。未定です。

秀丸マクロの登録方法

気が付いたら今までの人生30年の半分は秀丸にお世話になっていました。

中学生の頃から親のPC使ってネットで二次創作小説を探しては秀丸にコピペ、フロッピーディスクに移して自分のPCへ。
自分のPCでもまた秀丸を開いて読み漁る…というオタク。


それはともかく、仕事を始めてからは作業の効率化を図るのに欠かせないのが秀丸マクロになっています。

マクロコードの記事は既にいくつか書いていますが、そもそも作り方をきちんと書いていなかったので残しておきます。

↓マクロのコードサンプル記事はこちら
honey8823.hateblo.jp

①マクロを作って保存

内容は省略しますが。

マクロを書いたら「.mac」という拡張子で保存します。
秀丸で「名前を付けて保存」しようとすると、ファイルの種類としても選択可能です。

保存先はどこでも良いのですが、
マクロファイル用のフォルダは用意されているのでそこに保存するのがベターでしょう。
(保存先のパスはマクロ登録画面で確認できます。詳しくは後述)

②保存したマクロを秀丸に登録

マクロを使うには、秀丸からマクロ登録する必要があります。
メニューバーの マクロ>マクロ登録 を選択すると、以下のような画面が出てきます。

マクロ登録画面
f:id:honey8823:20170120144022p:plain

一番下に書かれているのがマクロファイル保存用のフォルダです。

  • タイトル:任意のタイトルを入力
  • ファイル名:マクロを選択(上記のフォルダ以外にある場合は「...」から選択)
  • 編集:マクロの中身を編集できる

登録したいファイル名を指定して「OK」すれば登録完了です。
1~10に登録したマクロは、「Ctrl+番号(10の場合は0)」で実行できるようになります。

③登録したマクロにショートカットキーを割り当てる

「Ctrl+番号」でも充分便利なのですが、ファンクションキーやマウス操作などに割り当てることもできます。

メニューバーの その他>キー割り当て で設定可能です。
f:id:honey8823:20170120145140p:plain

左側でShift、Ctrl、Altとキーやマウス操作との組み合わせを選び、
右側で割り当てる処理を選びます。上のセレクトボックスを「メニュー/マクロ」にすると、②で登録したマクロが選べるようになります。

もともといろいろな機能が割り当てられているので、普段使っている機能をうっかりつぶさないように気を付けましょう。

駅メモ #18:あけましておめでとうございます

年末年始は愛媛まで行ったり福島まで行ったり。
新駅はそんなに取れていませんが、ミクさんのイベントや駅奪取のイベントがそこそこ進んだので良かったかな。

晴れ着ラッピング…ずるい…かわいい…
とりあえずふぶさんが出るまで回しました。

進捗:前回(12/26)からの比較

  • 駅 3102 → 3134(+32)
  • 路線 373 → 375(+2)
  • 都道府県 31 → 31(+0)
  • コンプ路線 177 → 179(+2)

育成進捗 ()内は前回比

  • [S]ふぶ 68/75 (Lv3up / 上限10up)
  • [S]しぐれ 22/75 (Lv6up / 上限5up)
  • [T]みらい 10/75 (上限5up)
  • [D]ありす 73/80 (上限5up)
  • [S]ミオ 6/80 (上限10up)
  • [D]くに 29/65 (Lv23up)
  • [A]ハル 8/60 (上限5up)
  • [S]アサ 70/75 (上限5up)
  • [S]カノン 19/55 (Lv14up)
  • [S]スピカ 46/55 (Lv4up)
  • [D]なほ 7/55 (上限5up)
  • [S]ヒメギ 1/55 (new!)

未所持

  • なつめ
  • ノア

その他進捗はこちら。
駅メモ:でんこ育成状況とコンプ進捗状況 - アナログCPU:5108843109

福袋を全部買い占めた結果、推し(ふぶ・いずな・ありす・アサ)が全員出てきたり新規ヒメギさんが出てきたりと非常に良かったです。買ってよかった。ノアどの出なかったけど。
スカウトチケットは誰に使うか悩んで温存中。


自分用育成メモ:

引き続きサポーター(+いろは・くに)育成強化中。

まずは久々に上限突破できたふぶさん・アサさんが最優先。

…なんですけど、やっぱりサポーター強化するにしてももっと厳選すべきかと考え中。

アサ・うらら・いろは あたりは入れ替えて使うのでノーカンとして、他に5人選ぶとすれば
ふぶ・スピカ・もえ・みこと・しぐれ…かな。
1人をサポートするだけならみこと・しぐれは両立しないので、あと1人…迷うけどセリアかなあ。
次点以降は ひいる>カノン>レイカ>ヒメギ>ミオ くらいの感じ。
3番目強化のミクさんと姉専用のくにさんは別枠。

そうすると、

  • カンスト目指して最優先:ふぶ>アサ
  • Lv50目指してリンクスコア中心:スピカ>(くに)
  • APorHPが200を超えるまで新駅ボーナス中心:いろは>みこと>しぐれ>セリア
  • カンスト済み:もえ)
  • (Lv50になったので当分保留:うらら)

という感じか。