標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Qiita から回答をいただきました>自作公開OSSに関する解説はガイドラインの「自社の製品の宣伝行為はしない」に抵触しますか?

先日 Qiita に問い合わせてみました:自作公開OSSに関する解説はガイドラインの「自社の製品の宣伝行為はしない」に抵触しますか?という記事を書いたわけですが、 本日返信をいただきました。1営業日とは早い。

zetamatta さまが投稿されている記事を確認させていただきましたが、
ガイドラインが指す宣伝行為には該当しないと判断しております。

上記、宣伝が主目的と読み取れる記事については宣伝行為に当たると判断いたしますが、
技術的な解説が主目的である場合には、対象が個人・法人に関わらず宣伝行為には当たりません。

なお、上記の線引については多くのユーザーさまからもお声を頂戴しておりますため
現在ガイドラインの拡充などの対応を検討中です。
準備ができ次第 Qiita公式ブログ や Twitterアカウント にてアナウンスさせていだきますのでお待ちくださいませ。

> 無罪 <

ご回答、ありがとうございました。これで心置きなく、記事を書けるというものです。 今後ともよろしくお願いいたします。

cd ショートカット.lnk

NYAGOS は cd ショートカット.lnk という書き方をサポートしている。

これは Go言語で実装した内蔵コマンドの cd で直接サポートしているわけではなくて、 nyagos.d\cdlnk.luaという Lua スクリプトcdエイリアスを書き、 その中で nyagos.create_object("WScript.Shell") で COM オブジェクトを生成、 それでショートカットの宛先を問い合わせている。

この「cd ショートカット.lnk」を便利に使うため、 自分は %USERPROFILE% の下に開発ソースフォルダーへのショートカットを多数作っている。

ショートカットは無論エクスプローラでも作れるが、いちいちマウスで操作するのも 面倒なので、lnk.js という JScript を書いている。具体的には下記のようなスクリプトになる。

if( WScript.Arguments.length == 1  ){
    var wshShell = new ActiveXObject("WScript.Shell");
    var lnkSrc = wshShell.CreateShortcut(WScript.Arguments.Unnamed(0));
    if( lnkSrc == null ){
        WScript.Echo("Fail to create ShortCut Object");
    } else {
        WScript.Echo( "    " + lnkSrc + "\n<-- " + lnkSrc.TargetPath ); 
    }
    WScript.Quit(1);
}

if( WScript.Arguments.length < 2 ){
    WScript.Echo(
        "Usage: cscript lnk.js FILENAME SHORTCUT {Option=Value}... make shortcut\n" +
        "       cscript lnk.js SHORTCUT          ... print shortcut-target")
    WScript.Quit(1);
}

var fsObj = new ActiveXObject("Scripting.FileSystemObject");
var src = fsObj.GetAbsolutePathName(WScript.Arguments.Item(0));
var dst = fsObj.GetAbsolutePathName(WScript.Arguments.Item(1));

if( fsObj.FolderExists(dst) ){
    dst = fsObj.BuildPath(dst,fsObj.GetFileName(src));
}
if( dst.length >= 4 && dst.substring(dst.length-4) != ".lnk" ){
    dst += ".lnk";
}
var wshShell=new ActiveXObject("WScript.Shell");
var shortcut1=wshShell.CreateShortcut(dst);

if( shortcut1 == null ){
    WScript.Echo("Fail to create ShortCut Object");
    WScript.Quit(1);
}
shortcut1.TargetPath=src;

if( WScript.Arguments.length >= 3 ){
    for(var i=2 ; i < WScript.Arguments.length ; i++ ){
        var equation = WScript.Arguments.Item(i);
        var pos = equation.indexOf("=",0);
        if( pos >= 0 ){
            equation="shortcut1." + equation.substring(0,pos) + "=\"" +
                    equation.substring(pos+1).replace(/\\/g,"\\\\") + "\"";
            WScript.Echo(equation);
            eval(equation);
        }else{
            WScript.Echo("Equal(=) not found: " + equation)
        }
    }
}
shortcut1.Save()
WScript.Echo("    " + src + "\n--> " + dst);
WScript.Quit(0)

こういうのを作っておくと、Visual Studio の開発フォルダーから

cd ~\PATH\TO\DEVELOP\FOLDER1
lnk.js . ~

とかできる。すると

cd FOLDER1.lnk

だけで深いフォルダーへ一気に移動できて、入力が楽になる

無論、mklink でも同様のことが可能だが、そうするとツールによっては見かけのパス構成が変わってしまって、いろいろ不都合がでる場合もある。こちらの方が手軽で有用ではないかと思われるが、いかがだろうか。

Qiita に問い合わせてみました:自作公開OSSに関する解説はガイドラインの「自社の製品の宣伝行為はしない」に抵触しますか?

こんな感じ。現在、返事待ち返信来ました

自作公開OSSに関する解説はガイドラインの「自社の製品の宣伝行為はしない」に抵触しますか?

