Win32エラーコード一覧のページを更新しました!
Windowsのエラーコードを FormatMessage() で抽出しただけのページを更新しました! 忘れてないよ! 更新しようと思い続けてたんだよ!マジで! ちなみに前回は 2005年4月に更新していたらしので、実に12年ぶりの更新となりました。 …そんだけHP続けてるとかマジか…… そんだけ歳食ったとかマジグホァ(血
なお、次の環境で出力しています。
- Win10 1703 Creators Update
- VC2017
また、エラーコード一覧を C# / Java にも移植しましたので是非ともご利用しないでください。 C# / Java で WinAPI に用事があるようなコード書いちゃダメデショー!!
どうぞご利用ください (どっちやねん
… "死亡"してない記事書いたの久しぶりなきがするじぇ……
Visual Studio 2017 Community のインストーラーが死んで死亡
Visual Studio 2017 Community をメインPCにぶち込むぜ!ヒャッハー!! …ハイテンションwktk全裸でインストーラを実行しましたが、エラーが出てインストールできませんでした…。 が、問題が解決できたのでその報告。
条件
対策
- 服を着用します
- TSUTAYA で DOG DAYS の DVD をレンタルしてきます
- Windowsサービス "CNG Key Isolation" を起動させます。
- Visual Studio 2017 のインストーラーを起動します。
- 借りてきたDVDを鑑賞しながらインストール完了を待ちます
…というわけで "CNG Key Isolation" のサービスが起動していなかった事が原因でした。
調査方法
%tmp% に dd_bootstrapper_*.log なんてログが出力されます。 その中には次のような文言がありました。
VisualStudio Bootstrapper:2017/04/30 16:15:21: Caught Exception: Type = CryptographicException, Message = エンドポイント マッパーから使用できるエンドポイントはこれ以上ありません。
, StackTrace = 場所 System.Security.Cryptography.NCryptNative.OpenStorageProvider(String providerName)
場所 System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters)
場所 System.Security.Cryptography.RSACng.get_Key()
場所 System.Security.Cryptography.RSACng.Encrypt(Byte data, RSAEncryptionPadding padding)
場所 System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(Byte rgbData)
場所 System.Security.Cryptography.CngLightup.DetectRsaCngSupport()
あー、署名周りで死んでるねーと。
…で、ググってみたりもしたんですが、Firewall だか WindowsUpdate だか ActiveDirectory とかが引っかかってなんか違う感。 ぶっちゃけよくわからねぇ(ぉ 仕方ないのでノリでサービス周りだろうなぁという直感を元に一覧から crypt に関係するサービスを起動させてみたらなんか上手くいきました! やったねタエちゃん!! また一つ無駄に Visual Studio が増えるよ!!
VS2015 を1回起動しただけで VS2017 をぶち込んでる程度の能力
gawk「cmd. line:1: (FILENAME=- FNR=1) fatal: print to "standard output" failed (No space left on device)」で死亡
コマンドプロンプトで Gow に収録されている gawk(GNU Awk 3.1.0) を使用すると、以下のメッセージを吐きグズりはじめることがあります。 どうやら日本語を吐こうとすると死ぬ模様。 粗相
gawk: cmd. line:1: (FILENAME=- FNR=1) fatal: print to "standard output" failed (No space left on device)
対策
http://www.hinadori.atnifty.com/~wills/ さんで配布されている、マルチバイト対応の gawk を使用しましょう。 GNU Awk 3.0.6 ベースとちょっと古いですが何とかなるでしょううん(他人事
文字列比較を == して死亡どころか大爆死
public boolena empty(String s) { return (s == null) || (s == ""); }
なんてJavaで書いちゃって死亡。 後者は "".equals(s)
が正しいですね。すいませんマジすいませんでした。おのれJava!!
とはいえ、JUnitでテストした関数だったんですよ。 問題ないじゃーんと。
assertTrue(empty(null)); // OK! assertTrue(empty("")); // OK!
ですが、この empty()
を本番コードで以下のように使っていました(イメージ)
final String csvData = ",,,"; // テストで空カラムデータを投げた final String[] cols = csvData.split(","); if(empty(cols[0])) return false; if(empty(cols[1])) return false; if(empty(cols[2])) return false; : :
ステップオーバーで if() を素通りする姿に 10秒ぐらい頭真っ白になったね! そうだよね! コード直書きの空文字 "" のインスタンスは同じ可能性があるけど、split() して誕生した空文字 "" はインスタンスまず別だよね! そりゃ false だよね!
…いやーもうなんか恥ずかしい。 おのれJava!!
yaccで死亡
正確には ply の yacc ですけどももも
…いやぁ全然概念が判らなくて大苦戦ですわ(苦笑
学習がてら、以下に合致するパーサーを作ろうかと思ったわけです。ドット区切りで要素3つまで。
- a
- b.a
- c.b.a
- 正規表現的にはこんな感じ → ((\w+\.)?\w\.)?\w+
イメージ的には foo.ir9.jp / ir9.jp / jp を解析するパーサーを作りたい的な。 で、こんな感じなの書きました
## lex tokens = ( "NAME", "PERIOD", ) t_NAME = r"\w+" t_PERIOD = r"\." ## yacc def p_host(p): """ host : NAME PERIOD NAME PERIOD NAME | NAME PERIOD NAME | NAME """ p[0] = ''.join(p[1:]) yacc.yacc() print(yacc.parse("c.b.a")) # c.b.a print(yacc.parse("b.a")) # b.a print(yacc.parse("a")) # a
動きました。良かったよかった!
…ではあるんですが、各NAMEの要素に名前というか意味合いを付けたほうがよいのかなと。今後各要素に適用できる文字の定義を変えるかもしれないし! …ってことで、次のように改修してみました。 "[ [sub . ] domain .] cont" というイメージ。
## lex tokens = ( "NAME", "PERIOD", ) t_NAME = r"\w+" t_PERIOD = r"\." ## yacc def p_host(p): """ host : domain PERIOD cunt | NAME """ p[0] = ''.join(p[1:]) def p_cunt(p) : """ cunt : NAME """ p[0] = p[1] def p_domain(p) : """ domain : sub PERIOD NAME | NAME """ p[0] = ''.join(p[1:]) def p_sub(p) : """ sub : NAME """ p[0] = p[1] yacc.yacc() print(yacc.parse("c.b.a")) # a // Syntax error at line 1, token=PERIOD print(yacc.parse("b.a")) # b.a print(yacc.parse("a")) # a # WARNING: 1 reduce/reduce conflict # WARNING: reduce/reduce conflict in state 3 resolved using rule (domain -> NAME) # WARNING: rejected rule (sub -> NAME) in state 3 # WARNING: Rule (sub -> NAME) is never reduced
ダメだってさ!
…って所でめっちゃ詰まってます。 おそらく「スタックに NAME 積んだ後 PERIOD 来ると、domain なんだか sub なんだか判断つかねぇんだよ!2回死ね!それと便座カバー」って事だとは思っているんですが、いかんせん yacc の挙動・動作・考え方が解っていないため全く確信が持てず。 ついでに解決方法も良くわからん… そもそもコレ「右結合」なんじゃないのと思いつつ、それがどう記述に影響してくるのか・考え方にどう影響してくるのかとかもよくわからず… ぐぬぬ……
構文解析難しいわ…
pythonおじさん、JavaScriptの "this" で無事死亡
// jquery ロード済みとする var CRozen = (function() { var ctor = function(msg) { this.msg = msg; }; var p = ctor.prototype; p.echo = function() { alert(this.msg); }; return ctor; })(); var kana = new CRozen("kashira!!"); $(kana.echo); // onload 時にコールバック!
undefined …だと……?
thisがなんかおかしい…という事は、原因は $() の中身だろうということでちょっと書き換えた所、期待通りの動作に。
// jquery ロード済みとする var CRozen = (function() { var ctor = function(msg) { this.msg = msg; }; var p = ctor.prototype; p.echo = function() { alert(this.msg); }; return ctor; })(); var kana = new CRozen("kashira!!"); $(function(){ kana.echo(); }); // onload 時にコールバック!
うむ。
JavaScriptの 関数オブジェクトは、this を自動で紐付けてくれないものなんですねぇおのれ…!!
python文化のおじさんなので、this(ってか self)を自動で引っ張ってくれるイメージがデフォだったんじゃ…!
class CRozen : def __init__(self, msg) : self.msg = msg def echo(self) : print(self.msg) kana = CRozen("kashira!!") fn = kana.echo fn() # kashira!!