Pebble Coding

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

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

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と…

swift3でCoreAudioを使う 再生編

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を高速化してみました。 https://github.com/pebble8888/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操作(iOSでは非推奨)

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に変換するときの注意 これはコンパイルOK let a:Int = 1 let b:Bool = (a != 0) これはコンパイルエラー aの後ろにスペースを空けないと、a!だとみなされてしまう。 let a:Int = 1 let b:Bool = (a!=0) // Operand of postfix '!' should h…

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復元、ネットインストール

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

C++11スレッド排他制御関連stdライブラリ VisualStudio対応バージョン

#include <condition_variable> void notify_one()ほか VisualStudio2012 #include <atomic> std::atomic<T>ほか VisualStudio2012 #include <mutex> std::lock_guardほか VisualStudio2012 #include <thread> std::threadほか VisualStudio2012 #include <cstdint> std::int32_tほか VisualStudio2012</cstdint></thread></mutex></t></atomic></condition_variable>

MacBook ディスクアクセス速度比較

MachineWRITEREADDisk MacBook Pro (2010)43MB/s59MB/sHD MacBook Pro (2010)170MB/s184MB/sAPPLE SSD TS512C MacBook Air (2012)230MB/s441MB/sAPPLE SSD TS128E MacBook Pro Retina(Mid 2014)704MB/s726MB/sSSD (YouTube) MacMini(Late 2014)737MB/s744.3M…

シェルキーバインド

ずっと探してたけど、これだ。Ctrl + AとCtrl + Eはよく使いそう。 Ctrl + A で行頭に戻る Ctrl + E で行末に移動 Ctrl + B で一文字前 Ctrl + F で一文字後 Ctrl + D で削除 例えば、 ~$ ln -s /cevelop/XVim/XVim/XVimMarks.h XVimMarks.h ここまで打ってd…

OSXのAudioUnit自作ガイド

OSXのAudioUnitを自作する場合は、Appleの以下のサンプルソースを参考に作るのが、もっとも早道です。 TremoroUnitというトレモロ効果を与えるサンプルです。 Core Audio Utility Classes ビルドしてできたTremoro.componentをどこにインストールすればいい…

swiftでの変数のサイズ取得

C言語 int32_t a; sizeof(a); sizeof(int32_t); swift var a:Int32 sizeof(Int32) sizeofValue(a)

taglist.vimをswift対応する

taglist.vimをswift対応してみました。 こちらを参考にしました。 ctags を Swift に対応させる - Qiitaqiita.com 必要な手順は2つ 1) ~/.ctagsに以下を追加する。 --langdef=Swift --langmap=Swift:+.swift --regex-swift=/(var|let)[ \t]+([^:=]+).*$/\2/…