iOSとか。

技術的なところをかけたらなーと

プライバシーポリシー

プライバシーポリシー


Kazuki Hayashida(以下,「当社」といいます。)は,App上で提供するサービス(以下,「本サービス」といいます。)におけるプライバシー情報の取扱いについて,以下のとおりプライバシーポリシー(以下,「本ポリシー」といいます。)を定めます。

第1条(プライバシー情報)
プライバシー情報のうち「個人情報」とは,個人情報保護法にいう「個人情報」を指すものとし,生存する個人に関する情報であって,当該情報に含まれる氏名,生年月日,住所,電話番号,連絡先その他の記述等により特定の個人を識別できる情報を指します。
プライバシー情報のうち「履歴情報および特性情報」とは,上記に定める「個人情報」以外のものをいい,ご利用いただいたサービスやご購入いただいた商品,ご覧になったページや広告の履歴,ユーザーが検索された検索キーワード,ご利用日時,ご利用の方法,ご利用環境,郵便番号や性別,職業,年齢,ユーザーのIPアドレス,クッキー情報,位置情報,端末の個体識別情報などを指します。
第2条(プライバシー情報の収集方法)
当社は,ユーザーが利用登録をする際に氏名,生年月日,住所,電話番号,メールアドレス,銀行口座番号,クレジットカード番号,運転免許証番号などの個人情報をお尋ねすることがあります。また,ユーザーと提携先などとの間でなされたユーザーの個人情報を含む取引記録や,決済に関する情報を当社の提携先(情報提供元,広告主,広告配信先などを含みます。以下,「提携先」といいます。)などから収集することがあります。
当社は,ユーザーについて,利用したサービスやソフトウエア,購入した商品,閲覧したページや広告の履歴,検索した検索キーワード,利用日時,利用方法,利用環境(携帯端末を通じてご利用の場合の当該端末の通信状態,利用に際しての各種設定情報なども含みます),IPアドレス,クッキー情報,位置情報,端末の個体識別情報などの履歴情報および特性情報を,ユーザーが当社や提携先のサービスを利用しまたはページを閲覧する際に収集します。
第3条(個人情報を収集・利用する目的)
当社が個人情報を収集・利用する目的は,以下のとおりです。

