読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

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

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

オライリー 英語版原書を読むのに役立つ英単語40

n. 名詞 adj. 形容詞 v.i. 自動詞 v.t. 他動詞 adv. 副詞 variable n. 変数 definition n. 定義 deduction n. 推論 explicit adj. 明示的な implicit adj. 暗黙の distinguish v.t. 区別する prefer v.t. ~の方がよい declare v.t. ~を宣言する exception n.…

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パラメータをデコードする際の注意

まずはソースをみて頂こう。 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 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…

curl コマンドオプション

-i レスポンスヘッダの表示 -s サイレントモード -H カスタムヘッダ指定 -X コマンド指定 -d HTTP POST データ JSONをPOSTするときのサンプル curl -i -H "Content-Type: application/json" -d '{"name":"foo"}' http://localhost:3000/contents

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

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

Missing Push Notification Entitlement (未解決)

iOSアプリのバイナリをiTunesConnectにUploadしたときたまにAppleから Missing Push Notification Entitlement のメールが来たり来なかったりするんだが、どうしたもんか。 アプリではPushNotificationは使っていないが、FireBaseフレームワーク内で使ってい…

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ファイル書き込みしてみる

以前はAudioToolKitにあるAudioFileCreateWithURLを使っていましたが、 ここでは試しにiOS8,macOS10.10で追加されたAVFoundationにあるAVAudioFileを使ってみます。 まず、AVAudioFileのクラス定義をみてみます。 open class AVAudioFile : NSObject { publi…

swiftでFloat値の比較

swiftでは次のような演算子が定義されているので、FloatどうしやDoubleどうしの比較は 単純に==と!=で行えば良い。 FloatやDoubleはFloatingPointを継承しているため、この機能を持っている。 public func ==<T : FloatingPoint>(lhs: T, rhs: T) -> Bool public func !=<T : Equatable>(lhs: T</t></t>…

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

詳説 AudioStreamBasicDescription / AVAudioFormat

CoreAudioでよく使われるAudioStreamBasicDescription これはC言語の構造体で使いづらいです。 macOS10.10, iOS8以降ではAVAudioFormatと相互変換できますので、これを経由するとコーディングが簡単になります。 まずは実例を見ていきます。 よく使われる.wa…

iOS10のSpeechToText APIを使って日本語PodCastをテキスト化してみる

iOS10で公開されたSpeechフレームワークを使って日本語PodCastをテキスト化してみました。 結果から言うと、テキスト化は可能でしたが、品質はかなり悪く実用として厳しかったです。 某IT系PodCastのファイルを食わせて見たんですが、 「ジャバスクリプト」…

C言語のsizeofをswiftで書くにはMemoryLayout<T>.size

タイトルそのままです。 struct Hoge { var a: Int32 var b: Int32 } MemoryLayout<Hoge>.size // 8</hoge>

Arrayにおけるmap, flatMapの動作(swift3)

ググると引っかかるのか今だにswift2のドキュメントなので、swift3用のメモ let a = [1, 2, 3] let b = a.map { Array(repeating: $0, count: $0) } print(b) // [[1], [2, 2], [3, 3, 3]] let c = [1, 2, 3] let d = c.flatMap { Array(repeating: $0, coun…

enum Optional<Wrapped> の map, flatMapメソッド

swiftのソースでmapとflatMapというメソッドがよく出てくるのだが、このメソッド名からは想像できない動作をするのでメモしておく。 (メソッド名変えてくんないかな。。) Optionalの定義を見ると次のようになっている。 public enum Optional<Wrapped> : ExpressibleB</wrapped>…

swift 2つの連続する矢印

swiftでこんなソースが出てきた。-> が2つ連続しているが意味がすぐには分からない。 func multi(val:Int) -> (val:Int) -> Int { return { a_val in return a_val * val } } 省略されている()を書くとこうなる。 func multi(val:Int) -> ((val:Int) -> Int)…

swift ComparableIndex

swiftのComparableプロトコルはEquatableプロトコルを継承しているので、Comparableと同じことがしたいがEquatableは実装したくないという時に使えない。 その場合、Comparableに相当するプロトコルだけを自分で実装すれば良い。 public protocol Comparable…

PromiseKit4.0 (swift3)を使ってみた 2016年11月

swift3で作ったiOSアプリでサーバーへHTTPリクエストを複数回投げる場合に、 普通に作ると、正常ケース、異常ケースの処理があちこちにばらけて、ソースが汚くなります。 PromiseKitを使ったところ、ソースが短く、処理も追いやすくて素晴らしかったので、メ…

digital oceanでipv6を追加したらDNS解決できなくなった話[RESOLVED]

digital oceanに作ったCentOS6のVPSにipv6を追加したところDNS解決できなくなりました。 CentOS7の方は手順通りでうまくいったのですが、CentOS6の方は、 ping google.com が効きません。 /etc/resolve.conf にはGoogleのipv6のDNS2つが定義されています。 n…

VisualStudio 2015 VsVimでCtrl+Bが効かない

VisualStudio 2015 に VsVimを入れて使っています。 Ctrl+F(前方スクロール)は動くのですが、Ctrl+Bすると関数のブレークポイント設定機能が動いでしまい、後方スクロールが動きません。 解消するには、「ツール」-「カスタマイズ」-「キーボード」を開き…

CentOS7にNewRelicのnginxプラグインをセットアップする

まずyumでプラグインを入れないといけないですが、そのためにまずリポジトリを追加しないといけません。 以下ファイルを編集します。 /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgc…

IPv6環境のActionMailerでのgmail送信でNet::OpenTimeoutエラー発生

IPV6環境のActionMailerでgmail送信すると Net::OpenTimeout (execution expired): となってしまい送信できない。 telnet smtp.gmail.comを実行すると分かるが、まずIPv6で接続をトライし、60秒くらいでタイムアウトした後、IPv4で接続トライする。 最初から…

apple-touch-icon.png 読み込みエラーの抑制

safariでrailsで作ったサイトにアクセスした時に、railsのログにapple-touch-icon.pngが読み見込めないエラーが出ている。 このエラーを抑制するにはrailsでfaviconファイルがあるフォルダpublicに0バイトのapple-touch-icon.pngを置けば良い。 $ touch appl…

C++11 type_traits の原理

std::iteratorのソースを読んでいたところ、C++11のtype_traitsがよく分からないため、勉強中。 備忘録として解説しておく。 C++11で<type_traits>というヘッダがSTLに追加されている。 type_traits - cpprefjp C++日本語リファレンス 型の特性を判定、操作するための機能</type_traits>…

C++11でのautoを使った関数定義

C++11では関数定義をautoを使って書くことができるようになった。 今まで int get_value(void); と書いていたものが、C++11以降はこのようにも書ける auto get_value(void) -> int; int get_value1(void) { return 1; } auto get_value2(void) -> int { retu…

std::shared_ptr利用法

std::shared_ptrの利用法です。Infoインスタンスは内側のスコープ内で生成されて外側のスコープ内で破棄されていることが分かります。 struct Info { Info(){ printf("Info() %p\n", this); } Info(const Info& obj) = delete; Info(Info&& obj) = delete; I…

std::vectorメモリ管理

std::vectorにはreserveというメソッドがあるがどのように動作するのか調べてみた。 struct Info { uint8_t* dex = nullptr; Info(){ dex = new uint8_t; *dex = 7; printf("%p Info() dex %p %d\n", this, dex, *dex); } Info(const Info& obj){ dex = new …

C/C++ 構造体アライメント最適化

C/C++の構造体の要素はある程度の境界位置にアライメントされる。そのため、要素の定義順序によって、構造体全体のサイズが変わったりする。たかが数バイトと侮るなかれ。要素数が多ければ、それだけメモリ領域が小さくなり、CPUキャッシュミスが起きる確率…

iOS/OSXにおけるスレッド優先順位

iOS

iOS/OSXではスレッドスケジューラーの出来が良く、細かい設定が可能である。 例として、CoreAudioでのコールバックスレッドのスレッドポリシーがどうなっているかみてみる。 OSX 10.11.6 1.6GHz Core i5 standard policy_count 0 get_default 1 importance 3…

macOS環境でrustを学習する

以下の日本語ドキュメントで学習します。 プログラミング言語Rust インストール ~$ curl -sSf https://static.rust-lang.org/rustup.sh | sh rustコンパイラのバージョン確認 ~$ rustc --version rustc 1.11.0 (9b21dcd6a 2016-08-15) vimシンタックスハイラ…

atomic::compare_exchange_weak C++11

bool compare_exchange_weak (T& expected, T val, memory_order sync = memory_order_seq_cst) noexcept; compare_exchange_weakの動作仕様がいつまでも覚えられないので、メモ。 覚える必要があるのは第一引数と第二引数と戻り値。 メモリオーダーはとりあ…

memory_order_relaxed の動作(C++11)

memory_order_relaxedの使い方がいまいち分からなかったのだが、やっと理解できたので、それついて書いておく。 memory_order_relaxedの説明を探すと以下が見つかる。 Each memory location has a total modification order Memory operations performed by …

C++11 std::atomicを使いこなすための情報リスト

C++11 std::atomicは難解です。 しかし、パフォーマンスが出ない時に頼りになるツールでもあります。 情報はなかなか少ないので、適宜まとめておきます。 CPUの動作に関して CPU とキャッシュのはなし - graphics.hatenablog.com プログラミング :: 高速なプ…

C++ 小さいサイズの構造体を引数に渡す時は値渡し、参照渡しどちらが高速か?

調べてみました。 こんなサンプルで時間を計測しました。 struct Hoge { float a; float b; }; Hoge hoge1 = { 25, 26 }; Hoge hoge2; // 値渡し void func1(Hoge hoge){ hoge2 = hoge; } // 参照渡し void func2(const Hoge& hoge){ hoge2 = hoge; } 1) flo…

C++11環境におけるatomic操作のパフォーマンス比較

C++11のatomic関数はどのくらいのパフォーマンスを出せるのか調べてみました。 short変数に対してスレッド2つを使い、スレッドAが書き込み、スレッドBが読み込みとします。 環境: Intel Core i5 1.6GHz コア数:2 2次キャッシュ(コアのキャッシュ):256KB 3次…

lower_bound,upper_bound(C++)

lower_boundとupper_bound lower_boundとupper_boundはソート済みSTLコンテナにおいて、それぞれ、指定の値以上の値が最初に現れる位置と、指定の値より大きい値が最初に現れる位置のイテレーターを取得する。図にするとこんな感じ。 コンテナ境界周りの動作…

swiftでフェルマーの素数定理をInt64の範囲内で確認してみる

最近、素数の本を読んで面白かったので、 フェルマーの素数定理 任意のp:素数 n:自然数に対して、np - n を p で割った余りは 0 である。 をswiftで数値計算でInt64の範囲でいいから確認してみたい欲求に駆られ、実装してみました。 import Foundation infix…

rails ログインのintegration testで失敗する原因

railsでログインのintegration testでCSRFエラーが出て、テストに失敗する。 ブラウザから実行した時はエラーにはならない。 延々、原因が分からず、かなり遠回りした結果、原因が判明した。 1) .bash_profileにRAILS_ENV=developを設定していると、rake tes…

swift C言語形式のループの置き換え

swift3ではC言語形式のループが廃止されます。 swift2.2の現時点では、deprecatedになっています。 書き換え方がわかりずらいのでメモ print("case to") for i in 0.stride(to:2, by:1) { print(i) } for i in 0..<2 { print(i) } print("case through") for…

rails 文字列に対するpresent?

nil? empty? はrubyのメソッドですが、 present? blank? はrailsのメソッドです。 文字列に対しては以下のようになります。 $ rails console Loading development environment (Rails 4.2.2) irb(main):001:0> a = nil => nil irb(main):002:0> b = " " => "…

rails ネストしたリソースのscaffoldを作る

ネストしたリソースのcontrollerやviewの書き方が分からなすぎるのでどうしたらいいものかと思ったら、そのものズバリ、ネストしたscaffoldを作るgemがありました。 GitHub - amatsuda/nested_scaffold: Nested scaffold generator for Rails 4.2 and 5 これ…

rails 基礎知識

railsは細かい部分の仕様の説明が明快に行われているドキュメントがない。トライアンドエラーで得た知見をメモしておく。 hoge.html.erb内で使えるクラスのインスタンス変数(@hoge,@fuga等)はコントローラークラスのインスタンス変数である。モデルクラスの…