クラロワガイド - Privacy Policy

Privacy Policy

Toru Nakandakari built the クラロワガイド app as a Free app. This SERVICE is provided by Toru Nakandakari at no cost and is intended for use as is.

This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.

If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible at クラロワガイド unless otherwise defined in this Privacy Policy.

Information Collection and Use

For a better experience, while using our Service, I may require you to provide us with certain personally identifiable information. The information that I request will be retained on your device and is not collected by me in any way.

The app does use third party services that may collect information used to identify you.

Link to privacy policy of third party service providers used by the app

Log Data

I want to inform you that whenever you use my Service, in a case of an error in the app I collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics.


Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.

This Service does not use these “cookies” explicitly. However, the app may use third party code and libraries that use “cookies” to collect information and improve their services. You have the option to either accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to refuse our cookies, you may not be able to use some portions of this Service.

Service Providers

I may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

I want to inform users of this Service that these third parties have access to your Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.


I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.

Children’s Privacy

These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13. In the case I discover that a child under 13 has provided me with personal information, I immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact me so that I will be able to do necessary actions.

Changes to This Privacy Policy

I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page.

This policy is effective as of 2020-12-08

Contact Us

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at

This privacy policy page was created at and modified/generated by App Privacy Policy Generator

iOSDC Japan 2020 に初参加してきました!🎉

iOSDC とは

iOS に関する技術やノウハウを LT や 10~40分 ほどのトークセッションが行われるイベントです。 今年4月に iOS エンジニアに転身して初めての iOS イベントに参加して楽しかったので活動報告をします。I will Blog!!!





自分が使っている機能は Background App Refresh とは違う形での実装例(=Background Notification)でしたが、他のバックグラウンド処理がある事を知って勉強になりました


Keychain のライブラリでお世話になっていて、またほんの少し関連のある Yappli のエンジニアの方のセッションでした!


次は ZOZO の理想の組織像Sansan/EightのiOS開発を行ったり来たりで聴いていました。

前者は iOS エンジニア(iOSに限らずだと思いますが)に対して手厚い福利厚生が魅力的だったり、

後者は今現場で採用している同じアーキテクチャーである VIPER の話があったり興味深いセッションでした。

後半はより興味があったセッションが複数被っていて見れていないのも多々ありましたが、 uhooi さんの CI についてのセッションが直ぐに実践してみたいと思った講演でした。 (しかも自分が見た講演の中で1番コメント欄が盛り上がっていました笑 ニコニコユーザでは無かった自分自身もあのコメントの盛り上がりには感動しましたw)



最近 Storyboard に慣れてきたと思った矢先にほとんど知らない機能の紹介(詳解)が盛りだくさんのセッションでした。 Size Classes は社内でも最近ホッと?で聞いたことはあったけど、その他はほぼ初耳の内容でした!



リリースしているアプリに対して、どうアプローチしてどういう結果になって今後はこういう風にして行きたい、という展望まですごく具体的で参考になるセッションでした。 (※Appium だけはよく分からない技術?ツールだったので要調査します!)

午後の部はアニメーションでも活用できそうな CGAffineTransform についてのセッションを聴いたり SwiftUI のセッションを主に聴いていました!




また 1,2日目の終わりには生で 5分間の LT が行われていて、オンラインにも関わらず臨場感あふれる雰囲気の中怒涛のスピードで色々なお話が聞くことが出来ました。

ハンズオン形式でその場で実演したり、5分間厳密なので途中で発表が終わったり、終了の合図の『ドラ』の音が大きかったり、1番 LT が盛り上がっていたなーと個人的には思いました! オンラインでこの盛り上がりなら、オフラインでみんなが同じ会場にいる場だともっと熱気や雰囲気は凄いんだろうなーと感じました。


とりあえず、すごく楽しかったです! 技術的に分からない事もたくさんありましたが、 iOS開発についてすごくモチベーションが上がりました! 来年は参加者(視聴者)以外の形でも何かしら携わってみたいなーと心の中で少し思いました! スピーカーの皆さん、スタッフの皆さん、本当にお疲れさまでした。とても楽しいカンファレンスをありがとうございました!

『宇宙と宇宙をつなぐ数学 IUT理論の衝撃』を読んで


本記事は 『宇宙と宇宙をつなぐ数学 IUT理論の衝撃』 という本を読み、自分なりの理解を整理して何かしらのアウトプットをすることで記憶に定着させる事を目的にしたものです。


いくばくか前にあの 『ABC予想』 がついに解決されたとして巷で話題になっていた。当時自分も少なからず耳に入っていたが、そこまで深く関心は無かった。

それから数カ月後してたまたま好きな Youtuber である QuizKnock さんがこの話題に触れた動画を見て改めて触れてみようと思うきっかけが芽生えた。


また 『Stardy - 河野玄斗の神授業』 という Youtube チャンネルでも同じような解説動画があり、こちらも視聴しました。


そこで 『ABC予想』 に興味を持った自分は一般人でもなるべく分かりやすく解説した著書があると知り、今回この本を読むことになった。 (著書名にもあるように解説するのはあくまで 『ABC予想』 を解くのに重要な 『IUT理論』 についてである)


