Karakuri.com

ベンチャー企業で働くソフトウェアエンジニアの技術録

C#

言語設定によって小数点や桁区切り文字が違って海外で不具合が起きる話

前職は世界中で開発したソフトウェアを販売しており、同じWindowsでも日英中韓台独仏伊と8か国くらいの言語版でテストしてたりしました。するとドイツ版で変な挙動をするという報告を受けました。どうも数値がおかしくなるんだそうです。それで当時調べてみ…

C#でcsharp2nemを使ってXEMやモザイクを任意のウォレットへ送金する

先日はcsharp2nemを使ってNEMのウォレットの情報を取得する方法について書きました。 www.k-karakuri.com 今回はcsharp2nemを使ってXEMやモザイクを送信する方法について書きます。 csharp2nemを使って送金の準備をする 接続するネットワークを選択する 前回…

C#でcsharp2nemを使ってNEMのウォレットの残高などの情報を取得する

NEMはRESTFulな思想で開発が容易という特徴がありますが、さらに各言語にライブラリが公開されているので、NEMのブロックチェーンから情報を取得するのが容易になっています。今回はC#向けのライブラリであるcsharp2nemを使ってNEMのウォレットの情報取得を…

C#のTaskを使った非同期処理のタイムアウトの実装方法について

C#

データ量に比例して処理時間が増えるコードを非同期処理で実行していたのですが、データ量が少ないとプログレスリングがすぐ消えて画面のチラつきになってしまうことがありました。このため、処理時間が一定以上の場合はプログレスリングを表示し、一定未満…

レガシーコードの特徴を具体的な4つの例を示して問題点をまとめます

C#

新卒で入社した企業では20年物のソースコードが現役で動いていたりしました。しかも協力会社に丸投げした部分やインドにオフショアした部分などが入り混じってカオスとなっていました。エンジニアも玉石混在で、カオスに練度の低いエンジニアが保守拡張した…

SwiftのisEmptyやCountはnilを返す可能性があることを忘れてしまう

C#でstring.Emptyを多様しているせいか、SwiftのisEmptyがnilとなることを想定せずにクラッシュさせてしまったことが昔ありました。そのときPlaygroundで挙動を確認したことがあったので、その結果を載せておきます。 nilの可能性を忘れてしまう変数 isEmpty…

C#でもvarを使うべき3つの理由|Microsoftも使用を推奨

C#

前職でコーディング規約を整備しましょうという話になり、配られたコーディング規約にC#の型指定でvarを使うという内容がありました。新卒の研修の際にはvarはネガティブな説明だったので驚いたのですが、採用した理由はMicrosoftのコーディング規約を参考に…

TryParseを例外発生の防止に使うのは間違った使い方

C#

C#でTryParseは安全な型変換のために使われますが、単に例外を回避するためだけに使っているケースがあります。今回はTryParseのアンチパターン(悪い使い方)と正しい使い方について書きます。 TryParseの間違った使い方 問題回避の先延ばし string str = n…

XAMLのBindingが途中で動かなくなる現象の原因を調べてみました

XAMLにBindingしていたプロパティが、あるタイミング以降に変更が反映されなくなる現象に遭遇しました。原因はBindingしているプロパティに値を直接代入するコードが実行されていたためでした。 問題の現象の詳細 問題のコード <TextBlock Text="{Binding Message}" Name="Message"/> XamlでViewModelのプロパティ</textblock>…

はてなブログのフォトライフにアップロードした画像を一括ダウンロードするWPFアプリケーションをC#で開発しました

はてなブログにはブログのバックアップサービスがありますが、残念ながら画像ファイルのバックアップはできません。アップロードした画像はフォトライフというサービスで管理されているのですが、ブログと違うサービスのせいなのか、連動してバックアップを…

C#でcoincheckのPrivate APIを利用するための認証SIGNATUREの作り方

株やFXはAPIが用意されていないのですが、仮想通貨取引所はどこもAPIを用意しています。coincheckも例外ではなくAPIを利用してBitcoinのレバレッジ取引ができます。つまりは自分でシステムトレードプログラムを作ることができるというわけですね。個人の口座…

Image.FromFileはファイルをロックしてIOExceptionを発生させる原因になるので使うのをやめましょう

ユーザーに画像を選択してもらうアプリケーションを作成する場合、画像ファイルをローカルに保存することになると思います。このプレビュー画像をアプリケーションに表示しようとしたときに、このローカル画像を読み込まなければなりません。このときにImage…

C#と.NET FrameworkのみでJsonWebTokenを使ったJson署名を実現する方法

JSONのHTTPSによるやり取りにJson Web Token(JWT)という規格があります。JSONに署名して中間者攻撃や悪意ある送信元からのAPI利用を防ぐことができます。しかし当然ながら.NET Frameworkにはそのようなライブラリは存在しません。Nugetにも該当するライブラ…

WPFのXAMLのListViewのマウスオーバーや行選択時のハイライトを無効にする

WPFのListViewを使ってリッチなカスタムリストを作成したとき、クリックしたときに背景色が変わるのを解除したくなります。せっかく綺麗なデザインにしたのにクリックした瞬間に選択色がついて台無しに。しかし残念ながらListViewのプロパティ1つをFalseにす…

WPFアプリケーションを多言語対応する方法のまとめ

WPFアプリケーション開発において多言語対応というのは悩みの種です。Androidはstrings.xmlでテキストは管理され、各国語のstrings.xmlを作成すればOSが使い分けてくれるのですが、WPFにもそんな便利機能はあるのでしょうか。 1. LocBamlツールを使った方法 …

XamlParseExceptionがスローされる原因と対処法について

C#

WPFアプリケーションを実行した時に画面がレンダリングされる前にXamlParseExceptionがスローされてクラッシュすることがあります。この例外はデバッカーで原因位置を特定できない場合があり、初めて見たときは絶望と挫折を経験する人もいるかもしれません。…

C#と.Net Frameworkで指定したディレクトリ内の空のディレクトリを全て削除する方法

不必要になったファイルを削除することになったのですが、ファイルを削除すりだけではディレクトリ(フォルダ)が残ってしまう結果に。アプリケーションを利用すればすりほどディレクトリが無限に増えるのは気持ち悪いので、ファイルが1つも存在しなくなればデ…

C#や.Net Frameworkは署名されていない公開鍵を使ってRSA暗号化することはできない。証明書の用意が必要

サーバーサイドから公開鍵をPem形式でもらったのですが、クライアントサイドで暗号化しようとすると CryptographicExceptionがスローされてしまう事態に。解決に時間を要したのでメモとして書き残しておきます。 .Net Frameworkを使ったRSA暗号化 公開鍵を使…

WPFやXAMLで画面やウインドウ、ページが表示されたときに自動で処理をスタートさせる方法

WPFにおいてページやウインドウが開かれた時に自動で処理を開始したいときって結構あると思います。しかし意外と最適解が探しても見つからず、苦労したので今までの試行錯誤で得たノウハウを書き残しておきます。 ViewModelのコンストラクタで処理する 最初…

C#と.Net Frameworkを使ってPem形式の秘密鍵や公開鍵をXML形式にして暗号化や署名する方法

会社にはRailsエンジニアの方が多いので、技術や仕様がそっちに引っ張られることが多い環境にいます。最近は会社にも馴染んでそうでもなくなってはきましたが。そんな中、通信の暗号化でクライアント側で暗号化するよう要請が。そこで渡されたのがPem形式の…