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

Pebble's Diary

プログラマーの作業メモ

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等)はコントローラークラスのインスタンス変数である。モデルクラスの…

Twitter Omni Authで401 Authorization Required

OSX 10.11.5 rails 4.1.1 development Perfect Ruby on Railsの6章を写経したら、twitterのOmniAuthが動かない。 散々悩んだ挙句、twitterのWebsiteを http://127.0.0.1:3000/ Callback URLを http://127.0.0.1:3000/auth/twitter/calback に変更し、ブラウ…

railsアプリをunicornでCentOS7のsystemdで立ち上げる時のサービスファイルの書き方

/etc/systemd/systemにalpha.serviceというファイル名で以下の内容を作成する。ファイルに実行権限は不要。 どこか間違っている、過不足等いっぱいあるかも。またアプリはalphaというUnixユーザーで実行するようにしている。 railsバージョンは4.2.2 Databas…

rails mysqlで絵文字がDBに入る場合の注意

railsにてfixturesをloadしようとして次のようなエラーが出た。 ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xF0\x9F\x98\x83\xE3\x81...' for column どうやら、UTF8で4バイトになる絵文字が入っているところでエラーになっ…

ruby BCryptダイジェスト

BCryptのrawハッシュ値(データベースのpassword_digestに入る文字列)は以下の4つを$で区切った文字列である。 @version, @cost, @salt, @hash 例えば、 "$2a$10$PqSI0YWw/JHk2zKWRF1ol.5pRtgJKPsJqJa8pvIn4IzatuxY.SPmu" をsplit('$')すると ["", "2a", "10…

ruby コマンドメモ

$ bundle open {gemname} でgemのソースが入ったフォルダをvimで開く 例えば、私の環境で $ bundle open crypt とすると、 vimのnetrwで "~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bcrypt-3.1.11" のフォルダが開かれる。

ruby 文法その5

class HelloWorld attr_accessor :name end セミコロンが付いていて、シンボルになっているのがミソ。 これは、以下のように書くのと同じ class HelloWorld def name @name end def name=(value) @name = value end end ここで@nameはインスタンス変数 引数…

swiftでのmarkコメントの書き方

Objective-Cでは以下のように書いていましたが #pragma mark - UICollectionViewDelegate swiftではこう書きます。 // MARK: - UICollectionViewDelegate もしくは /* * MARK: - UICollectionViewDelegate */

C/C++/ObjC メモリ破壊系バグのつぶし方

メモリ破壊系バグとは メモリ破壊系バグとは、プログラマーが想定して割り当てたメモリ領域のサイズを超えた部分にデータを書き込んでしまい、プログラムが意図通り動作しなくなるバグのことです。 このバグは以下の特徴を持っています。 再現性が100%ではな…

swift objc_overrelease_during_dealloc_error

objc_overrelease_during_dealloc_error というエラーでクラッシュしていたんだが、 takeRetainedValue() を takeUnretainedValue() に変えたら落ちなくなった。 retainしすぎていたということか。 swiftでのUnmagedはイマイチ理解できていない。

try! swift 参加レポート

3/2-4 渋谷マークシティにて行われたtry!swiftカンファレンス http://www.tryswiftconf.com に参加してきましたので簡単な感想です。 スピーカー33名(日本人2割)、参加者約500名(日本人8割) という規模のswift言語やApple関連ソフトウェアに関する コミュニ…

swift タイプエイリアス

Type Aliases typealias AudioSample = UInt16 プロトコルのAssociated Typeには特定のプロトコルに準拠することという条件を付けられる。 protocol PBProtocol { typealias PBError: IntegerType } class PBClass: PBProtocol { typealias PBError = Int } …

swift 列挙型

enum CompassPoint { case North case South case East case West } var directionToHead = CompassPoint.West directionToHead = .East directionToHeadは一旦、varで代入されて型が固定されると、次の行以降はdot表現が使える。 Associated Values enum Ba…

swiftで定義した構造体、列挙体はObjective-Cでは使えない

swiftで定義した構造体、列挙体はObjective-Cでは使えないようだ。 使えないもののリストはこちら。 Generics Tuples Enumerations defined in Swift without Int raw value type Structures defined in Swift Top-level functions defined in Swift Global …

swift ジェネリクス、プロトコル

struct Stack<Element> { var items = [Element]() mutating func push(item: Element) { items.append(item) } mutating func pop() -> Element { return items.removeLast() } } このジェネリック構造体を拡張してみる。 ジェネリック型を拡張する際は、extensionの</element>…

swift クロージャ

swiftを久々に触ったら、クロージャの文法を完全に忘れていたので、メモしておく。 Closure Expression Syntax クロージャはこの形をしている。 { (parameters) -> return type in statements } 例えば、このように使う。 let names = ["Chris", "Alex", "Ew…

html編集のためのvim備忘録

emmet.vim 現在位置のタグのコメントアウトする <C-y>/ <title>sample</title><C-y>/ 結果 入力した文字列をタグに変換する。 <C-y>, body<C-y>, 結果 <body></body> netrw d creates a new directory % creates and opens a new file</c-y></c-y></c-y></c-y>

やってはいけないC言語コーディング

10年以上前に書かれたC言語のソースを見ていたら、ダメなコーディングの展覧会のようになっていたので、こういう書き方はしてはいけないという例として書き残しておきます。 1) ファイルの最後に意味のないコメント /**************************************…

swiftをC++11に移植する

なぜか、swiftをC++11に移植しているのですが、思ったより楽でした。 C++11の機能はまだ慣れていないので、メモを残しておきます。 1) クラスメンバの宣言時初期化 class Book { Book() {} float price = 10.0; }; 2) swiftクラスのinitが2つあったとして、…

VsVimで色変更

VisualStudio2015にVsVimを入れたのはいいが、検索文字をハイライトすると、色がおかしく文字が見えない。。 解決するには、VisualStudioで[ツール]-[オプション]-[環境]-[フォントおよび色]にある [VsVim Highlight Incremental Search]と[VsVim Incrementa…

pure vimでswift自動補完する

pure vimでswift自動補完するvim pluginを作った方がいらっしゃるので紹介しておきます。 動作確認はOSX 10.10.5 (Yosemite) Xcode 7.2で行いました。 github.com このプラグイン自体はbundleなどでインストールするだけですが、 以下のsourcekittendaemonと…

swiftでCoreAudioを使ってみる。(swift3 update 2017-02)

swiftでCoreAudioを使ってみます。 ラ(440Hz)のサイン波の音を再生するサンプルです。 import Foundation import AudioUnit import AudioToolbox import AVFoundation class MyAudioPlayer { var _audiounit: AudioUnit? = nil var _x: Float = 0 let _sampl…

swiftの好きなところ、嫌いなところ

swiftの好きなところ嫌いなところです。 比較対象はObjectiveCなので、ObjectiveCにある機能やC++にある機能は除きます。 swiftの好きなところ第3位 未初期化の変数があるとコンパイルが通らない。 よくある言語実装のように、変数があったらデフォルト値で…

XVim swift応用編

この記事では、XVimに組み込まれたswift関連機能の説明をします。 XVimとはXcodeをvimキーバインドにするXcodeプラグインです。 インストール方法や使い方はこちらを参照して下さい。 XVimProject/XVim · GitHub この機能をXVimに取り入れたモチベーションの…

C++ __PRETTY_FUNCTION__と__FUNCTION__の違いは?

FUNCTIONは関数名のみですが、PRETTY_FUNCTIONはnamespaceや引数、戻り値の型も含みます。 #include <iostream> class MyClass { public: MyClass(){}; int myFunction(int arg1){ printf("%s\n", __func__); printf("%s\n", __FUNCTION__); printf("%s\n", __PRETTY_F</iostream>…

C言語の構造体をswiftで扱う

分かったこと。 1. swiftでC言語の構造体を別変数へ代入すると全ての要素が代入される。つまりC言語と同じ動作をする。 2. C言語の構造体内のポインタにはC言語側で入れたアドレス値が入っていてswift側でそのまま、UnsafeMutablePointerとして扱える。 3. C…

Xcode6.4でボトルネックとなっている遅い処理を特定する(iOS/OSX)

Xcodeに付属するInstrumentsで遅い処理を特定する手順です。 Instrumentsの中のTimeProfilerを使います。 Profileを実行します。 TimeProfilerを選択します。 赤いボタンを押すと実行が始まります。 スレッド毎にかかった時間(milliseconds)と比率(%)が表示…

smartgrep高速化

vim

smartgrepを高速化してみました。 結果、5倍近く高速化することができました。 - 試したことその1 mmapの利用 ファイルサイズ分のメモリを確保しファイル内容をすべて読み込む手法ですが試したところ、全く高速化されませんでしたので不採用。 - 試したこと…

C言語、swift速度比較

4096 * 10,000 個のfloatに特定の演算をしたときの時間。 C index指定 115791 us C ポインタ指定 116161 us swift 5469 us swift vDSP 9235 us AccelarateフレームワークがなぜかPure Swiftに負けてる。

Cの構造体を引数でswiftに渡す

構造体も構造体ポインタもどちらも渡せるが、構造体ポインタのときはmemoryとたくさん書くことになる。ソース可読性を優先すると構造体の方がよさそう。速度については構造体ポインタの方が若干速いようだ。 swift1.2 Optimization Level : Fasttest [-O] 1,…

swiftのクラスをobjective-Cで継承することはできない

stackoverflow.com あるクラスをobjcからswiftへ移行するなら、継承関係にあるクラスはすべて、いちどきにswiftに書き換えないといけない。

ObjCのNS_ENUMのswiftからの見え方(swift2)

Objective-CでNS_ENUM定義がswiftでどのように見えるか実験した。 enum.h typedef NS_ENUM(NSUInteger, Element){ ElementFire, ElementWater, }; typedef NS_ENUM(NSUInteger, FRUIT){ FRUIT_APPLE_1, FRUIT_ORANGE_2, }; typedef NS_ENUM(NSUInteger, ANIM…

ObjCからswiftソース上で呼び出せるのはクラスまたはプロトコルのみ

勘違いしていたが、ObjC側からswiftソース上で呼び出せるのは、クラス(のメソッド)、プロトコル、整数型のenumのみだった。 swift上で書いたグローバル関数やグローバル変数は呼び出せないのだった。逆は可能。 つまり、ObjCのクラスはswiftへ移行できるが整…

swift Array withUnsafeBufferPointer

struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array { func withUnsafeBufferPointer<R>(body: @noescape (UnsafeBufferPointer<T>) -> R) -> R mutating func withUnsafeMutableBufferPointer<R>(body: @noescape (ino</r></t></r></t>…

swift Reflectableプロトコル

Reflectableプロトコルとは、型情報を扱うためのものと考えて良い。 protocol Reflectable { func getMirror() -> MirrorType } protocol MirrorType { var value: Any { get } var valueType: Any.Type { get } var objectIdentifier: ObjectIdentifier? { …

swift標準ライブラリ調査その1 ジェネリクス

swiftの標準ライブラリはすんなり理解できないところが多いため、一つづつ調べていきたい。 struct Array<T> : MutableCollectionType, Sliceable, _DestructorSafeContainer { } extension Array : _ArrayType { init<S : SequenceType where T == T>(_ s: S) } このイニシャライザのwhere T =</s></t>…

SwiftでAtomic操作

Swiftで変数にatomicにアクセスしたい場合、幾つか方法があるが、OSSpinLockを使う方法をここでは紹介する。 他の方法との時間の比較も時間があればやりたい。 まずは、排他処理なしの場合に動作がダメなことを確認する import Foundation let sz = 1000 var…

UnsafeMutableAudioBufferListPointer

iOS8.3(2015年7月)リリースタイミングで追加されたらしい。 やっとswiftでまともにAudioBufferListが扱えるようになった。 UnsafeMutableAudioBufferListPointer developer.apple.com stackoverflow.com

swiftとObjective-Cのメソッド呼び出し時間

swiftとobjective-Cのメソッド呼び出し時間はどのくらい違うのか、試してみた。 空っぽのメソッドを1回呼び出すのにかかる時間 デバッグビルド(OSX10.10、Xcode7GM) objc 0.119μsec swift 0.043μsec リリースビルド(OSX10.10、Xcode7GM) objc 0.007μsec swif…

swiftでIntをBoolに変換するときの注意

swiftでIntをBoolに変換するときの注意 これはコンパイルエラー let a:Int = 1 let b:Bool = (a!=0) // Operand of postfix '!' should have optional type; type is 'Int' これはコンパイルOK let c:Int = 1 let d:Bool = (c != 0) これはコンパイルエラー …

swiftのクラスのポインタをC言語に渡してコールバック後にクラスに戻す(swift3)

[2017-02-12 update] swift3からunsafeBitCastではなくUnmanagedを使う方法が推奨となっていますのでそちらをお使いください。 unsafeBitCastを使ってswiftのクラスをポインタとして扱い、コールバック後のクラスに戻して動作するかやってみた。 結論から言…

swift2でC言語の関数ポインタが利用できるようになった(swift2)

swift2でC言語の関数ポインタが利用できるようになった。 例えば、以下のように書けるようになった。 cfile.h typedef int (*OPERATION)(int, int); int execute(OPERATION operation, int a, int b); cfile.c #include "cfile.h" int execute(OPERATION ope…

MacBookAirのOSX復元、ネットインストール

OSX

⌘+Rで再インストールしようとしたらEl Capitanしか出てこない。 うげ、戻せないのかと思って、optionキーを押しながら電源を入れ、WiFiを使ってネットインストールを試みる。 ディスクをクリアしてインストール画面が出たら、Mountain Lionのインスールが始…