タコさんブログ

プログラミングメモと小言

Swiftでちょっとだけモナド

Monads for functional programming - Philip Wadler セクション2のメモ。セクション2では、シンプルな評価器を構成することにより、モナドを導入し、修正に強い評価器を構成するのにモナドが使用できることが説明されている。 環境 Xcode 8.0 Swift 3.0 …

Swift AVAudioEngine でマイク入力を録音

AVAudioEngine を使用して、マイクからの入力を録音する。 AVAudioEngineの基本的な使い方は Swift AVAudioEngine の基本 - タコさんブログ を参照。 簡単のため、マイクアクセスの許可、オーディオセッションの管理などのハンドリングは考慮していない。 環…

Swift vDSP で 実FFT

C言語ではじめる音のプログラミング―サウンドエフェクトの信号処理 ページ33 で取り上げられているサイン波を vDSP(vectorized digital signal processing) ライブラリを使用して、FFTにより振幅スペクトルを求める(ここでは簡単のために窓関数を用いずにFFT…

Swift AVAudioEngine でサイン波を鳴らす

AVAudioEngine を使用して、440Hzのサイン波(ラ音)をPCMバッファーに設定し、鳴らす。 AVAudioEngineの基本的な使い方は Swift AVAudioEngine の基本 - タコさんブログ を参照。 環境 Xcode 7.3.1 Swift 2.2 準備 AVFoundation をインポートする import AV…

Swift AVAudioEngine の基本

環境 Xcode 7.3.1 Swift 2.2 準備 AVFoundation をインポートする。 import AVFoundation AVAudioEngine AVAudioEngine は 接続された audio node(AVAudioNode) のグループを定義する。 Audio node を使用してオーディオシグナルを生成、それらの処理、オー…

Swift で Audio Queue Services を使って再生する

Audio Queue Services Programming Guide - Playing Audio を参考にSwiftでAudio Queue Serviceを使用する。 環境 Xcode 7.3.1 Swift 2.2 準備 AudioToolbox をインポートする。 import AudioToolbox Audio Queue Service を使用する手順 状態・フォーマット…

デリゲートメソッドをRxSwift対応させる方法

この例ではUIWebViewDelegateメソッドをRxSwift対応させる。 環境 Xcode 7.3 Swift 2.2 準備 RxCocoa、RxSwiftをインポート。 import RxCocoa import RxSwift 今のところ以下のキャスト時に使用する関数はパブリックになっていないので、RxCocoaからコピーし…

Swift でヒマワリを描く

bitterharvest.hatenablog.com に触発されて、試しにSwiftで書いてみた。 準備 16進数カラーコードを UIColor に変換する必要があるので、 SwiftでHexColor(#34495eみたいなやつ) - Qiita を参考に、UIColorに簡易イニシャライザを追加する。 extension UICo…

Swift 型消去 (Type Erasure)

try! Swiftで発表のあった型消去の話。 この例ではSwiftにおける型消去技法を使用して、結城さんの 増補改訂版Java言語で学ぶデザインパターン入門 Iteratorパターンを愚直にSwiftで実装する。 前提知識 [増補改訂版Java言語で学ぶデザインパターン入門] Ite…

RxMoya (RxSwift + Moya)

Swift Moyaでモヤっとしているネットワークレイヤーを解決 - タコさんブログ のRx編。 RxMoyaProviderでは、MoyaProviderにコールバッククロージャを与える代わりに、オブザーバブルなレスポンスを使用する。 今回の例もiTunes Apple APIを使用して音楽のア…

RxSwift 入門 その7

RxSwift 入門 その6 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Mathematical and Aggregate Operators 、Connectable Observable Operators の項。プレイグラウンドの内容としてはこれで最後。 Mathematical and Aggregate Operators …

RxSwift 入門 その6

RxSwift 入門 その5 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Error Handling Operators 、Observable Utility Operators 、 Conditional and Boolean Operators の項。 Error Handling Operators この項では、Observableからのエラー…

RxSwift 入門 その5

Combination operators RxSwift 入門 その4 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Combination operators の項。 この項では、単一のObservableを生成するために、多数のソースObservablesと連携するオペレータに関して説明してあ…

RxSwift 入門 その4

Filtering Observables RxSwift 入門 その3 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドの Filtering Observables の項。 この項では、ソースObservableから選択的にアイテム(イベント)を送信するオペレータに関して説明してある。 以下…

RxSwift 入門 その3

Transforming Observables RxSwift 入門 その2 - タコさんブログの続き。 今回は、RxSwiftプレイグラウンドの Transforming Observables の項。 この項では、Observableから送信されるアイテム(イベント)を変換するオペレータについて説明してある。 変換…

RxSwift 入門 その2

RxSwift 入門 その1 - タコさんブログ の続き。 今回は、RxSwiftプレイグラウンドのSubjectsの項。 Subject は Observer 、また Observable の両方として機能し、Hotなオブザーバブルである。 Erik MeijerはSubjectを好んでいないようだ(Why Does E.Meijer …

RxSwift 入門 その1

とりあえずRxSwiftのプレイグラウンドのIntroductionに書いてあるサンプルを見ていく。Introductionには「RxSwiftを理解する鍵は、Observablesの概念を理解することである」と書いてあるとおり、主にObservableの生成について説明してある。 環境 Xcode 7.2 …

Swift Moyaでモヤっとしているネットワークレイヤーを解決

MoyaはAlamofireを直接さわることなく、ネットワークレイヤーを抽象化してくれるライブラリ。 イメージとしては、下の図のような感じ。 Moyaの特徴として、 コンパイル時に正しいAPIエンドポイントのチェック Associated Enumによりエンドポイントを明確にで…

CommonCryptoのSwift製ラッパー IDZSwiftCommonCrypto を使ってみる

IDZSwiftCommonCrypto を使ってみる IDZSwiftCommonCrypto は Appleの CommonCrypto のSwiftラッパーで、Realmで紹介されていたので、ちょっと試してみた。CryptoSwiftでAES暗号 (AES-256-CBC) - タコさんブログと同じように Swift側でIDZSwiftCommonCrypto…

Xcode 7 で 実機にインストールすると Security エラーで入らない時に確認すること

久しぶりに、実機にインストールしようとしたら、Security エラーが出てインストールできなかったので、その時の解決方法 環境 Xcode 7.2 iPhone iOS 9.2 エラー内容 実行した時、以下のようなエラー内容が表示されました。 Could not launch "アプリ名" pro…

Swift の AnyObject と Any メモ

AnyObject と Any についてのメモ。 AnyObject AnyObjectは 全てのクラス型のインスタンス を表すことができる型 Swiftのクラス、Objective-Cを継承したクラス、Objective-Cのクラスを扱うことができる。 class SwiftClass {} @objc class ObjCClass: NSObje…

Swift NSOperation と NSOperationQueue の基本的な使い方

NSOperationQueueクラスは dispatch_queue_t の高レベルAPIで、NSOpertionオブジェクトの実行を規制する。 NSOperationクラスは継承して使用することを目的とした抽象基底クラスになっているので、通常はNSOperationを継承したクラスを作成する。Foundation…

CryptoSwiftでAES暗号 (AES-256-CBC)

CryptoSwiftを使用して、 平文をSwift側で暗号化し、Ruby側で復号化する。 暗号方式はAES、鍵は256ビット長、暗号利用モードはCBC、パディング方式はPKCSを使用する。 環境 Xcode 7.1.1 Swift 2.1 準備 適当な256ビット長の鍵(文字列)を用意する。 BDC1711…

Swift NSTimer の基本的な使い方

環境 Xcode 7.3 (7.1) Swift 2.2 (2.1) タイマーの生成とRun Loopに登録を同時に行う場合 // targetObjectのObjective-Cで利用できるfunc update(timer: NSTimer)を1秒間隔で呼び出す // (または、Objective-Cクラスを継承したSwiftクラス) NSTimer.schedul…

Xcode の警告:Scene is unreachable ... の解決方法

Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:. この警告は!! 「ストーリーボード上のビューコントローラに instantiateViewControllerWithIdent…

開発効率を上げるかもしれないXcodeキーボードショートカット集

環境 xcode 7.0 左ペインの開閉 Cmd + 0 (ゼロ) 右ペインの開閉 Cmd + Opt + 0 (ゼロ) デバッグエリアの開閉 Cmd + Shift + Y Assistant Editorの開閉 Assitant Editorを開く Cmd + Opt + , 閉じる Cmd + Enter 検索に移動 カーソルも検索窓に移動している C…

Swfitのカリー化関数 (Curried Functions in Swift)

環境 Xcode 7.3 Swift 2.2 カリー化関数の構文 func 関数名 (引数) -> (引数) -> 戻り値の型 { return { (引数) -> 戻り値の型 ボディ } } カリー化関数の例 カリー化されていない関数 plus func plus(a: Int, b: Int) -> Int { return a + b } plusをカリー…

ストーリーボードにナビゲーションコントローラ・タブバーコントローラを素早く追加するTips

ナビゲーションコントローラ・タブバーコントローラをStoryboardに追加するとき 右側のUtilityペインの Object Library からドラッグ&ドロップするとナビゲーションコントローラ・タブバーコントローラ以外にもテンプレートのビューコントローラが付いてき…

swift の as as! as? オペレータ (Type Cast Operator) と is (Type Check Operator) とパターンマッチ

環境 swift 2.0 xcode 7 beta 5 as オペレータ Swfitコンパイラにより型変換・キャストが成功すると保証されるときに使用 アップキャスト リテラルの型を指定 class Animal {} class Dog: Animal {} let dog = Dog() let animal = dog as Animal // アップキ…

Swiftで作ったアプリをリリースしました!!

Swiftで作ったカジュアルゲームです! 土日を使って少しずつ作りました。 モチベーションが上がらないときはコワーキングスペースに行ってみたりして作業しましたが、 基本的には引きこもって作業。 Swift良いですね! Tap Speedokuhiro ohmutaゲーム無料

Swift 2.0 の indirect で2分探索木(Binary search tree)を試す

indirectが使用できる前はBoxクラスなんかを使って再帰的なenumデータ型 を実装していたみたいだが、indirectを使えばBoxクラス等を使わずにシンプルにList, Tree なんかを書ける。 環境 Xcode 7.0 beta 4 Swift 2.0 2分探索木 元ネタは すごいHaskellたのし…

Google Analytics for iOS with Swift

CocoaPodsを使用しないで、Google Analyticsを入れる方法 手動でGoogle Analyticsのスクリーン計測を行うまでをメモしておく。 環境 Xcode 7.1 (Xcode 6.4) Swift 2.1 (Swift 1.2) 準備 Google Developers Download the SDKからからzipをダウンロードする。…

SwiftのRangeからArrayを取得する方法

環境 swift 1.2 方法その1 mapを使う let range = Range(start: 0, end: 10) let array = range.map{$0} println(array) // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 方法その2 Array#initから生成する let range = Range(start: 0, end: 10) let array = Array…

カスタム画面遷移でモーダル表示をしたとき、dismissしたら画面が無くなっている!?

環境 swift 1.2 target iOS 8 Xcode 6.3 iPhone 6 Simulator (実機では試していない) 現象 プログラムの内容:カスタム画面遷移でモーダル画面を表示させて、モーダル画面内のボタンが押されたら dismissViewControllerAnimated でカスタム画面遷移でモーダ…

Alamofireを手動で入れる(メモ)

AlamofireのManuallyに書いてある通り、git gubmoduleを使ってAlamofireを使用するやり方。 プロジェクト作成 Alamofireを使用するプロジェクトを作成する。このときSource ControlのCreate Git repositoryにチェックを入れておく。 Git submodule 作成した…

そうですか〜Carthageさん

Carthage BUILD FAILED 今流行り(?)のCarthageを使ってみようと思って、Cartfileを用意したあとにcarthage updateをしたら、下のエラーがでる。 ** BUILD FAILED ** The following build commands failed: Check dependencies (1 failure) xcodebuildのロ…

今さらvimにHaskellのプラグインを入れてみた

NeoBundleの導入 ディレクトリをつくる $ mkdir -p ~/.vim/bundle gitからクローンする $ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim NeoBundleの設定とプラグインのインストール githubを参考に.vimrcにNeoBundleを設定…

Swift Closure クロージャ記法 いろいろ

環境 Swift 1.2 Swiftのクロージャ構文 Swiftでのクロージャは以下のように書く { (仮引数) -> (戻り値の型) in クロージャ Body } Swiftのクロージャ記法いろいろ 前提 以下のIntの配列とsortedを例として使用する。 let numbers: Array<Int> = [5, 4, 9, 10, 6,</int>…

すごいHaskell 第5章 高階関数 メモ

カリー化関数 カリー化された関数とは、複数の引数を取る代わりに、常に1つの引数を 取る関数 Haskellの関数はすべてカリー化されている カリー化より、関数を本来より少ない引数で呼び出したとき、 部分適用されたが得られる セクション 中置関数に対して…

UIScrollView, UIWebView等のContent Insetを調整する

全画面にUIScrollView(UIWebView)を配置すると、ステータスバーを表示している場合、下の図のように、ステータスバーの下にコンテンツが重なって表示されてしまう。 このとき、スクロールヴューの余白、スクロールバーの開始位置を以下のように調整する必…

Auto LayoutのConstraintをアニメーションさせる

Auto Layoutを使用しているときに制約をアニメーションさせる方法 今回やるアニメーションは、ボタンを押したら下の位置にある緑色のヴュー(画面外)が 表示されていないとき、ヴューが中央まで表示される 表示されているとき、ヴューが下の位置に戻る レイ…

StoryboardのUnwind SegueにIdentifierをつける

Unwind SegueにIdentifierをつけれることを知らなかったので、メモしておきます。 画面遷移 FirstViewControllerにModalボタンを配置して、押されたら、モーダル表示でナビゲーションコントローラに埋め込んだSecondViewControllerの画面を表示。SecondViewC…

Auto Layout + Superview's Ratio + Swift code

AutoLayoutで比を使う SwiftのコードでUIView(aView)を生成して、以下の制約をコードでつけます。 ViewController.view の width : aView の width = 3 : 1 ViewController.view の height : aView の height = 4 : 1 どんなディスプレイサイズになっても、…

Storyboard + Auto Layout + Custom TableView Cell (xib)

Auto Layout + xibのCustom TableView Cellを使う方法 UITableViewControllerは使わずに、UIViewControllerにUITableViewを配置して、作りました。 完成品はこちら カスタムセルのxibは以下のような感じです。制約は縦横中央寄せで、幅は Superview.Leading=…

すごいHaskell 第4章 再帰 メモ

Hello 再帰 この章では再帰関数について書いてある。 再帰とは関数定義の中で自分自身を呼び出す関数 関数を再帰的に定義するには問題の基底部(これ以上分解できない、 解を明示的に定義しなければならない場合)と、それ以外に分ける。 フィボナッチ数列の…

すごいHaskell 第3章 関数の構文 メモ

この章では関数のパターンマッチ、ガード、where、let式、case式 について書いてある。 パターンマッチ パターンマッチはパターンに従って、データを分解するために用いる。 関数の本体を下の例のように分解することもできる。 パターンは上から順に評価され…

すごいHaskell 第2章メモ

第2章 型を信じろ! 「すごいHaskell 楽しく学ぼう」 第2章を読みながらのメモです。 この章はHaskellにおける型や、型クラスについて書いてある。 型クラスについてはあまり理解していないが、今はサラッと流すことにする。 型の調べ方 GHCi上で型を調べ…

すごいHaskell メモ

すごいHaskell 第1章 Haskell の勉強会に参加予定(途中参加)なので、「すごいHaskell 楽しく学ぼう」 第1章を読みながらのメモです。 ghciの起動と終了 ghciの起動方法 $ ghci ghciの終了方法 Prelude> :quit ghciのヘルプ表示 Prelude> :? 関数 関数が2…

MavericksにAppiumをインストールしてみる

Rubyを書いてみたいので、テストコードをrubyで動かせるように、公式を参考に必要なものをインストールしていく。まずは、Rubyのインストールから $ \curl -sSL https://get.rvm.io | bash -s stable rvm install ruby -bash: rvm: command not foundとコケ…

homebrewでHaskellをインストールする

ググったとおりにbrew install ghc haskell-platformとするとエラーになる。 タイプミスかと思ってもう一度実行するが、やはりエラー。エラー内容は Error: No available formula for haskell-platform We no longer package haskell-platform. Consider ins…