Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

2017-01-01から1年間の記事一覧

iOSでRSAを使いメッセージを暗号化してみる(SwiftyRSA)

iOSでRSAを使ってメッセージを暗号化してみます。 SwiftRSA https://github.com/TakeScoop/SwiftyRSA というライブラリを利用します。 RSAの実装は、AppleのSecurity.Frameworkが利用されています。 macOS版はサポートされていないようです。 サンプルiOSア…

swift3 IntegerArithmaticプロトコル

IntegerArithmeticプロトコルを実装するには、以下8つの関数を定義する必要がある。 最初の2つはComparableである。 static func ==(lhs: M, rhs: M) -> Bool static func <(lhs: M, rhs: M) -> Bool static func addWithOverflow(_ lhs: M, _ rhs: M) -> (…

swift3 Comparableプロトロル

Comparableプロトコルを作るには、 static func <(lhs: Even, rhs: Even) -> Bool static func ==(lhs: Even, rhs: Even) -> Bool の2つを実装すればよい。 struct M : Comparable { var val:Int static func <(lhs: M, rhs: M) -> Bool { return lhs.val <…

swift3 Collectionプロトコル

Collectionプロトコルを作るには、 startIndexプロパティ,endIndexプロパティ,subscript,index(after:) の4つを実装する必要がある。 Collection - Swift Standard Library | Apple Developer Documentation ここでは奇数を返すコレクションOddを作ってみた…

swift3 Sequenceプロトコル

Sequenceプロトコルの例 ここでは1以上の奇数を順番に返すものを作ってみた。ちなみにIntの範囲を超えるとクラッシュするが気にしないでもらいたい。(^ ^) struct Odd : Sequence, IteratorProtocol { typealias Element = Int private var v:Element = 1 pu…

swift preconditionとassertの違い

swiftにはassertさせる関数がいっぱいあって困ります。 1) assert() let ary = [1, 2, 3] let i = 3 assert(i < ary.count) print("\(ary[i])") assertion failed: file /develop/aaa/aaa/ViewController.swift, line 18 2) precondition() let ary = [1, 2,…

swfit/rust 負数の除法

swift,C,Javaとruby, python,perlでは、 負数を割り算や剰余に使った場合、結果が異なる。 python 剰余 7 % 3 -> 1 7 % -3 -> -2 -7 % 3 -> 2 -7 & -3 -> -1 swift 剰余 7 % 3 -> 1 7 % -3 -> 1 -7 % 3 -> -1 -7 % -3 -> -1 python 商 7 / 2 -> 3 7 / -2 -> …

ios10.3 ファイルパス問題

環境 ios10.3.1 Xcode 8.3.2 guard let path:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return } let filename0 = path + "/" + "a.txt" if let fp0 = fopen(filename0, "wb") { print("fp0 \…

macOSにSPTKをインストール

macOS 10.12.4 xgrを動かすのに必要なのでconfigure前に入れておきます。 $ brew cask install quartz あとは、 SPTK-3.10.tar.gzをDLし、 $ configure $ make $ make install したら完了です。 参考 SPTKの使い方 (1) インストール・波形描画・音声再生 - …

C++11 unique_ptrとshared_ptr

unique_ptrは所有者が1人以下のポインタとして利用する。 実装にatomic関数は用いられていないためコピーや破棄はスレッドセーフではないが、それによるオーバーヘッドは存在しない。 shared_ptrは所有者が2人以上のポインタとして利用する。 いったん値を設…

C++最適化手法

メモリ使用量が増えてもよいので速度を優先させたい場合の最適化方法を考えます。 計算した値をキャッシュし計算回数を減らす 同じ値の設定処理を何度も行わない 関数の戻り値では、構造体の値を返す代わりに構造体のconst参照を返す クラスの不要な関数を削…

swift 循環参照

swift 循環参照の一例を挙げます。 iOSのソースを例にとります。 ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let model = Model() model.action() } } Model.swift im…

iOS/MacOSXのvDSP関数、多すぎてなかなか見つけられないのをなんとかする(応用編)

複素数を扱うためにvDSP.hで定義された構造体 typedef struct DSPComplex { float real; float imag; } DSPComplex; typedef struct DSPSplitComplex { float * __nonnull realp; float * __nonnull imagp; } DSPSplitComplex; 1次元高速フーリエ変換 vDSP_c…

Rx メモ

RxSwiftとRxCocoaの区別がわかりづらいのでメモ。 RxCocoaはUIKit,NSFoundationなどに特化したiOS/macOS環境特有の機能。 RxSwift combileLatest 仕様:複数の変数のいずれかが変更された場合にそれぞれの最新の値をまとめて受け取る 使い道:2つのUITextField…

android studio 2.3でideavimを有効にする

Android Studio - 「Preferences」- 「Plugins」 で「IdeaVim」をインストールし、有効にします。

Android Studio2.3 から外部エディタvimを開く(macOS)

Android Studio2.3で開いているファイルを行番号を指定し外部エディタvimで開く方法です。 macOSの場合です。 1) Android Studio - Preferences - Tools - External Tools に gvim を登録します。 内部console画面が開かないように Open console のチェック…

C# Microsoft純正ライブラリでJSONをdeserializeする

C#でJSONをserialize/deserializeする方法として、Microsoftが提供するライブラリを使う場合、2種類の方法がある。 1) DataContractJsonSerializer Namespace: System.Runtime.Serialization.Json AssemblySystem.Runtime.Serialization 2) JavaScriptSeria…

RxSwift 超入門その3

class GeolocationViewController: ViewController { @IBOutlet weak private var noGeolocationView: UIView! @IBOutlet weak private var button: UIButton! @IBOutlet weak private var button2: UIButton! @IBOutlet weak var label: UILabel! override …

RxSwift 超入門その2

let minimalUsernameLength = 5 let minimalPasswordLength = 5 class SimpleValidationViewController : ViewController { @IBOutlet weak var usernameOutlet: UITextField! @IBOutlet weak var usernameValidOutlet: UILabel! @IBOutlet weak var passwor…

RxSwift 超入門その1

0)環境: Xcode8.2.1 1) 新規iOSプロジェクトaaaを作成する。 2) aaaフォルダに新規ファイルPackage.swiftを以下の内容で作成する。 import PackageDescription let package = Package( name: "dummy", targets: [], dependencies: [ .Package(url: "https://…

Go POSTによるJSONパラメータをデコードする際の注意

go

まずはソースをみて頂こう。 type User struct { name string } func q(w http.ResponseWriter, r *http.Request){ decoder := json.NewDecoder(r.Body) var user User err := decoder.Decode(&user) if err != nil { panic(err) } fmt.Println(user) } エラ…

go言語 ネストしたJSONをリテラルで初期化する

go

go root := map[string]interface{}{ "alpha": map[string]interface{}{ "beta": []map[string]interface{}{ map[string]interface{}{ "gamma": "val1", "delta": []map[string]interface{}{ map[string]interface{}{ "epsilon": "val2", }, }, }, }, }, } r…

Windowsでgo環境を作る場合の備忘録

go

Windowsにgoをインストールする場合 ここ https://golang.org/dl/ にあるインストーラー go1.8.windows-amd64.msi をダウンロードして実行する GOROOTはC:\go\ となる。 GOPATHは未設定の状態となるので、デフォルトでは %USERPROFILE%\go となる。 goのソー…

SIMD組み込み関数が多すぎるので一覧にしておく

大量の計算を常に行うような場合、C言語の速度をさらに上げるには、CPUのSIMD命令に置き換えられる組み込み関数を使う方法がある。 ただし、これもvDSPと同じで量が多くまた見やすい一覧がないので作ってみる。 なお、独断と偏見で使いそうもないものは一覧…

swift Arrayでwhereを使う

swiftはモダンな言語なので、C言語風の書き方は極力排除されている。 Arrayでwhereがついているメソッドを使い条件式を表すクロージャを指定して結果を取得するケースは多い。 public struct Array<Element> : RandomAccessCollection, MutableCollection { // 条件を</element>…

make_moonsで生成されるものを見てみる(scikit-learn)

macOSXにpipをインストールする sudo easy_install pip scikit-learnをインストールする sudo pip install scikit-learn make_moonsでデータを生成してみる bash-3.2$ python >>> from sklearn import datasets, linear_model >>> datasets.make_moons(10, n…

swiftでwavファイル書き込みしてみる(AVAudioFIle)

iOSでWAVファイルを書き出す場合、 以前はAudioToolKitにあるAudioFileCreateWithURLを使っていましたが、 ここでは試しにiOS8,macOS10.10で追加されたAVFoundationにあるAVAudioFileを使ってみます。 まず、AVAudioFileのクラス定義をみてみます。 open cla…

swift アクセス制御

open どこからでもサブクラスの作成、上書き定義可能 public このクラスを定義したモジュール内部でのみサブクラスの作成、上書き定義可能 internal (省略時) 定義を含むソースファイルと同じモジュール内部からアクセス可能 private クラスや構造体の定義単…

swift extensionで一回だけ実行されるグローバル定数宣言の仕方

こうすればいいらしい。 extension DateFormatter { public static let standard: DateFormatter = { let obj = DateFormatter() obj.locale = Locale(identifier:"en_US_POSIX") return obj }() }

swiftでsingleton

swiftでSingletonを書く場合、こうすればいいらしい。 class MySingleton { static let shared = MySingleton() private init() {} } The Right Way To Write a Singleton — KrakenDev