- 投稿日:2019-01-26T22:29:38+09:00
特定の条件を満たす要素を指定個数分だけ取り出す関数の実装
はじめに
以前の 記事 に書いた「特定の条件を満たす要素を指定個数分だけ取り出す」に必要な実験が全て完了したので、実際の動作を実装する。
なお、中で使用しているgetElements()の実装は こちら。
実装
ソースコードfunc filterElements(point: Int, elements: Int, array: [Int]) -> [Int] { let targetList = array.filter{ point <= $0 } return getElements(elements: elements, array: targetList) }テストパターン(point: 0, elements:5, array: [1,3,5,7,9]),[1,3,5,7,9],"全取出(対象:0以上の要素)") (point: 5, elements:0, array: [1,3,5,7,9]),[], "最大3個 取出個数 下限値未満") (point: 5, elements:1, array: [1,3,5,7,9]),[5], "最大3個 取出個数 下限値") (point: 5, elements:3, array: [1,3,5,7,9]),[5,7,9], "最大3個 取出個数 上限値") (point: 5, elements:4, array: [1,3,5,7,9]),[5,7,9], "最大3個 取出個数 上限値超過") (point:10, elements:5, array: [1,3,5,7,9]),[], "該当なし(対象:10以上の要素)")実行結果0 failures結果
予定通りの動作が完成した。
テストコードもあるので、Swiftの標準構文やシンタックスシュガーで置き換えられるものを見つけたら随時対応する。
- 投稿日:2019-01-26T21:46:25+09:00
Dart x Flutter で RenderBox/Canvas 関連のAPI を 試してみた。 2019年
Flutter で、 Render関連の情報が少ないので、昨年に書いたものを更新をしてみました。
みたいなのが、簡単に作れます。
初期段階 flutter でも、https://kyorohiro.github.io/umiuni2d/web/index.html のデモページにあるような、2dゲームなどが簡単に作れました。ので、今だと、より容易に作成できるのではないでしょうかHello World
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/hello.dart
四角形を描画
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_rect.dart
Animation
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/anime_rect.dart
画像を表示
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_image_assets.darthttps://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_image_dartio.dart
画像の変形
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/rotate_image.dart
タッチイベント
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/touch_test.dart
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/multitouch_test.dartTTF フォントでテキスト表示
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_text.dart
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_text_ttf.dartVertexs 関連
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_path.dart
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_vertexs.dart
https://github.com/kyorohiro/memo_flutter_2019/blob/master/lib/renderobject/draw_vertexs_image.dartPS
こんな感じで、大体の機能は揃っていますね。
- 投稿日:2019-01-26T20:54:47+09:00
MultiPeerConnectivityのライブラリBeerKitを作りました。
ARKitを使った空間共有アプリを作るに当たってデバイス間通信の実装についてよく考えています。
iPhoneどうしで通信するに当たって一番便利なのがMultiPeerConnectivityです。MultiPeerConnectivityはWifiやbluetooth、そしてiPhoneの持っているp2p通信のシステムを使ってローカルのデバイス間通信をするためのフレームワーク。
そしてこのMultiPeerConnectivityを上からラップして使いやすくしているライブラリにPeerKitがあります。
日本語記事だと以下で紹介されています。
[iOS][Swift] イベント駆動型で P2P 通信をするPeerKit
PeerKitに問題があったのでフォークした
しかし、このPeerKit、
- 繋がりにくい
- 一度外れると復活できない
などなどのバグが少しあり、そのまま使うとハマってしまいます。メンテされていると良いのですが、このライブラリは現在メンテされていないようです。
ということで僕がフォークしていくつか修正したのがkboy-silvergym/PeerKitです。
しかしまだ問題があって、うまく繋がらないことがありました。
もう上から編集していくのはきつい。。!ってことで、真似して新しいライブラリをつくってみました。
BeerKit
PeerKitを真似てBeerKitという名前で作ってみました。ビールで乾杯するというローカルコミュニケーションはまさにP2P通信と言っても過言ではありません。
PeerKitとの大きな違いはData型を渡す前提で作っているところです。
データ送るとき
let data: Data = try! JSONEncoder().encode(message) BeerKit.sendEvent("message", data: data)PeerKitはAny型を渡すように作られているのですが、これが少し罠で、中でNSKeyedArchiverでアーカイブされてDataになるので、NSCodingに準拠している型じゃないとダメで、準拠してない型を渡すとクラッシュします。
だったら最初からData型を渡すようにしようということで、作り直しました。
データ受け取るとき
BeerKit.onEvent { (peerId, event, data) in guard let data = data, let message = try? JSONDecoder().decode(MessageEntity.self, from: data) else { return } self.messages.append(message) DispatchQueue.main.async { self.tableView.reloadData() } }JSONにして送受信することを想定してデモアプリはつくられています。
まとめ
ということで、もし良ければBeerKit使ってみてくださいー!何かあればPRもお待ちしています。
あと、⭐️もお待ちしてます。
- 投稿日:2019-01-26T15:56:28+09:00
テストコードとログの記事掲載の仕方について
はじめに
過去の 記事1 記事2 で、テストコードとログについての記事上の可読性を検証してきた。
本記事ではその内容を統合し、今後の記事の「記載内容の読み方」リンクを受けるページとして機能することを目的する。原文まま
実コードfunc getElements(elements: Int, array: [Int]) -> [Int] { let cnt = round(target: elements, min: 0, max: array.count) return [ Int ](array[0..<cnt]) }テストコードclass FuncTests : XCTestCase { func testGetElements() { XCTAssertEqual( getElements(elements: -1, array: [1,3,5,7,9]), [], "取出個数 下限値未満") XCTAssertEqual( getElements(elements: 0, array: [1,3,5,7,9]), [], "取出個数 下限値未満") XCTAssertEqual( getElements(elements: 1, array: [1,3,5,7,9]), [1], "取出個数 下限値") XCTAssertEqual( getElements(elements: 5, array: [1,3,5,7,9]), [1,3,5,7,9], "取出個数 上限値") XCTAssertEqual( getElements(elements: 6, array: [1,3,5,7,9]), [1,3,5,7,9], "取出個数 上限値超過") XCTAssertEqual( getElements(elements: -1, array: []), [], "取出個数 下限値未満") XCTAssertEqual( getElements(elements: 0, array: []), [], "取出個数 下限値未満") XCTAssertEqual( getElements(elements: 1, array: []), [], "取出個数 下限値") XCTAssertEqual( getElements(elements: 5, array: []), [], "取出個数 上限値") XCTAssertEqual( getElements(elements: 6, array: []), [], "取出個数 上限値超過") } }実行結果Test Suite 'FuncTests' started at 2019-01-26 15:06:41.432 Test Case '-[__lldb_expr_27.FuncTests testGetElements]' started. Test Case '-[__lldb_expr_27.FuncTests testGetElements]' passed (0.090 seconds). Test Case '-[__lldb_expr_27.FuncTests testRound]' started. Test Case '-[__lldb_expr_27.FuncTests testRound]' passed (0.001 seconds). Test Suite 'FuncTests' passed at 2019-01-26 15:06:41.577. Executed 2 tests, with 0 failures (0 unexpected) in 0.090 (0.145) seconds可読性向上
実コードfunc getElements(elements: Int, array: [Int]) -> [Int] { let cnt = round(target: elements, min: 0, max: array.count) return [ Int ](array[0..<cnt]) }getElementsのテストコード(XCTAssertEqual比較)(elements: -1, array: [1,3,5,7,9]), [], "取出個数 下限値未満" (elements: 0, array: [1,3,5,7,9]), [], "取出個数 下限値未満" (elements: 1, array: [1,3,5,7,9]), [1], "取出個数 下限値" (elements: 5, array: [1,3,5,7,9]), [1,3,5,7,9], "取出個数 上限値" (elements: 6, array: [1,3,5,7,9]), [1,3,5,7,9], "取出個数 上限値超過" (elements: -1, array: []), [], "取出個数 下限値未満" (elements: 0, array: []), [], "取出個数 下限値未満" (elements: 1, array: []), [], "取出個数 下限値" (elements: 5, array: []), [], "取出個数 上限値" (elements: 6, array: []), [], "取出個数 上限値超過"実行結果0 failures