(1)ユーザーに自分の登録情報の閲覧や修正,利用状況の閲覧を行っていただくために,氏名,住所,連絡先,支払方法などの登録情報,利用されたサービスや購入された商品,およびそれらの代金などに関する情報を表示する目的
(2)ユーザーにお知らせや連絡をするためにメールアドレスを利用する場合やユーザーに商品を送付したり必要に応じて連絡したりするため,氏名や住所などの連絡先情報を利用する目的
(3)ユーザーの本人確認を行うために,氏名,生年月日,住所,電話番号,銀行口座番号,クレジットカード番号,運転免許証番号,配達証明付き郵便の到達結果などの情報を利用する目的
(4)ユーザーに代金を請求するために,購入された商品名や数量,利用されたサービスの種類や期間,回数,請求金額,氏名,住所,銀行口座番号やクレジットカード番号などの支払に関する情報などを利用する目的
(5)ユーザーが簡便にデータを入力できるようにするために,当社に登録されている情報を入力画面に表示させたり,ユーザーのご指示に基づいて他のサービスなど(提携先が提供するものも含みます)に転送したりする目的
(6)代金の支払を遅滞したり第三者に損害を発生させたりするなど,本サービスの利用規約に違反したユーザーや,不正・不当な目的でサービスを利用しようとするユーザーの利用をお断りするために,利用態様,氏名や住所など個人を特定するための情報を利用する目的
(7)ユーザーからのお問い合わせに対応するために,お問い合わせ内容や代金の請求に関する情報など当社がユーザーに対してサービスを提供するにあたって必要となる情報や,ユーザーのサービス利用状況,連絡先情報などを利用する目的
(8)上記の利用目的に付随する目的
第4条(個人情報の第三者提供)
当社は,次に掲げる場合を除いて,あらかじめユーザーの同意を得ることなく,第三者に個人情報を提供することはありません。ただし,個人情報保護法その他の法令で認められる場合を除きます。
(1)法令に基づく場合
(2)人の生命,身体または財産の保護のために必要がある場合であって,本人の同意を得ることが困難であるとき
(3)公衆衛生の向上または児童の健全な育成の推進のために特に必要がある場合であって,本人の同意を得ることが困難であるとき
(4)国の機関もしくは地方公共団体またはその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合であって,本人の同意を得ることにより当該事務の遂行に支障を及ぼすおそれがあるとき
(5)予め次の事項を告知あるいは公表をしている場合
利用目的に第三者への提供を含むこと
三者に提供されるデータの項目
三者への提供の手段または方法
本人の求めに応じて個人情報の第三者への提供を停止すること
前項の定めにかかわらず,次に掲げる場合は第三者には該当しないものとします。
(1)当社が利用目的の達成に必要な範囲内において個人情報の取扱いの全部または一部を委託する場合
(2)合併その他の事由による事業の承継に伴って個人情報が提供される場合
(3)個人情報を特定の者との間で共同して利用する場合であって,その旨並びに共同して利用される個人情報の項目,共同して利用する者の範囲,利用する者の利用目的および当該個人情報の管理について責任を有する者の氏名または名称について,あらかじめ本人に通知し,または本人が容易に知り得る状態に置いているとき
第5条(個人情報の開示)
当社は,本人から個人情報の開示を求められたときは,本人に対し,遅滞なくこれを開示します。ただし,開示することにより次のいずれかに該当する場合は,その全部または一部を開示しないこともあり,開示しない決定をした場合には,その旨を遅滞なく通知します。なお,個人情報の開示に際しては,1件あたり1,000円の手数料を申し受けます。
(1)本人または第三者の生命,身体,財産その他の権利利益を害するおそれがある場合
(2)当社の業務の適正な実施に著しい支障を及ぼすおそれがある場合
(3)その他法令に違反することとなる場合
前項の定めにかかわらず,履歴情報および特性情報などの個人情報以外の情報については,原則として開示いたしません。
第6条(個人情報の訂正および削除)
ユーザーは,当社の保有する自己の個人情報が誤った情報である場合には,当社が定める手続きにより,当社に対して個人情報の訂正または削除を請求することができます。
当社は,ユーザーから前項の請求を受けてその請求に応じる必要があると判断した場合には,遅滞なく,当該個人情報の訂正または削除を行い,これをユーザーに通知します。
第7条(個人情報の利用停止等)
当社は,本人から,個人情報が,利用目的の範囲を超えて取り扱われているという理由,または不正の手段により取得されたものであるという理由により,その利用の停止または消去(以下,「利用停止等」といいます。)を求められた場合には,遅滞なく必要な調査を行い,その結果に基づき,個人情報の利用停止等を行い,その旨本人に通知します。ただし,個人情報の利用停止等に多額の費用を有する場合その他利用停止等を行うことが困難な場合であって,本人の権利利益を保護するために必要なこれに代わるべき措置をとれる場合は,この代替策を講じます。

第8条(プライバシーポリシーの変更)
本ポリシーの内容は,ユーザーに通知することなく,変更することができるものとします。
当社が別途定める場合を除いて,変更後のプライバシーポリシーは,本ウェブサイトに掲載したときから効力を生じるものとします。
第9条(お問い合わせ窓口)
本ポリシーに関するお問い合わせは,下記の窓口までお願いいたします。

Eメールアドレス:develop.hack919@gmail.com

以上

Cocoa関西に参加してきました

cocoa-kansai.connpass.com

SiriKitの話やEmascの話がたくさん聴けて面白かったです

人数的には10人くらいの参加者がいました。 場所はクランフロントの奥のビル。

写真とかは撮ってないんですがいい感じのところでした。

今回初めて登壇者として参加したのですが Copy on Writeの話とstaticオブジェクトがlazyで生成される話をごちゃってしまって 誤解を生む発言をしてしまった!!!!!! ここに訂正する!!

発表した資料はこちら

www.slideshare.net

外部アクセサリのことは任せろー!

AsReaderの紹介も少ししたんですが先駆者が発表しまくっていたことで 宣伝効果なし!笑 先駆者すげえ

飲み会でDIの話とかTestableとはどうとかシングルトンは悪だとかEmacsは環境だとかの話をしました すげえ楽しかったので次回も参加したい。 会社に技術的な話をできる人があまりいないのでいい刺激をもらえた

感謝Cocoa関西!

【swift】Dataを16進数文字列のStringへ変換

swiftでDataの中身を見たい時にそのままprintすると12Byteとかのlengthが表示されて中身が見れないので見れるようにStringへ変換してからprintしてあげます。   サンプルコード

let data = Data(bytes: [0x00, 0x02, 0xFF])
let hexString = data.map { String(format: "%02X", $0) }.joined()
print(hexString)

コンソール出力結果

0002FF

Stringに対してmapを使って全ての文字をフォーマットしています。 joined()で配列の要素を一つにまとめています