まず本書を読み終えて自分なりに理解した 『IUT理論』 の結論としては以下3点です。

  • 数学の 舞台(=宇宙)を複数 用意する
  • 異なる数学の舞台間では 対称性通信 を行う
  • 通信によって発生する 歪み・不定性・ノイズ定量的に評価し、不等式を導く

本を読んでいない方は意味不明だとは思いますが、自分も正直さっぱり分かっておりません。 ただ 『IUT理論』 の基本的な考えはこれらだと自分の頭では理解しています。

1つずつの内容を覚えている範囲で掘り下げていきます。 (以下は自分の感想と本書に載っている内容が入り乱れて書かれております)

数学の 舞台(=宇宙)を複数 用意する

まず筆者は数学の足し算とかけ算には切っても切れない関係(=正則構造)にあると述べています。 そこで1つの数学の舞台ではその関係性を用いた問題?(ABC予想は少なくとも足し算とかけざんの問題)を解くことは非常に困難であるとし、数学できる舞台を複数用意して考えることが必要だとありました。

ここで最初自分は 複数の舞台 = 等式の右辺と左辺(イコールで分け隔てたもの) のものなのかなーと思っていましたが、その考えではありませんでした。 また複数の舞台を設けてどうやって問題を解いていくんだ?と思うかもしれませんが、自分もまだハッキリと分かっていない状態です。。。

異なる数学の舞台間では 対称性通信 を行う

まず 対称性通信 の前にどうして通信をするのかと言うと、舞台(=宇宙)が分かれているものの、扱っているモノ自体は 同じで同じではない数学の問題 なのです(この辺りから自分でも何を言っているか分かりませんが、本書でもそういうニュアンスだったと思います...) そのためにお互いが自分の情報を相手に伝えることで(双方向なイメージでは無かったのですが...)導き出したい答えに近づけていく(=復元していく)というアプローチです。

ここで 対称性通信 としているのは モノの「状態」を伝えるのではなく、操作を伝える事が重要で、それを『群』として相手に伝えることが肝とありました。それはどうしてかというと、『群』を通信することで異なる舞台での復元が可能になるからです。 (通信する群は様々な特徴を持っていたり、より複雑な構造をした 遠アーベル幾何学? であればあるほど復元の正確度が高いとの事です。恐らくこれは複雑であればあるほどそれを満たすモノが一意に決まるからではないかと自分は思っております)


通信によって発生する 歪み・不定性・ノイズ定量的に評価し、不等式を導く

最後にこの内容は1番理解が難しかったです。この一文自体はなんとなく「まぁ、異なる舞台間で通信してたらそういう歪みとか考慮しないといけないよな」と思い納得はしていたのですが、その方法の説明は正直本を1周しただけでは本当によく分かりませんでした。 (今書きながらも何も自分の頭に残っておらず2周目を読み直しています)


  • 対称性通信には歪みや不定性がつきものでしょうがないということ
  • その歪みや不定性を最小限にすることが重要でそれを可能にしているのが テータ関数



 N log(q_A) \fallingdotseq log(q_A) \\
上記の式を「IUT理論では次のような形の不等式が得られます」と書かれている \\
N log(q_A) < log(q_A) + c \\

おそらく から < に変換出来たことが歪みや不定性を計算・評価できたという自分の中での解釈です。(どうしてそうなるかは特に述べられていないはず)


以上を持ってこの記事は終わりにしたいと思います。 もしかすると読者の中には 「『ABC予想』について全然触れていないのでは?」と思う方もいるかと思いますが、これはこの本書自体がそうであり、『ABC予想』を解くことが重要ではなく、『IUT理論』という新しい数学の考え方を知ることがより重要であると述べられていたからです。

.swiftlint.yml の中身をザックリ把握

業務で使用している .swiftlint.yml の中身について理解を深める

# 無効にするルール。

# コードの記載のない改行を許可したい
- trailing_whitespace

# force_cast は場合によっては使用するため
- force_cast // object as! String を許可

# 変数名の直後に ":" を置かないのを許可する
- colon // let noWarning :String = "" , let noWarning : String = "" を許可

# "," の前にスペースを入れないのと、 "," の後にスペースを入れなくてよいのを許可する
- comma // (a,b), (c , d) // これらを許可

# identifier_name 変数名にアンスコ使いたい
- identifier_name // 3文字~41文字以内の制限を外すため

# 一行で書いたほうが簡潔な場合もある
- switch_case_on_newline // case .sunday: print("Today is Holiday") を許可する

# 値を使わない enum case を許可するため
- empty_enum_arguments // case monday(day: Int) の時に case .monday(_): を許可する

# typealiasで1文字も使うため
- type_name // typealias x = Void を許可

# 1つのメソッド内で条件式を11個以上使うのを許可する
- cyclomatic_complexity  // Cyclomatic Complexity Violation: Function should have complexity 10 or less: currently complexity equals 11 (cyclomatic_complexity)

# switch 文で fallthrough を許可するため
- fallthrough // case .bar: fallthrough case .bar2: something() がOK

