VB.NET

VB.NETでReDim Preserveを使うくらいなら配列を使うのをやめたら?

はじめに 弊社のブログで現在一番アクセス数が多いのは(個人的には意外ですが)ReDimの記事です。 jyuch.hatenablog.com この記事でもReDim Preserveには否定的な感じで書いていますが、現在でもこの意見は変わりません。 今北産業 添え字操作がバグの温床…

VB.NETでもナウいCIサーバでテストをギュイーンしたい

はじめに この記事はVisual Basic Advent Calendar 2018の15日目の記事です。 どうも、闇落ちJenkinsおじさんです。 オンプレのCIサーバといえばJenkinsが筆頭に上がりますが、Jenkinsのビルド環境が秘伝のタレ化してスレーブを追加する際に死ぬほどコンパイ…

VB.NETでもリアクティブしたい(Akka.NET)

はじめに 2018年は殺伐としたVB.NET界隈にAkka.NETの波が到来します。(しません) という訳であまり需要がなさげなエントリですが*1、ライブラリ自体は結構成熟しているっぽいので実運用に突っ込んでもまぁ行けるんじゃないかなと思います。 Akkaとは Akka…

VB.NETでもパーサコンビネータを実装したい(その2)

はじめに Spracheの一部を移植する形でパーサコンビネータを実装したと言うかしているのでそれについてです。 github.com 前回のはほとんどおもちゃですが、今回は違います。 燻製ニシンの虚偽 例によってあまり真っ当な動機でないのですが、以下の要件を満…