map(_:) - Array | Apple Developer Documentation

Arrayの全てのElementに何か処理をして[Element]を返したい時に便利!

swiftでbit単位の計算することほとんどないと思いますが…(自分はがっつりありますw)

GCPUG Kansai Summit Day 2018に参加してきました

GoogleCloudPlatformに関しての勉強会があったので行ってきました。

gcpug-osaka.connpass.com

 

会場入ったら結婚式みたいなケータリング?バイキング?的なご飯が用意されていて

それがめちゃめちゃ豪華。ソフトドリンクは烏龍茶とオレンジジュースでお酒はワインとかビールとか。ご飯はグラタン、ピザ、たこ焼き、ケーキとか豪華すぎた。

行くの遅かったから速攻で腹に詰めて本題のセッションルームへ移動

 

 f:id:solty_919:20181023222806p:plain

 

セッションはルーム2でずっといましてこんな感じ

 

f:id:solty_919:20181023224624p:plain

 

f:id:solty_919:20181023224730p:plain

Kubernetesの話が多かった。がインフラの知識なさすぎてあんまりわからんかった。

多分クラスタという概念があんまりないからだと感じた。物理的なサーバーをまとめたものがクラスタって概念なんかな?

Dockerのimageだとかコンテナだとかの話はすんなり入ってきた

とりあえず複数のクラスタを使用して複数のコンテナを立ち上げる時Kubernetesが便利っぽい(あんまわかってない)

 

後BigQueryはなかなか使えそう。

ペタサイズのデータにSQL打てるのはすげえ

 

複数のリージョンにSQL発行して一番早いレスポンスを採用してそれ以外は捨てるらしい。Googleさん数の暴力がすごい!!お金持ち!

 

 

 

【Kotlin】カウントアップアプリ作成【超入門】

昨日24歳になりました。iOSだけのプラットフォームでは

今後やっていけないと思うので。Kotlinを触って

簡単なアプリの備忘録書いときます

 

今回使うのはこいつ。

Android Studio Version 3.1.4

 

こいつを使ってカウントアップするだけのアプリを作って見ようと思います

大まかな手順としては以下

1、プロジェクトを作成

2、TextViewとButtonを画面に配置

3、Buttonのイベントを実装

終わり!

 

1、プロジェクトを作成

f:id:solty_919:20180920223023p:plain

まずプロジェクトを作成します。

 

f:id:solty_919:20180920223025p:plain

適当なアプリケーション名をつけて、Kotlinサポートにチェックをつけて次へ

 

 

f:id:solty_919:20180920223029p:plain

空のアクティビティーを選択してささっと次へ

アクティビティーの設定もそのままで完了… 結構時間かかります(^_^;)

 

2、TextViewとButtonを画面に配置

f:id:solty_919:20180920224744p:plain

こんな感じの画面が出ますのでHelloe World!と表示されている

TextViewを選択してIDを振ってあげます。今回は「count」としました。

 

その次にButtonを画面の上にドラッグ&ドロップします。

f:id:solty_919:20180920225146p:plain

 

f:id:solty_919:20180920230448p:plain

右のサイドメニューのプラスボタンがあるのでそれをぽちぽちして

制約をつけてあげます。

 

3、Buttonのイベントを実装

f:id:solty_919:20180920225432p:plain

MainActivity.ktをポチッと

ここにコードを書いていきます

 

import文の追加

import android.widget.Button;    //ここを追加
import android.widget.TextView; //ここを追加

 

TextViewとButtonのインスタンスを取得します

//countTextViewのインスタンスを取得
val countTextView = findViewById<TextView>(R.id.count)

//buttonのインスタンスを取得
val button = findViewById<Button>(R.id.button)

 

countの数を保持する変数を宣言します

//後から値を変更したりするので`var`で宣言
var count: Int = 0

 

そのあとにButtonの処理を追記します

//Buttonの処理を追記
button.setOnClickListener {
count++
countTextView.setText(count.toString())
}

 

全体的なコード

package com.example.khayashida.countup

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

import android.widget.Button; //ここを追加
import android.widget.TextView; //ここを追加


class MainActivity : AppCompatActivity() {

val count: Int = 0

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//countTextViewのインスタンスを取得
val countTextView = findViewById<TextView>(R.id.count)

//buttonのインスタンスを取得
val button = findViewById<Button>(R.id.button)

//Buttonの処理を追記
button.setOnClickListener {
count++
countTextView.setText(count.toString())
}
}
}

 

ここまで完成したら右上にある緑色の三角ボタンを押してビルド!

 

