休日の過ごしかた

こんにちは、前回の時に次回はゆるい感じで書くと言ってしまいましたので、今回はゆる〜く書いていこうと思います。

普段みなさんどのように休日を過ごしていますか?

自分は普段、ついついダラダラ過ごしてしまいがちです。

休日の起床時間は大体10~11時ぐらいで、正直言ってあまりよろしくないと思っています。

平日の仕事がある日は絶対に起きれるのですが、休日になった途端アラームをかけているにも関わらず、いつも起きている時間に起きれることがほとんどないです。

なぜなのでしょう・・・・?

本当なら休日を朝早く起きて遊びに出かけたり、趣味に没頭したりしたいのですが、後回しになりがちです。

自分的には土日のどちらかをだらだらする分には構わないと思います。

誰でもリラックスすることは大切だと思うからです。

けれどリラックスしすぎるのもあまりよろしくないと思います。

リラックスしすぎは気の緩みにつながってしまうと思います、気の緩みは仕事にも影響するからです。

なので、休日でもしっかりとやることを決めて、行動するべきだと私は思います。

休日も平日もやる時はやる、休むとこは休む!というようにしっかりとしたメリハリをつけることが大切だと思います。

日頃からそういうことを意識していれば仕事でも自然ともっと意識を高められるのではないかと思います。

私はリラックスという意味で明日から実家の方に少し帰らせていただきます(笑)

迷惑をかけた分はしっかりと取り返すていきたいと思いますので宜しくお願いします。

ということで今回はこのぐらいにして、次回からはもう少し仕事の内容に関係するようなところを書いていきたいと思います。

釣りに行って来ました!

こんにちは、宮川です。
6/17(土)に岐阜オフィスメンバーで釣りに行きました!
人生初の釣りです。
岐阜を深夜1時に出発。三重県尾鷲の「天海」で海上釣り堀に挑みました!

上の写真は、海に出る前の写真です。海も人生の中で2、3回しかみたことがないので、この時点でテンションが上がってました!

ゲームの中(どうぶつの森)では釣りをやったことがあるので、タイミングはバッチリ!…と思っていましたが、そう簡単には釣れず…。

エサの種類や、エサの位置、深さなど条件が揃ってやっと釣れるのだと実感しました!どうぶつの森って簡単ですね…。

最初全然釣れなかったのですが、他の方々に釣り方を教えていただいた結果、タイ3匹が釣れました。やったー!

↑タイの写真(自分のタイだと思っていましたが、カイザーさんのタイでした!すみません!(笑))

他の方もシマアジ、ブリなど大きい魚が釣れてて羨ましかったです

人生初の釣りでしたが、とても面白かったです!みなさんがハマる理由もわかりました!

また時間があるとき釣りに行きたいと思います。

以上、宮川でした!

ナレッジの管理について

こんにちは、本日はナレッジについてです。

ナレッジとは

一般的には「知識」や「知見」といった意味の英語である。 企業経営に関する用語としては、企業が蓄積しているあらゆる情報を体系的に可視化し、営業活動や経営活動に有益な情報を「知識」として新たに活用する考え方を表す際に用いられる言葉である。(ナレッジとは – IT用語時点 weblio辞書)

上記のように説明されております。

今回何が言いたいのかというと、情報の蓄積をきちんとしましょうということです。今までmiというツールでメモ帳がわりに使っていたのですが、後から見直すと蓄積された情報探しづらいなどを感じておりました。

メモだからということで目をそらしていた部分はあったのですが、さすがにそれではまずいということで、これからはとりあえず有名どころでEvernoteを使うようにしていこうと思います。

もしみなさんの中でEvernoteなんてダサい、こっちのサービスの方がいいですよとかあれば是非とも教えていただきたいです!

そしてできれば個人だけでなく社内で知識を共有できるようになれば、なおいいですね。メモ書き程度では恥ずかしくて共有し辛いですが

知らないより、知っていた方が良い話 #6

今回も知らないより、知っていた方が良い話をします。