VB.NETでもコマンドライン引数を楽にパースしたい(またの名をVB.NETとF#で連携したい)

はじめに 前になんかいい感じのコマンドライン引数をパースするライブラリを見つけたいとか書いたのですが、DSL付きで見つけました。 なんとこちら、DSLなのに.NETの型システムと高い親和性を持っていたりマイクロソフトがサポートを改めて表明したりと至れ…

VB.NETでもクラスとモジュールの違いを知りたい

はじめに 皆さんは新人くんの VBのクラスとモジュールの違いは何ですか? の質問にどのように答えているでしょうか。 こんな時の対応は大体以下の感じになると思います。 よくわからないから「ググれ」で済ませて軽蔑される 機能面での話をさらっとして尊敬さ…

VB.NETとログについての伺か

はじめに 弊社はロギングライブラリとかの扱いについて割と長い間悩んでいたのですが、自分の中のとりあえずの答えが出たので今回はそんな感じです。 ログライブラリへの強依存 さて、弊社はログライブラリとしてNLogに慣れ親しんでいるのでサンプル中で使う…

VB.NETでもAutofacで依存性を注入したい

はじめに OpenCoverのコードを読んでいたら、AutofacというDIライブラリが使用されており、気になったのでそれについてです。 チュートリアル Getting Started — Autofac 4.0 documentation 大体の手順をざっくりと列挙すると 脳内でいい感じに制御の反転を…

VB15の新機能の確認したい

はじめに 3月7日にVisual Studio 2017がリリースされました。 と言うことで今回も露骨なアクセス稼ぎVB15の新機能を確認していきましょう。 どうでもいいですが、VS2017のアイコンって梵字っぽいですよね。筆で書かれたっぽくして色を周りに合わせたら紛れて…

VB.NETでも遅延バインディングの呼び出し規則を確認したい

はじめに 遅延バインディングを使用したコードを眺めていた時にふと思ったのですが、遅延バインディングはどういう呼び出し規則でメソッドを呼び出しているのだろうと気になりました。 軽く調べてみたところ、言語仕様っぽいのは見つかりませんでした。 分か…

VB.NETでもパーサコンビネータを実装したい

はじめに ヤフーでググったところ、今のところ誰もVBでパーサコンビネータを実装してないっぽかったので実装してみました。 実装にあたり、こちらのブログを参考にさせていただきました。感謝 blog.anatoo.jp .NETのパーサコンビネータライブラリとしてはSpr…

.NET FrameworkのRegexの文字クラスはバグっているのか?

はじめに 正規表現のお話ですが、『.は任意の一文字にマッチする』みたいな文法解説ではありません。 そんなの大手サイトが死ぬほど書いてますしね。 妙なバグを踏み抜くことに定評がある弊社ですが、今回は正規表現の文字クラス関係でわりと意味がわからな…

VB.NETでも文字列オブジェクトのサイズを計算したい

はじめに VBと言ったな。あれは嘘だ。 前の記事でオブジェクトのメモリ上のサイズを計算してみましたが、結局System.Stringのサイズがよく分かんないというなんでそれ書いたんだよって感じのアレになりました。 そのままだとなんか悔しいので、調べなおして…

VB.NETでもオブジェクトサイズの概算をしたい

はじめに この記事はVisual Basic Advent Calendar 2016の11日目の記事となります。 10日目はamay077さんのVB.NET でパスワード付き共有フォルダにファイルをコピーするでした。 数十・数百万オーダーのオブジェクトをメモリ上にのっけてCPUをギュイーンするよう…

VB.NETでも割と楽に状態を扱いたい

はじめに .NETチームのブログを眺めていたところ、面白そうなライブラリを見つけました。 blogs.msdn.microsoft.com github.com オブジェクトの状態遷移を管理するためのライブラリで、状態遷移を引き起こすトリガーとトリガーによって変わる状態を扱ってく…

VB.NETでも制約ソルバーを用いて数独を解きたい その2

はじめに 前回は地獄のSMT-LIBコピペ祭りを経て、z3で数独を解くことに成功しました。 今回はVBから制約を発行してz3に数独を解かせてみましょう。 .NETバインディング z3には.NETのバインディングが用意されており、P/Invoke祭りやCOM祭りをやらなくともz3…

VB.NETでも制約ソルバーを用いて数独を解きたい その1

はじめに マイクロソフト・リサーチが開発しているz3定理証明器に興味を持ったのでそれについてです。 鶴亀算 まずはオンラインのコンソールで鶴亀算を解いてみましょう。 z3はSMT-LIB標準形式のバージョン2を解釈できるのでそれを用いて鶴亀算の各制約を記…

VB.NETでも形態素解析っぽいことをしてExcel方眼紙から漢字を抽出したい

はじめに 皆さんは漢字は得意ですか? 弊社はクッソ苦手です。 パソコンに頼り切っちゃってるのでまぁ当たり前っちゃー当たり前だし、普段パソコンで文章を書くなら別に困りもしないのですが、打ち合わせの時に書記でホワイトボードに書くときに漢字が書けなく…

VB.NETでもWinDbgしたい

はじめに この記事はWinDbgで.NET Frameworkのデバッグをするときのコマンドの備忘録です。 解説はありません。希望もありません。 ダンプの取得 ダンプは別途ソフトウェアをインストールする必要なく、タスクマネージャから取得することが可能。 しかし、ダ…

VB.NETは解析されやすいのか?(その2)

はじめに jyuch.hatenablog.com 前回はildasmを用いた逆アセンブルとプログラムに出現する文字列から当該処理を行う箇所を特定し、特定の処理の迂回をやってみました。 今回はデバッガを用いて実際の動作を覗いてみましょう。 動的解析 ところで、前回アセン…

VB.NETは解析されやすいのか?(その1)

はじめに C#やVBなどの.NET言語はリバースエンジニアリングに弱いと言われています。 ちょっとした用事でソースコードを紛失したライブラリを解析してその事を実感したので今回はその事です。 イントロ それではまず、VB*1のコンパイルの過程をおさらいしま…

VB13以前でもNull条件演算子を使いたい

はじめに ちょっと前にVB14の新機能についての話をしたじゃないですか。 その中にNull条件演算子なんてものがあったと思います。 弊社はEntity FrameworkみたいなライブラリでFirstOrDefaultみたいなクエリを割合ぽいぽい投げ返ってきた値がNothingかそうで…

VB.NETでも処理を高速化したい その2

はじめに ブログのアクセス解析を見るとプログラムの高速化についての記事へのアクセスが多いですね。 jyuch.hatenablog.com こんな具体性のない記事が『VB 高速化』での検索の割と上位に出てきてしまうのはさすがに申し訳ないので、今回はちょっとだけ具体…

VB.NETは共通言語仕様の夢を見るか?

はじめに .NET Frameworkは言語に依存しないプラットフォームです。 つまり、C#で書かれたライブラリをVBで利用できたり、その逆が出来たりします。 じゃあ、C#で書かれたコードを全てVBで利用できるかといったら、そうではありません。 public class Class1…

VB.NETでもside-by-side実行をしたい

はじめに はじめに一つ釈明といいますか謝罪的なアレなんですが、タイトルにVB.NETと冠していますが正直VBほとんど関係ありません。 サンプルコードにVBを使ってるだけで正直C#でもVBでも大して変わりません。 side-by-side実行とGAC(グローバル・アセンブ…

VB.NETでもMono.Cecilでアセンブリを書き換えたい

はじめに 今回はMono.Cecilを扱います。 Mono.Cecilとは何ぞやと言いますと In simple English, with Cecil, you can load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified a…

.NETのボックス化は遅いのか?

はじめに ちょっとした用事でVBの遅延バインディングが遅い上にOption Strict Offじゃないと使えないというやっぱりVBはクソVBはこういうところで小回りが利かないな〜という問題に対して、自前で遅延バインディングを実装してみればいいんじょないかとマリー…

VB.NETでもDLLをアンロードしたい

はじめに この記事はVisual Basic Advent Calendar 2015の6日目のエントリです。 今回はちょっとした理由で自前でプラグインっぽい何かの仕組みを構築する都合があったので、それについての記事です。 やりたい事 今回の仕組みの前提として大体以下のような…

VB.NETでもFizzBuzzを書きたい

はじめに ちょっと興味があったのでVisual Basic Advent Calendar 2015に参加しようと思いました。 そこで、はてなブログには予約投稿機能があるということでそれを利用しようと思ったのですが、初めて使う機能をいきなり本番に突っ込むのはアレかなと思い、…

VB.NETでもリフレクションとT4を使ってINotifyPropertyChangedを自動実装したい

はじめに INotifyPropertyChangedってあるじゃないですか。あのひたすら実装が面倒なアレです。 今回はそのクッソ面倒なINotifyPropertyChanged*1の実装をリフレクションとT4を使って自動実装した時の記事です。 先人たちが100000000回くらい辿った内容なのでも…