f:id:solty_919:20180920232900p:plain

このボタンをぽちぽちするとカウントできます!

 

f:id:solty_919:20180920233015p:plain

 

 

まとめ

ButtonとかTextViewを使うためにimport文が増えていくのは少し厄介だなという感想

でもiOSのコードと似てる部分はあるので直感的にはかけたと思います

UINavigationControllerのviewControllers

 

 

UINavigationController

UINavigationController - UIKit | Apple Developer Documentation

 

 

var viewControllers: [UIViewController] { get set }

これのプロパティを取得するとNavigationControllerにStackされている

ViewControllerの一覧を配列で取得できる

viewControllers - UINavigationController | Apple Developer Documentation

 

 

func setViewControllers(_ viewControllers: [UIViewController], 
               animated: Bool)

あとこれでStackされているViewControllerを任意の配列で`set`できるっぽい

UINavigationControllerは画面遷移の申し子だな〜〜〜〜

setViewControllers(_:animated:) - UINavigationController | Apple Developer Documentation

 

 

内容は薄いけど少しずつ見ていこうな( ^ω^ )

 

iOSDC 2018 四日目に参加しました

 

iosdc.jp

 今回参加したのは9/2(日)の四日目です。

ちなみに宿泊費、交通費、チケット代全て経費で

行かせてもらいました!

iOSエンジニア募集中🍎

https://asreader.jp/

 

 

 今日のお昼ご飯のメニューはこれ。 

f:id:solty_919:20180902182816j:plain

 

ローストポーク丼食べました😁

 

最後に流れに乗っかって東京駅でエンジニアさんたちと

ご飯食べました。

```

$ niku deploy

```

f:id:solty_919:20180902212450j:plain

 

f:id:solty_919:20180902212428j:plain

@niwatakoさん

@ta_ka_tsuさん

@1024jpさん

@dy4_268さん

@ikesyoさん

ありがとうございました!

 

 

ここからセッションの感想

 

プッシュ通知はどのような進化をたどってきたか by Kenta Nakai | プロポーザル | iOSDC Japan 2018 - fortee.jp

#### プッシュ通知はどのような進化をたどってきたか

iOSがテキストのみの通知から画像やタイトル、サブタイトルなどが一緒に送れるようになった過程をうまくまとめていた発表でした。iOS12でできるようになる事なった事や現時点のPush通知でどう言うことができるのがわかった 

 

 

Swiftのジェネリクスはどうやって動いているのかコンパイラのソースから探る by omochimetaru | プロポーザル | iOSDC Japan 2018 - fortee.jp

#### Swiftのジェネリクスはどうやって動いているのかコンパイラのソースから探る

Swiftのコンパイラがどのように動いているかを

コンパイラから紐解くセッション。

正直あまり内容はわからなかったがSwiftのコンパイラ

すごい賢いことがわかった。

structはサイズによってコンパイラに値を渡すか参照を渡すか

決まるらしい…

 

 

デバイス・OSバージョンの依存が少なく、メンテナンスしやすいビューを作る by Kishikawa Katsumi | プロポーザル | iOSDC Japan 2018 - fortee.jp

#### デバイス・OSバージョンの依存が少なく、メンテナンスしやすいビューを作る
なぜレイアウトが崩れるのか?

Realmで有名なkishikawaさんのセッション。

アイコンはたくさんネット上で見たことがあったが

生で見るのは初めて笑

レイアウトが崩れる要員として

- 状態が多い

- 動的な要素が多い

などが挙げられていた。

これに対してなるべく状態を少なくするように設計することが

大事とのこと。

バイスのサイズを判定して何か処理をするなどは

なるべくしない設計に。

UIStackViewはUITableViewやUICollectionViewの代わりに

なる可能性が十分にありレイアウトの状態を

簡潔に保つファクターとして採用することがあるそう

isHiddenをうまく使ってStackViewと友達に!

 

iOS アプリの開発速度を70%高速化したデバッグノウハウ by Kuniwak | プロポーザル | iOSDC Japan 2018 - fortee.jp

#### iOS アプリの開発速度を70%高速化したデバッグノウハウ

スライドがすごく見やすかった…

テストに関しての話が面白かった。

UnitTestをコーディングするに当たって

必ず辛いい時期がありそれを乗り越えれば

一気に開発効率170%増加!とのこと

辛い時期を越えるためには

テストしやすいコード

を心掛けることが開発効率を上げるための第一歩となりそう

テストしやすいとは何なのか、どうすればできるのか

勉強していく必要がある