今回は前にお話ししました、人間力について更に深めてお話しさせて頂きます。

人間力、こう大きく一括りにすると、なんだか大層な感じがして

臆してしまいがちですが、実際は我々が小学生の頃や中学生の頃に

教えられて来た事の延長上にあります。

例えば、ゴミは捨てましょう。

皆さんゴミは捨てますよね?では道路に捨ててあるゴミはどうでしょうか?

中々拾う事は出来ないと思います。(気恥ずかしかったり、面倒臭かったり)

では、事務所や自分の部屋でしたらどうでしょうか?

気恥ずかしさやは無くなりますが、面倒臭かったりしてそのままの事は

無いでしょうか?(気づかないのは論外です。)

実家暮らしの自分の部屋でしたら、親が

事務所でした、会社の自分以外の仲間が

掃除してくれるのです。

自分が面倒臭いと言ってやらない事によって、誰か人が動いて

自分の部屋や、事務所が綺麗に保たれるのです。

ここまでこれば分かると思いますが

自分の事だけを考えて動いている人=人間力の低い人になります。

誰かが、やってくれている。

勝手に綺麗になっている。

は卒業しましょう。

このゴミを置いて行ったらどうなるか?

この部分を放って置いたらどうなるか?

を考えて、人間力をあげましょう!

[iOS] Googleカレンダーのログイン認証をGIDSignInに移行する

こんにちは。カイザーです。

今年の4月にWebViewを使用した従来のGoogleログインは使用できなくなり、GIDSignInなどを使用する必要が出てきました。
WebViewでは、普段ユーザが使用しているログイン情報を使用することができず、アプリ毎にユーザがログイン情報を入力する必要があり、煩わしいためです。
そこで、URLスキームを使って普段使用するWebブラウザを使用させるか、WKWebViewなどのWebブラウザとログイン情報を共有出来る方法に移行するわけです。

GIDSignInは、この新しいログイン周りが簡単に行うことができるGoogle公式のライブラリです。WKWebViewを使用します。
今回は、従来の認証からGIDSignInに移行し、Googleカレンダーで使用する、という想定で進めていきます。

1. まずは導入

下記URLに従って導入します。とりあえずログインは出来るようになります。
https://developers.google.com/identity/sign-in/ios/sign-in?ver=swift
その際、以前の「GTMOAuth2ViewControllerTouch」でログインしていた処理は削除してください。

2. ログイン結果を通知

以前は、該当のViewControllerでログイン結果を受け取ることができましたが、今回はAppDelegateで行うようになっています。
そのため、AppDelegateからNotificationを使ってViewControllerに受け渡します。

AppDelegate.swift

extension Notification.Name {
static let googleSignInSuccess = Notification.Name("googleSignInSuccess")
static let googleSignInFailed = Notification.Name("googleSignInFailed")
}

AppDelegate.swift

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!,
withError error: NSError!) {
if let _ = error {
// サインインが失敗
NotificationCenter.default.post(name: .googleSignInFailed, object: nil)
} else {
// サインインが成功
NotificationCenter.default.post(name: .googleSignInSuccess, object: nil)
}
}

これで、サインインできた時に通知するところまではできました。

3. ログイン結果の受け取り

あとは、受け取る側のViewControllerでNotificationの受け取りを設定します。失敗の場合はエラー表示します。
LoginViewController.swift

var service: GTLServiceCalend

override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess), name: .googleSignInSuccess, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(loginFailed), name: .googleSignInFailed, object: nil)
}

deinit {
NotificationCenter.default.removeObserver(self)
}

func loginSuccess() {
// ログイン成功
}

