Karakuri.com

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

SwiftにはByte型がないので戸惑うけれどUInt8がバイトやバイト配列を担っています

むかしむかしのSwiftにはByte型があったと思うのですが、あるとき突然廃止されました。Byte型の配列など使って低級の処理をしていたアプリやプログラムはコンパイルすらできない事態に。C#やJavaからやってきた人も一瞬戸惑うのではないでしょうか。どう調べ…

Swiftでバイト配列(UInt8配列)の変数どうしで論理演算XORを計算する方法

Swiftで[UInt8]のままXORをする必要がありました。しかしSwiftのXOR演算子は「^」であり、下記のように書いてもコンパイルエラーとなります。 let first: [UInt8] = [0xff, 0x10, 0xa0] let second: [UInt8] = [0x01, 0x02, 0x03] let result: [UInt8] = fir…

MacOSにHomebrewでHttpキャプチャソフトFiddlerはインストールできなくなったのでMonoで起動しましょう

HttpでAPIを叩くときに重宝するのがFiddlerです。Windowsアプリ開発では使わせていただいているのですが、iOSアプリ開発でも使えるのでしょうか。どうもMacOSでも使っている人が結構いるみたいなのでインストールすることにしました。 Homebrewでインストー…

Githubにpushできなくなってfatal: could not read Username for 'https://github.com'とか言われる

C#で.Net Frameworkなアプリケーション開発にはVisual StudioとGithub Extension for VIsual Studioを使っています。最近は自宅作業もなかったため、久しぶりに家の環境でpushしてみたら fatal: could not read Username for 'https://github.com' No such f…

XcodeとSwiftでUILabelのテキストのハイパーリンク化は気軽にはできない

HTMLライクなデザインでテキストにハイパーリンクを付けることになりました。 各項目を入力して送信ボタンを押してください。何か分からないことがありましたら、こちらからお問い合わせください。 こんなケースですね。アンダーバーだけハイパーリンク化し…

SwiftでObjective-Cのポインタ型を書き換えるときのUnsafeMutablePointer<T>について

とあるSDKを使ってiOSアプリを開発しているのですが、いただいたSDKのドキュメントに書かれているサンプルコードがObjective-Cでした。僕はObjective-Cは嫌いなのでSwiftに書き換えます。するとこんな関数がありました。 (id)method:(int*)arg; Int型のポイ…

SwiftでiOSアプリのファイルシステムのディレクトリの存在チェックを行う

iOSアプリのDocumentsディレクトリにログを出力しようと思い、Logディレクトリを作成しました。当然このディレクトリはアプリが初めて起動したときに作成され、以降はディレクトリ作成を行う必要はありません。でもSwiftでディレクトリの存在チェックって情…

Swift4でDateの日時を任意のフォーマットでStringで表示する

Swiftの日時を表示するのはDateクラスで簡単に実装できます。 // 2018/01/12 00:00:00 print(Date()) しかしFormatを指定するとなると結構行数を使ってしまうんですよね。 let format = DateFormatter() format.timeStyle = .short format.dateStyle = .shor…

Swift4で任意のDateの日時から日の始まりである0時0分のDateの日時を作る

iOSアプリ開発においてデータベースのデータから本日登録されたデータだけを取り出す必要があったのですが、そのためには今日の0時0分のDateを作らなければなりません。例えば.Net Frameworkでは下記のように作成することができます。 var now = DateTime.No…

Xcodeのライブラリ管理のGUI版クライアントアプリCocoaPods Appを使う

iOSアプリ開発において欠かせないのがライブラリです。Androidではgradle、WindowsではNugetがありますが、なぜかXcodeには標準で使えるライブラリ管理機能がありません。実際のところ公式が確立する前にサードパーティがデファクトスタンダードを取ってしま…

仮想通貨のウォレット(wallet.dat)のパスフレーズを忘れたのでリカバリーを試みました

eXperience Point(XP)という仮想通貨を買ったのですが、翌日にパソコンが壊れてしまいました。幸い別のHDDにwallet.datをバックアップしていたのでウォレットをリストアすることはできたのですが、パスフレーズを入力してもウォレットを復号することができま…

仮想通貨(BTC,ETH,XEMなど)のアドレスから口座残高などの情報を取得するAPIについて

仮想通貨はブロックチェーンに全てのデータが保存されているので、直接ブロックチェーンを参照すれば任意のアドレスから口座残高などの情報を取得することができます。しかし、口座情報を利用するアプリやWEBサービスを作成するだけのために各仮想通貨のブロ…

coincheckのページネーションAPIを使って取得した一覧から任意のIDのデータを取得する方法

coincheckの一覧取得APIではページネーションという仕様を使っています。しかしこのページネーションについてcoincheckの説明が不足している上に不具合があって大変カオスなことになっています。2017年12月にAPIの仕様変更があったので、この変更で不具合は…

coincheckのAPIを使って発注と同時に損切り発注(イフダン)も投げる方法

coincheckのAPIでシステムトレードプログラムを作る際に必須の機能なのが発注と同時に損切りの発注を出す処理です。これFXの世界ではイフダン(if done)というらしいです。今回はこの処理の実装方法について書きます。 処理の流れ coincheckのAPIの実行順とし…

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アプリケーションでグラフチャートを導入する方法(WindowsFormHostとSparrow Toolkit)

WindowFormにはグラフ描画ライブラリが標準で用意されているのですが、WPFアプリケーションにはそのようなライブラリは用意されていません。今回はWindowsFormのチャートコントロールと、ググって見つけたSparrow Toolkitというチャートライブラリを使用して…

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

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

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

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

Android DatabindingとFragmentの組み合わせでLayoutInflater.inflater.inflaterメソッドでアプリクラッシュする

Android Databindingを使用してアプリ開発を行っているのですが、Fragmentを使った画面遷移でアプリクラッシュする問題に直面してしまいました。原因を特定するのに時間を使ってしまったので、記録として残しておきます。 発生したエラー内容 この問題に直面…

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形式の…

Karakuri.comについて

著者について 福岡県生まれ育ちの男の子です。大学、大学院ともに情報工学と生物学を専攻し、卒業とともに神奈川に移住してきました。神奈川に移住してからは機械メーカーでソフトウェア開発者として産業用ロボットの制御プログラムやそれを作成するCAMを開…