# デフォルト無効のルールのうち、有効にするもの。
- attributes                     // @IBOutlet \n private var label: UILabel を許可
- closure_end_indentation        // クロージャのインデントを揃える
- closure_spacing                // クロージャの処理を始める際に空白スペースを入れる [].map { print($0) }
- conditional_returns_on_newline // return は改行する if true { return } は NG
- empty_count                    // if [Int]().count == 0 は NG [Int]().isEmpty を使用する
- explicit_init                  // let hoge = String.init("hoge") は NG
- fatal_error_message            // fatalError("") は NG fatalError("Error") など必ずメッセージ有りにする
- first_where                    // filter して first よりも first(where:) を使うことを推奨する
                                 // let hasWarning = hoge.filter { $0 > 1 }.first
                                 // let noWarning  = hoge.first { $0 > 1 }
- missing_docs                   // クラス外の public メソッドや public な protocol には docs を付ける必要がある
- nimble_operator                // 簡単(単純な?)な演算子比較を行いましょう?(よく分からなかった)
                                 // hasWarning: expect(10).to(equal(10))
                                 // noWarning : expect(10) == 10
- overridden_super_call          // (いくつかの)オーバーライドしたら親のメソッドを必ず呼ぶ & 複数回呼ぶのは NG
- prohibited_super_call          // (いくつかの)オーバーライドした親のメソッドを呼んではいけない override func loadView() { super.loadView() } は NG
- redundant_nil_coalescing       // 値が nil だと分かっている時に nil 結合演算子 を使うのはダメ var hoge: Int? = nil; var fuga = hoge ?? nil は NG
- sorted_imports                 // import ファイル名は名前でソートさせる
- valid_docs                     // missing_docs に変わった?

# 追加した OSS ライブラリは対象に含めたくない
- Pods/
- Carthage/

# 1行あたりの文字数制限を300に変更
# プロジェクト作成時にデフォルトで追加されるコメントをひっかけないため
line_length: 300

# Array や Dictionary 中の末尾の "," を矯正で付ける
    mandatory_comma: true

# elseは改行する
    statement_mode: uncuddled_else

# メソッドの行数は50行以下にする
function_body_length: 50


$ swiftlint autocorrect --format // .swiftlint.yml に応じて自動フォーマットしてくれる
$ swiftlint // 構文チェック

MacbookPro をクリーンインストールしたので初期設定の備忘録


新生活が始まるので気分転換に Macクリーンインストールしたのでセットアップ内容を忘れずにまとめておく。

  • brew (cask)
    • emacs
      • .emacs.d/init.el を gists から取ってくる
      • Option-v が √ が表示されてしまう問題
        • Preferences -> Profiles -> Keys -> Left Option Key: Normal から Esc+ に変更する
    • tig
      • .tigrc を gists から取ってくる
  • zsh
    • .zshrc を gists から取ってくる







  • tmpMatrixにビュー, プロジェクション座標変換行列を掛け合わせたものを保持しておくm.multiply(tmpMatrix, mMatrix, mvpMatrix);
  • 1つ目のモデル, 2つ目のモデルそれぞれのモデル座標変換行列を用意する
    →1つ目のモデルは(1.5, 0, 0)の位置で2つ目のモデルは反対側の(-1.5, 0, 0)の位置
    ※ この時の注意点として2つ目のモデル座標変換行列を用意するときにm.identity(mMatrix)としている点である。これは初期化処理に当たり、1つ目のモデルのモデル座標変換行列をリセットしている








attribute vec4 color;  // 頂点バッファから色情報を受け取るための変数
varying   vec4 vColor; // フラグメントシェーダに色情報を渡すための変数

// 頂点シェーダ
void main(void) {
    vColor = color; // 頂点バッファ(VBO)から受け取った色情報をフラグメントシェーダに渡すための変数に代入する

// フラグメントシェーダ
precision mediump float;

varying vec4 vColor;

void main(void) {
    gl_FragColor = vColor; // 頂点シェーダから渡された色情報を使う

精度を指定するprecision precisionは数値の精度を指定するためのキーワードで、続けて精度修飾子を記述することで利用できる
lowp : 精度低
mediump : 精度中
highp : 精度高



// 位置情報に加えて色情報を取得するために配列として取得する
var attLocation = new Array(2);
attLocation[0] = gl.getAttribLocation(prg, 'position');
attLocation[1] = gl.getAttribLocation(prg, 'color');

// attributeの要素数を配列に格納
var attStride = new Array(2);
attStride[0] = 3;
attStride[1] = 4; // 色情報はvec4

// 頂点の色情報
var vertex_color = [
   1.0, 0.0, 0.0, 1.0,
   0.0, 1.0, 0.0, 1.0,
   0.0, 0.0, 1.0, 1.0

// 色情報のvboを生成
gl.bindBuffer(gl.ARRAY_BUFFER, color_vbo);
gl.vertexAttribPointer(attLocation[1], attStride[1], gl.FLOAT, false, 0, 0);


頂点の色情報をvertex_colorと配列で定義して、要素数頂点数 × 4で構成されている


【実行結果】 f:id:arusu0629:20180408202122p:plain