msftpコマンドが使えない

現象

msshは出来るのにmsftpが出来ない…。

C:\Users\(ユーザー名)>msftp
Traceback (most recent call last):
  File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\Scripts\msftp.cmd", line 42, in <module>
    sys.exit(main())
  File "C:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\Scripts\msftp.cmd", line 39, in main
    return msftp.main("sftp", "sftp")
NameError: name 'msftp' is not defined

環境

  • Windows 10 64bit
  • Python 3.8.1
  • pip 20.0.2
  • awscli 1.17.17
  • ec2instanceconnectcli 1.0.0

解決法

Fix msftp command in windows by Maks3w · Pull Request #13 · aws/aws-ec2-instance-connect-cli · GitHub
このプルリクにあるように、msftp.cmdを↓のように書き換えたらエラーでなくなりました。

def main():
    # return sftp.main("sftp", "sftp")
    # ↓のように書き換える
    return mops.main("sftp", "sftp")

git-svnでsvnのユーザー名を指定する

git-svn(1)に書いてある通り、ssh+svn形式とそれ以外のhttp等では指定の仕方が違うそうです。

http, https, svn--username=ユーザー名

$ git svn clone --username=ユーザー名 svn+ssh://svn.bar.com/project

svn+sshの場合は、URLにユーザー名@を含める

$ git svn clone svn+ssh://ユーザー名@svn.bar.com/project

環境
Git for Windows 2.24.0(2) Git Bash

git svn cloneが出来ない

環境

$ git svn clone -r HEAD svn+ssh://server/trunk/repo
Initialized empty Git repository in  C:/Users/A/directory/.git/
Can't create session: Unable to connect to a repository at URL 'svn+ssh://server/trunk/repo': Error in child process: exec of 'C:\progra~1\PuTTY\plink.exe -l user -pw password' failed: No such file or directory at C:/Program Files (x86)/Git/mingw32/share/perl5/Git/SVN.pm line 148.

結論から言うとエラーになってる'C:\progra~1\PuTTY\plink.exe -l user -pw password' failed: No such file or directoryはシステム環境変数SVN_SSHを参照していました。 それを削除して再度実行したら成功しました。

$ git svn clone -r HEAD svn+ssh://svn.server/trunk/repo
Initialized empty Git repository in C:/Users/A/directory/.git/
user@svn.server's password:
        A       aaa.txt_
        A       bbb.txt
...
Checking svn:mergeinfo changes since r49056: 1 sources, 0 changed
r49056 = d113acc1cbf4ac3064622a0d1f2af403b1b7cee5 (refs/remotes/git-svn)
Updating files: 100% (5745/5745), done.
Checked out HEAD:
  svn+ssh://svn.server/trunk/repo r49056

document.createElement()したやつは繰り返しappendできない

結論から言うとelement.cloneNode(true);してコピーします。

現象

optionを動的に追加しようとしてて、①すべての選択肢を表示するselect②そのうち条件に当てはまるものだけ表示するselelctを追加したかったんです。

<body>
  ①:<select id="option1"></select>
  ②:<select id="option2"></select>
  <script>
    document.addEventListener("DOMContentLoaded", () => {
      const data = [
        {
          value: 1,
          text: '選択肢1',
          flag: true
        },
        {
          value: 2,
          text: '選択肢2',
          flag: false
        },
        {
          value: 3,
          text: '選択肢3',
          flag: true
        },
      ];

      let options1 = document.createDocumentFragment();
      let options2 = document.createDocumentFragment();

      for (let i = 0, len = data.length; i < len; i++) {
        let option = document.createElement('option');
        option.value = data[i].value;
        option.text = data[i].text;

        if (data[i].flag) {
          options2.appendChild(option);
        }
        options1.appendChild(option);
      }

      document.getElementById('option1').appendChild(options1);
      document.getElementById('option2').appendChild(options2);
    });
  </script>
</body>

f:id:qroku:20190823162202p:plain

②が表示されないー!!!

調べる

      ...
      // こうすると②だけ表示される
      document.getElementById('option1').appendChild(options2); // appendChildを1→2
      document.getElementById('option2').appendChild(options1); // appendChildを1→2
        ...
        // こうしても②だけ表示される
        if (data[i].flag) {
          options1.appendChild(option); // option1に変更
        }
        options2.appendChild(option); // option2に変更
      }

      document.getElementById('option1').appendChild(options1);
      document.getElementById('option2').appendChild(options2);

