readLine()をシーケンスのように扱う

Swiftでコンソールアプリを作るときの、標準入力から得た文字列をコレクションのように扱う方法です。 標準入力を扱う処理をシンプルに書く場合、readLine()関数と繰り返しを使って次のようにすることが多いです。 while let line = readLine() { // 入力さ…

lldbで変数をpで見るとき16進数やASCII文字で表示する

lldbでpコマンドを使って表示するときに、pに続けて/xや/cなどを続けると指定した形式で出力してくれます。 (lldb) p depthData.depthDataType ← 「kCVPixelFormatType_DisparityFloat16('hdis')」が入っている (OSType) $R4 = 1751411059 (lldb) p/x depthD…

Homebrewを使ってOpenCVをmacOSにインストール(2018/1/20版)

気づいたら前回の記事から1年近く空いてますね…。 OpenCVをHomebrewを使いmacOSにインストールしようとしたときのメモです。2018/1/20時点で「OpenCV mac install」などと検索したときに出てくる方法と、今は少し手順が異るようです。 環境 % brew -v Homeb…

Swift3でインスタンスから型メソッドを呼ぶ

ある型(class/struct)のインスタンスを使って型メソッドを呼ぶには、type(of:)関数を使います。 class Foo { static var bar: Int { return 100 } } let foo = Foo() foo.bar // error: static member 'bar' cannot be used on instance of type 'Foo' type(…

SKView&SKSceneを画面の回転に対応させる

iOSデバイスを回転させたときに、SpriteKitで使うSKViewやSKSceneをどうやって・どのタイミングで追従させるかについてです。 SpriteKitの中で完結させようとなると、SKSceneが持つdidChangeSize(CGSize)メソッドを使うべきなのでしょう。しかしこのメソッド…

ジャンプするSKActionを作る

SKActionには「ジャンプする」を表すアクションがなかったので作ってみました。 public extension SKAction { class func jump(height: CGFloat, duration seconds: TimeInterval) -> SKAction { var initialY: CGFloat = 0.0 var initialFlag = true let cu…

ループ途中で抜ける処理をfilter()等で書き換える

Swiftを触っていると、色々なループをmap/forEachなどで置き換えたくなります。その1パターンの実装例を考えてみます。 目的のデータを探すためのループ ループ処理のユースケースとして、下例のような「目的の値を取り出すために見つかるまでループ。見つか…

iOS10のWKWebViewではビデオのインライン再生はできない→できます!

2016/10/28追記: 初回投稿時に「iOS10のWKWebViewではビデオのインライン再生はできない」として作成した記事ですが、その後の検証によりインライン再生できることが分かりました。 そのため現在の内容は初出時の内容を一部修正したものになっています。ご…

SKNodeをロケットのように震わせる

ロケットを発射したときのように、ノードをブルブル震えさせつつ、けれども元々の場所は維持するアクションはどうやって作ったらいいんだろう、と悩んでいました。 調べたところ、ここで紹介されている方法がなかなか良いことがわかりました。Swift 3で書く…

SpriteKitでテクスチャアトラスからSKSpriteNodeを作る

SpriteKitでノード(SKNode)に画像を使いたい場合、SKSpriteNodeをテクスチャアトラスから作るのが便利です。 通常、テクスチャアトラスを作るにはたいてい専用のツールが必要で、隙間なく上手に並べたいときなどなかなか面倒だったりします。ですがXcodeだと…

マイクの入力レベルをdBで取得する

マイクの入力レベルを調べるのには、AVFoundationを使うのがお手軽です。下のコードは、マイクからの入力レベルをコンソール上に出力するごくごく簡単なサンプルです。 try!を使っていたりcanAddInput/Output()を使っていなかったりしていますので、その点は…

画面遷移したときに下部のタブバーを一時的に消す

ナビゲーションコントローラをタブバーと組み合わせて使っている時、プッシュ遷移した先の画面ではタブバーを消して全画面表示したいケースはあります。設定が終わるまでタブバーによる遷移を避けたいときなどがそうです。遷移先から戻ってきたときには、ま…

forkしたOSSライブラリをCocoaPodsで扱う

CocoaPodsを使った、既存のOSSライブラリをforkしたリポジトリをプロジェクトに組み込む方法です。 前ふり CocoaPodsやCarthageなどのパッケージ管理システムを使うと、githubなどで公開されているOSSライブラリを簡単に使うことはよくあります。これらは簡…

パターンマッチング「func ~=」のデフォルト実装は「func ==」

TL;DR パターンマッチングのルールを自分で定義するときは、~=演算子、つまり「func ~=」を定義することになるわけですが、未定義の場合のデフォルト実装は「func ==」を使うようになっている、という話です。そして、NSObjectのデフォルトはisEqual()が使わ…

UIEdgeInsetsを(強引に)@IBInspectable化する

@IBInspectableで入力できる型は、User Defined Runtime Attributesで指定できる型と同じ、とXcodeのドキュメントには書かれています。つまり、Localized StringやNilを除く以下の型を指定できます。 値の型 オブジェクト エディタ上の状況 Boolean Bool チ…

RxSwiftを勉強していますが、なかなか理解が進まないシリーズです。 RxSwift / RxCocoaのバージョンは2.2を対象にしています。 学習の手始めに「UIButtonがタップされたら、画面上にあるラベルをhiddenにする」というごくごく簡単な処理を書いてみようと思っ…

Emacsで選択した領域を検索対象にする

EmacsでC-sで検索するときに領域が選択されていたら、その領域を検索対象として検索するマクロを、自分の.emacsに追加しました。 ;; 選択した領域を使ってインクリメンタル検索を実行 (defadvice isearch-mode (around isearch-mode-default-string (forward…

自前CocoaPodsライブラリで公開するヘッダファイルを限定する方法

CocoaPodsは、自動作成するumbrellaヘッダにデフォルトで全ヘッダファイルを含めます。 Objective-Cだけで書いてある場合、この振る舞いでも特に問題にはなりません。・・・ですが、ライブラリにC++コードなどSwiftで対応しない言語のファイルが含まれている…

RxSwiftでUIKitを扱うにはRxCocoaが必要

内容はタイトル通りです。引き続きRxSwiftについて。 github.com 「RxSwiftでUIKitを試してみよう。このAPIページを見ると色々とあるな…あれ?何も使えない?」と。 よくよく確認してみると、RxSwiftの下には別のpodspecファイルとして、RxCocoa.podspecがあ…

RxSwiftのMainSchedulerは何物か

遅まきながら、RxSwiftに手を付け始めました。 github.com リアクティブプログラミングはまったく経験がないので、公式の「Getting Started」を読みながら、概念や基本を調べることにします。 ですが、まだ分からないことばかりで詳細には全然立入れていませ…

コマンドラインからApp Storeのアプリをインストール

下のブログで、コマンドラインからApp Storeのアプリをインストールするコマンドラインツール「mas」が公開されていることを知りました。 rcmdnk.github.io 確かにわざわざAppStoreから1つずつインストールするのは面倒なので、自分の環境にも入れてみること…

spacemacsのトラックパッドスクロール量を調節する

spacemacsが思いのほか使いやすかったので、これまで育ててきた.emacsをバッサリ捨てて、乗り換えることにしました。思っていた以上にspacemacsは至れり尽くせりで動いてくれたので、 spacemacsはユーザー様の設定を~/.spacemacsの末尾、dotspacemacs/user-c…

std::basic_stringの「&foo[0]」は何を返すか

c++

とあるコードを読んでいたら、 std::string foo = "abc"; printf("[%s]\n", &foo[0]); // [abc] みたいな書き方をしていて「ん?stringなのに??」と思ったので、きちんと調べてみました。結論を書いてしまうと、 配列添字の演算子「[]」は、アドレス取得の…

(ようやく)SwiftのflatMap()を追いかける

前回(といっても大分前になってしまいましたが)、flatMap==flatten(map())であることから、flatMap()の準備としてflatten()を先に読みました。 swiftlife.hatenablog.jp Swiftのflatten()は平坦化を直ちに行うのではなく、要素が必要になった時にはじめて処…

SKSceneとUIViewとの座標変換

SpriteKitのSKSceneの座標系は、UIViewの左上座標とは異なり、y軸が反転した左下座標系になっています。そのため、UIGestureRecognizerのようなUIView側の座標系をSpriteKitに持ち込むには、座標系を変換してあげなくてはいけません。 具体的には、SKScene…

svn commit時に英語でメッセージ書くためのヒントを表示する

Qiitaに次のような投稿がありました。 qiita.com git commitをするときに英語の例文をコメントとして表示するようにして、英語コミット力を上げようという内容です。これはいいなと、同じようなことがSubversionでも出来ないかなと調べてみました。結果とし…

NSNumberで扱われるSwiftの数値型

SwiftのIntやFloatのようなプリミティブな数値型をCやObjective-Cとで相互に扱う場合、その型は基本的に同じ値域の型で表されます。具体的には「Using Swift with Cocoa and Objective-C (Swift 2.1)」の「Interacting with C APIs」-「Primitive Types」に…

gitbookでPDF/epub出力できるようにする(calibre)

前回の記事によりmarkdownファイルをgitbookでHTML化できるようになったわけですが、せっかくなのでPDFでも出力できるようにします。 gitbookからPDF化するにはCalibreを使う gitbookのgithubページには、eBookへの出力について次のように書いてあります。 e…

Gitbookのインストール(2016/1/19時点)

お仕事で色々と勉強している、ここには書けないことをまとめるためにいいツールはないかと探していたところ、現時点ではGitBookが良さそうだと思い、インストールしてみました。 別にTeXやExcelやWordなどでもよかったのですが、書き殴りたい時にはどれも大…

npmのプロキシ設定

ツールごとにプロキシサーバーの設定が異なり、必要なときにいつも忘れてしまうので、備忘録として。 npmでプロキシサーバーを設定するには、npmコマンドから、config set proxyやconfig set https-proxyを使います。 % npm config set proxy http://XXX.XXX…