わたくし、個人で開発している、Windows用拡張コマンドラインシェル NYAGOS (https://github.com/zetamatta/nyagos)というソフトウェアを New BSD ライセンスにて公開しており、本ソフトウェアの機能についての紹介、解説をたびたび [nyagos] というタグで Qiita 様にて書かせていただいています。

これはこの度公開された「ガイドライン」にございます「自社の技術の利用や導入を勧めることを主目的とする記事等、あからさまな宣伝行為は禁止します」に抵触するでしょうか?

「自社」とあることから法人ならばダメだが個人ならばよいとも解釈可能ですが、法人・個人を分ける合理的理由が思い当たらないため、念のため確認させていただきたいと思った次第です。もし、個人でも自作ソフトウェアの紹介にあたるものは NG であるという判断せざるを得ないようでしたら、御社の主旨に従い該当すると思われる記事を順次ひきあげさせていただく所存ですが、もし Ok であればその旨どこかで明示いただけると幸いです。

お忙しいところおそれいりますが、ご検討のほど、よろしくお願いいたします。

スーパーで…

(twitterから転載)

スーパーで、本来は専用の容器を買わないと取ってはいけない氷を、ポリ袋に取り込んでいるじいさんがいた。 やらしいなぁと蔑むような目で見てしまったのだが、 よく考えればじいさんも好きでそんな卑しいことはしたくはないだろう。 豊かであれば、わずかなお金をけちる真似したくはなかっただろう。

知識人が日本が貧しくなることを肯定するようなことをいっているようだが、 こういう実態をわかっているのだろうか。 豊かであればこそ、守れるマナーも、ルールも、誇りもある。 貧しくなければ、ジャン・バルジャンも銀の食器を盗まなかっただろう。

自分は比較的マナーの類いは守るようにしている(と思う、たぶん、きっと)。 それは親が不自由なく育ててくれて、ちゃんと学校に行かせてくれて、 学をつけてひとりでそれなりに食べていけるようお金をかけてくれたからだ。 貧しくなると、そういうことが難しくなってしまう

国が貧しくなるというのは、国民の気品を保つことがまず「しんどく」なることを、 左翼系知識人は自覚して欲しいものだ。終わり

Visual Studio 2017 の環境の source の仕方

Developper Command Prompt for VS2017 のプロパティーを見るとリンク先は次のとおりとなっています。

%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

ちなみに作業フォルダーは "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\"

これを nyagos で読み込む場合は ~\.nyagos

nyagos.exec{'source',[[C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat]]}

と書きましょう。最新版なら ~\_nyagos

source "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

と書いても Ok です。うまくいかない場合は source の後に-v(画面に読み込み結果やテンポラリファイルの内容を表示する) や-d(テンポラリファイルを消さない)などをつけてみてください(で、ご相談ください)

To Do

Qiitaについて思うところのポエム

Qiitaの新しいガイドラインに対する反発が増えている。自分もどうかと思うところがあった。

新しいガイドラインだと、わたしがNYAGOSでやってるような 「アプリ開発者自身による機能紹介」が「宣伝行為」と解釈可能で、グレーゾーンになるOSSならばよいという話でもないだろう。 一応「自社の宣伝」とあるが、法人と個人を分ける合理的理由が思いつかない。 営利団体ではなく、非営利団体ならよいのか? OSS という無償で配布される成果物に営利か非営利かを分けるラインはあるのか?

「空気読め」という意見もあるが、それで済ますのはよくない。 「忖度」を強いるのは、意思決定に携わる人間の責任をうやむやにする悪しき慣習である

ならばどうすればよいかというと、自分が思うに、 記事の品質の向上はユーザの良識に訴えるのではなく、システムで担保すべきところだろう。 具体的には twitter のような「ミュート」や「ブロック」機能を実装すべきだ。 ブロックなどの否定的な投票が一定数を超えたら、自動でその記事は凍結でよいではないか。

Qiita については、しばらくは投稿を見合わせ、様子見が必要だろう。 なにせ、自分もグレーゾーンに入っているんで。 ただ、よい発表の場なので、失われるのは惜しい。 マークダウンのプレビュースピード速いし。

余談だが「無駄に検索ヒット率が高くなっている」 「質の問題をシステムで担保するのではなくユーザの良識に無駄に訴えた」という点で、 「はてな(ブックマーク)」と「Qiita」は似ている。 ガイドライン作成に逃げたのは、その費用はそれほどかからないというのがあるだろう。 ミュートやブロックなどの開発は結構大がかりでたいへんだというのは想像がつく。

次は nyagos 4.2 になりそう

先日考えた Lua インスタンスをクローンする方式は、 集中してやったら、案外あっさり出来た。

foo = {
    {
        { "bar" }
    }
}

nyagos.alias.foo = function(this)
    print("foo=",foo[1][1][1])
end

こういうコードは、従来の 4.1 では foo=nil となってしまっていたのだが、最新版では foo=bar と出せるようになった。

なぜ 4.1 で期待どおり動かないかは説明しづらく、NYAGOS にとって負い目のような仕様だった。 今回の修正では ~/.nyagos で定義した shareテーブル以外のグローバル変数も、 エイリアス関数・プロンプト関数・一行入力のキー関数のいずれでも参照できるようになった。 これでほとんどの Lua ユーザが戸惑うことはなくなるだろう。

また、今まで無駄に新規 Lua インスタンスを作成していた箇所があり、それでNYAGOSの起動そのものが遅くなっていた。 今回、あくまで新規の goroutine を作った時、すなわち「foo | more」「foo &」などのように、 エイリアスをバックグラウンドで実行させたときだけ Lua インスタンスの作成・クローンを行うようにした。 このコスト削減で、Lua のクローンのコストも相殺されたのではないかと思われる。

ただ、従来の share は廃止しない。というのも、Lua インスタンスのクローンでは、 親(フォアグラウンドgoroutine)→子(バックグランドgoroutine)へと情報が伝わるだけで、 子 → 親へは伝わらないからだ。 使う機会はゼロではないが、念のため、残しておくのが無難だろう。

という感じで、かなり大胆にコードを書き替えた。 それで、安定度は下がったものの、4.1.x の負い目は払拭した。ゆえに次回は 4.2.0 か 4.2-beta というリリースになる予定だ