後からoptionを参照した方が表示されるっぽいですね。

解決策

optionをコピーしたらできました。

      ...
      for (let i = 0, len = data.length; i < len; i++) {
        let option = document.createElement('option');
        option.value = data[i].value;
        option.text = data[i].text;
        
        let option2 = option.cloneNode(true); // これを追加して

        if (data[i].flag) {
          options2.appendChild(option2); // ここをoption2に書き換え
        }
        options1.appendChild(option);
      }
      ...

f:id:qroku:20190823163757p:plain

javascriptむずかしい…

TestRailApiのstatusesのcolorがわからない

API: Statuses [TestRail Documentation]

response contentの例見るとcolor_*の値こうなってる。

       "color_bright": 12709313,
        "color_dark": 6667107,
        "color_medium": 9820525,

それで、下にこう説明がある。

The color related fields specify the different colors used for a status and are RGB colors.

えっえっ、RGBってrgb(255,255,255)みたいなやつだよね?
9桁じゃないし255超えてるしどういう形式なんだこれ…

と思ったけど、普通に16進数に変換すればカラーコードになります。

12709313 → #c1edc1
6667107 → #65bb63
9820525 → #95d96d

なんで10進数で返してくるのー!!!

確かにそこにあるのにNo such file or directory

php5.5×windows10

windowsでファイルを作成してローカルに保存してchmodするとき、1つのファイルだけ毎回

PHP Warning:  chmod(): No such file or directory

になって困ってました。

結論から言うと、日本語ファイル名(sjis-win)で、ダメ文字「ソ」が入っているファイルだけ失敗していて、うまい回避方が見つけられなかったのでファイル名を英数字で保存することにしました。

えっこれやばくない??不便過ぎない??
って思ったけどphp7.1で解決してるみたいです。

Windows版 PHP 7.1 で日本語パス(パス文字列のエンコーディング)が対応されることによる影響 - Qiita


以下結論にたどり着くまでのログ

パスが間違ってるのかな?

<?php
var_dump(file_exists("c:/test/マルソフト.txt")); // boolean false

えっパス完全に合ってるのにfalse???
とりあえず、一つ上のディレクトリにfile_exists()してみる

<?php
var_dump(file_exists("c:/test/")); //boolean true

一つ上までは存在する…。
日本語ファイル名がダメなのかな?
ファイル名を英数字だけにリネームして再度実行してみる。

<?php
var_dump(file_exists("c:/test/test.txt")); // boolean true

やっぱり日本語ファイル名か。
なにか見えない文字でも入ってる?入ってるとしたらどこだろう? glob()で1文字ずつ確認してみる。

<?php
var_dump(glob("c:/test/マ*")); // array (size=1)
var_dump(glob("c:/test/マル*")); // array (size=1)
var_dump(glob("c:/test/マルソ*")); // array (size=0) empty
var_dump(glob("c:/test/マル*フ*")); // array (size=1)
var_dump(glob("c:/test/マル*フト*"));  // array (size=1)
var_dump(glob("c:/test/マル*フト.txt"));  // array (size=1)

「ソ」が犯人です!!!

Shift_JISのダメ文字 - fudist

ggった結果「ソ」はダメ文字と呼ばれる文字の1つで、そういわれる理由があるそうです………

Maven3で最低限動くプラグインを作ってみる

Maven3で最低限動くプラグインを作って実行してみます。
下記の手順でやっていきます。

  1. mvn archetype:generate -Bでプロジェクトを作る
  2. mvn installする
  3. 実装する
  4. mvn <groupId>:<artifactId>:(<version>:)goalで実行してみる

mvn archetype:generate -B ~でプロジェクトを作る

まずプラグイン用のMavenプロジェクトを作ります。
Maven 3.5のビルドライフサイクルを学ぶ - Qiitaの記事を参考にgenerateしてみる。