func loginFailed() {
let alert = UIAlertController(title: "ログインエラー", message: nil, preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
present(alert, animated: true, completion: nil)
service?.authorizer = nil
setGoogleAccountLabelText(nil)
}

4. カレンダーAPIのリクエスト


// これは以前と同じです
private let service = GTLServiceCalendar()
func fetchEvents() {
// セッション切れになっているかもしれないので、再ログインしておく
GIDSignIn.sharedInstance().signInSilently()
if let auth = GIDSignIn.sharedInstance().currentUser {
// 以前「GTMOAuth2ViewControllerTouch」から取得していた認証情報は、「auth.authentication.fetcherAuthorizer()」で取得できる。
service.authorizer = auth.authentication.fetcherAuthorizer()
}
// カレンダーのイベントを取得します。service.authorizerに認証情報が入っているため、以前と同じように使えます。カレンダーイベント取得後「finishedWithObject」が呼ばれます。
let query = GTLQueryCalendar.queryForEventsList(withCalendarId: "カレンダーID")
let calendar = Calendar.current
var components = (calendar as NSCalendar).components([.day, .month, .year], from: selectedDate)
components.month? -= 1
var date = calendar.date(from: components)
query?.timeMin = GTLDateTime(date: date, timeZone: TimeZone.autoupdatingCurrent)
query?.singleEvents = true
query?.orderBy = kGTLCalendarOrderByStartTime
service.executeQuery(
query!,
delegate: self,
didFinish: #selector(CalenderViewController.displayResultWithTicket(_:finishedWithObject:error:))
}

ここでポイントになるのが、以前から使用していた「GTLServiceCalendar().authorizer」と、「GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()」が同じinterfaceを適用しているので、キャスト可能であるということです。

これは特に文献がなかったので、宣言部をひたすら見て行くしかなかったですね。。(GTLSercieとGIDSignInは両方ともObjective-Cで書かれているので、ヘッダファイルを見ていきます。)

まとめ

GIDSignInに切り替えても、従来のGTLServiceは利用可能。
ちなみに、AndroidはWebViewログインを行わず、OSの機能でログインできるので対応は不要です。

GoogleのAPIを使用していて、まだWebViewで認証している方は、急いで移行してください!

今後の意気込み

こんにちは、田中です。

最近大阪や東京など都会に遊びに行く機会が増えたのですが、さすが都会。人が多く、駅や周辺の建物は大きくて高い!思わず見上げながら歩くので首と足が痛くなりました…やはり田舎の方が過ごしやすくていいですね(^^;)

最近お仕事でアプリのUIを作成する機会が多くなりました。
携帯を持ち始めた頃から今まで数多くのアプリを利用してきましたが、いざデザインをするとなるとかなり難しいです。
使いやすさや見やすさ、色合いやボタン等の配置などさっと思いつかずいつも時間をかけてしまいます。
今後は普段からいつも使用しているアプリの観察や類似アプリの見比べ、「こうなっていたらもっと使いやすいのに」と思ったらメモをするなどして知識を増やすことや作業時間の短縮に努めたいです。
また、仕事の合間合間にPHPなどの勉強も少しずつしていければと思います。

以上、田中でした。

職場の雰囲気について

こんばんは、今日は職場の雰囲気についてお話ししていこうと思います。

入社してから2ヶ月とちょっとが経ちました。

最初の1ヶ月目は正直に言って少し気まずいなぁと思う時がありました。

例えば、何かわからなくて質問する時、話し合いをする時など気まずい時がたまにありました。

しかし、日々生活していくにつれだんだんと社員の皆さんとも打ち解けてきました。

私はあまり自分から積極的に話しかけたりする方ではないので、最初のうちは戸惑うことが多かったです。(別にコミュ障というわけではありません笑)

先輩社員の方々や新入社員の同期の方々が日々優しく接してくれるので、最近は質問しづらいこともなくなってきました。

なので最近は分からないことがあったら聞くようにしています。

もちろん自分で調べてそれでもわからなかったらです。

2ヶ月目にして色々と見えてくるもがありました。

例えば、この人はどうゆう人だ、何が好きだ、などだんだんと見えてくるものがありました。

自分は話が合うということはコミュニケーション能力においてとても大事だと思います。

なので、人と話す時はこの人と自分の共通点になり得る話題をまず探します。

共通点となる話題があることによって打ち解けたり、そのことについて熱く語り合ったりできると思います。

なので、人と話す時はいつも相手が聞いていて苦にはならない話をしようと心がけています。

色々と路線が変わってしまったかもしれませんが、今回はこのぐらいにしておきたいと思います。

変に熱く語ってしまったので次回はゆったりとした感じのものをあげたいと思います。

 

 

ほたる

こんにちは。
最近、帰り道でほたるをよく見ます。
ほたるの光って綺麗ですね。心が落ち着きます。
写真に残そうと思ったのですが、残念ながら綺麗に映らず…。

地元ではほたる祭りという祭りも行っているみたいで、大量のほたるが見られるそうです。一回行って見たいですね。

今回はプログラムで行き詰まったときによく見るサイト(行き着くサイト or ブログ)を紹介しようと思います。

テックアカデミー

https://techacademy.jp/

テックアカデミーというサイトで、ワードプレスなど行き詰まったときによく見ました。とても読みやすいと思います。

 

HTMLクイックリファレンス

http://www.htmq.com/

HTMLで困ったときは迷わずここへ。

知りたいことすべて載ってます!

 

LIGinc

https://liginc.co.jp
LIGincという会社のサイトで、とても役立つ内容が書いてあります。ブログの内容が面白く、とても読みやすいようになっています。

時間があるときは、いつもこのサイトを見ています。

 

teratail

https://teratail.com/

プログラムで行き詰まった時に質問したり、回答したりとプログラマ同士で助け合うサイトです。

学生時代はよく質問していましたが、今は見る専門になっています。結構勉強になります。

結構役立つことが多いのでオススメです。

 

他にも色々見ていますが、主にこの4つを見ています。
皆様はどんなサイトを参考にしているのでしょうか…。とても気になります。

以上、ほたるとよく見るサイトでした
 

Xcode IBOutletCollections について

こんにちは、今更ながらIBOutletCollectionsについてです。

まずどういったことができるのかというとIB上でで配置したオブジェクトを配列として管理が行えます。

上記ができると複数のButtonやViewを使う時にまとめて関連付けを行えるのでとても便利です。また collection名.forEach{}なども使えるので初期設定を行いたいときなども使いやすいです。

管理するオブジェクト数が決まっていないときなどは、使いづらいですが、ストーリーボードで同じオブジェクトを複数管理しないといけない時は是非とも使ってみてください。

Collection内のオブジェクトの順番が間違えっていると思わぬバグになりますので、そこだけは注意しましょう!私は失敗したことがございます!

 

 

 

Swiftのmap、filter、forEachでワンランクアップ!

お久しぶりです。カイザーです。

さてみなさん、Swiftしてますか?
いいですよね、Swift。

今日は、Swiftのmap、filter、forEachについて紹介します。

まず概要についてはこちらです。
http://qiita.com/motokiee/items/cf83b22cb34921580a52#enumerate要素と要素のインデックスが欲しい時に使う

つまるところ、これまでforinなどの高速列挙を使って、配列の要素に対して、統一した処理を行ったり、条件分岐して絞り込みを行ったり、、、みたいなことが簡単にできます。

ここでサンプルです。


self.stamps = resultStamps.filter({ (element) -> Bool in
element.category == .normal
})

あるコントローラは「stamps」という配列を持っていて、それは「category」というプロパティを持っています。
その「category」がnormalのスタンプのみを絞り込んでいます。

先ほどの記事の例では数字に関するものが多かったですが、このように、モデルクラスに対しても便利に使うことができます。

そのほかにも、filterはこんな風にも使えます。


self.stamps.filter({ stamp -> Bool in
stamp.count > 0
})

先ほどのスタンプで、所持しているものがフィルターされます。

このような感じで、Swiftでは少し気をつけると、かなり簡潔にプログラミングできます、

配列が関連するループでは、forinさえもあまり使わなくても良さそうですね。
ちなみに、Java 8でも同じような機能があります。Android開発でJava 8を使う際も積極的に使っていきたいところですね。

これを使って格好よくプログラミングしちゃいましよう!