> mvn archetype:generate -B -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin -DgroupId=org.sample -DartifactId=hello-maven-plugin -Dversion=1.0-SNAPSHOT

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.179 s
[INFO] Finished at: 2019-05-14T10:24:37+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (C:\Users\A\mvn-plugin\hello). Please verify you invoked Maven from the correct directory. -> [Help 1]
[ERROR]
... 省略 ...

Generateしたいのにpomがないって…?
Error "The goal you specified requires a project to execute but there is no POM in this directory" after executing maven command - Stack Overflow
パラメータをダブルクォートで囲んでもう一回実行してみる。

> mvn archetype:generate -B "-DarchetypeGroupId=org.apache.maven.archetypes" "-DarchetypeArtifactId=maven-archetype-plugin" "-DgroupId=org.sample" "-DartifactId=hello-maven-plugin" "-Dversion=1.0-SNAPSHOT"
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] Archetype [org.apache.maven.archetypes:maven-archetype-plugin:1.4] found in catalog remote
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-plugin:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.sample
[INFO] Parameter: artifactId, Value: hello-maven-plugin
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.sample
[INFO] Parameter: packageInPathFormat, Value: org/sample
[INFO] Parameter: package, Value: org.sample
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: groupId, Value: org.sample
[INFO] Parameter: artifactId, Value: hello-maven-plugin
[INFO] Project created from Archetype in dir: C:\Users\****\hello-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.104 s
[INFO] Finished at: 2019-05-14T10:40:27+09:00
[INFO] ------------------------------------------------------------------------
[0m[0m

出来た!
確認してみます。

>tree
C:.
└─hello-maven-plugin
    └─src
        ├─it
        │  └─simple-it
        ├─main
        │  └─java
        │      └─org
        │          └─sample
        └─test
            ├─java
            │  └─org
            │      └─sample
            └─resources
                └─project-to-test

出来てるっぽいです。

mvn installする

> cd hello-maven-plugin
>mvn install
... 省略 ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:32 min
[INFO] Finished at: 2019-05-14T10:57:52+09:00
[INFO] ------------------------------------------------------------------------

上手くいきました。

実装する

Maven – Guide to Developing Java Pluginsのサンプルを作ってみます。
src\main\java\org\smaple\GreetingMojo.javaを作り、A Simple Mojoをコピペします。
(MyMojo.javaはとりあえず置いときます。)

mvn <groupId>:<artifactId>:(<version>:)goalで実行してみる

作成したプラグインを実行してみます。
mvn <groupId>:<artifactId>:(<version>:)goal形式です。
goal名はGreetingMojo.java@Mojo(name=****)の*****部分です。

> mvn org.sample:hello-maven-plugin:sayhi
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.sample:hello-maven-plugin >--------------------
[INFO] Building hello-maven-plugin Maven Plugin 1.0-SNAPSHOT
[INFO] ----------------------------[ maven-plugin ]----------------------------
[INFO]
[INFO] --- hello-maven-plugin:1.0-SNAPSHOT:sayhi (default-cli) @ hello-maven-plugin ---
[INFO] Hello,world.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.642 s
[INFO] Finished at: 2019-05-14T11:58:25+09:00
[INFO] ------------------------------------------------------------------------

Hello,wold出来ました。

短い形式で実行する設定

Shortening the Command Lineをしたかったんですが${user.home}/.m2/settings.xmlがなかったので作ります。
Maven – Settings ReferenceのQuick Overviewのxmlをコピペして${user.home}/.m2/settings.xmlに保存。
<pluginGroups/>を消して↓に書き換えます。中身はpom.xmlのgroupIdの記述です。

<pluginGroups>
    <pluginGroup>org.sample</pluginGroup>
</pluginGroups>

短い形式で実行してみます。

> mvn hello:sayhi
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< org.sample:hello-maven-plugin >--------------------
[INFO] Building hello-maven-plugin Maven Plugin 1.0-SNAPSHOT
[INFO] ----------------------------[ maven-plugin ]----------------------------
[INFO]
[INFO] --- hello-maven-plugin:1.0-SNAPSHOT:sayhi (default-cli) @ hello-maven-plugin ---
[INFO] Hello,world.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.286 s
[INFO] Finished at: 2019-05-14T12:27:56+09:00
[INFO] ------------------------------------------------------------------------

[INFO] Hello,world.出来てますね!

参考