サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
yashigani.hatenablog.com
台北に3泊4日で行ってきた。自分にとっては初めての海外旅行で緊張したが、行ってみると楽しめたので記録として残す。 出発まで とりあえずインターネットさえあればなんとかなるであろう、ということで台湾で使えるSIMカードを準備しておいた。こういうやつ。 [Mewfi] 台湾 4G-LTE データ通信 使い放題 プリペイドSIMカード (5日間) mewfiAmazon 普段からSIMロックフリーのiPhoneを使っているので特に問題なく利用できたし、気にせずインターネットできるおかげでめちゃくちゃ助かった。ただひとつ問題があるとするとなぜか2泊3日の旅と勘違いしていて3日間用を購入していたこと。妻の分と2枚用意していたのでアクティベートする日を1日ずらしてテザリングを駆使することで凌いだ。とはいえ、空港やホテルでは無料Wi-Fiが飛んでいた。街中を移動するのは2〜3日目がほとんどだったので1日
バリウムが苦手すぎて毎年の健康診断が憂鬱。前回は胃カメラなら楽だよって教えてもらったのでそうすることにした。まずは謎の薬を飲まされたり鼻から注入されたりする。ひどく不快。薬が効くまで少し時間を空ける。効いてきたら検査台に寝かされて検査技師になんか色々説明され、棒の先がグニグニ動くのを見せつけられる。めっちゃ動くやん…鼻から投入。串刺しにされて焼かれる魚の気持ちがわかった。ただでさえしんどいのに腸をグリグリされて腹がめちゃくちゃなことになる。気づいたら顔の半分は涎まみれになっている。苦しい以外の感情が生まれない。多分この状況をはらわたが煮え繰り返るって表現するんだと思う。よかったですね。看護師さんが背中をさすってくれるのだけが生きる希望に思えてきて、自暴自棄になりかけたくらいで検査が終わった。抜くのもすげえしんどい。検査後、コロナのニュースが流れるロビーで茫然とする。しばらく休憩したら動ける
この間、シンクが詰まったんですよ。シンクというのはいわゆる台所の流しのことです。一般にシンクが詰まると日常生活が困難になると言われています。 今の家に住み始めて5年程度、振り返るとシンクの排水口より向こう側を掃除したことがありません。ですから詰まっても仕方ないものなのでしょう。知らんけど。トイレの詰まりにはスッポンと相場は決まっています。ちなみに、筆者にはトイレが詰まった時にスッポンで事なきを得るという体験があり、スッポンに対する異様な信頼があります。この時は間を開けずに続けてトイレが詰まるということがありましたが、スッポンを手にする筆者には全能感がありました。そんなスッポンですが、引越に際して使用済みを運ぶのが憚られ廃棄しました。 閑話休題。シンクの詰まりに話を戻します。 兎にも角にもスッポンがあれば解決しそうなものですが、生憎我が家にはシンク用のスッポンがありません。仕方ないのでインタ
Cloud Function使ってますか?簡単なサービスをシュッと作って公開するにはとても便利ですよね。筆者もよく使っています。今やGCPの中では一番手に馴染んだサービスのひとつです。 最近Cloud Functionsを使っていくつかサービスを作っていて、最初にすることが決まってきたのでご紹介します。 TypeScriptの導入 初手はTypeScriptの導入です。みなさんはTSを導入するときどうしていますか?入れるだけなら簡単なんですが、ESLintだとかPrettierだとか考え始めるとゾッとしますよね。これから楽しくプログラミングを始めるのにゾッとはしたくないので、で頭をカラッポにしてgtsを使います。gtsというのはgoogleが作っているいい感じにTypeScriptを使えるやつで、入れておくだけでそれはそれはいい感じになります。詳しくはこのエントリーを見てくれ。npx gt
スカイリム、適当に歩いてたけどある瞬間マップの存在に気がついて目的地のリバーウッドは逆方向であることが判明した— やしがに (@yashigani) 2018年2月5日 ゲーム的文脈で未踏の地に関してはマップに載っていないだろうとおもって気にせず走り回っていたが、謎の洞窟で変な妖精みたいなやつにボコボコにされた結果、なにかおかしいとおもってマップを開くと目的地が逆方向であることがわかった。 逆!!! #NintendoSwitch pic.twitter.com/UHXBoVZKBo— やしがに (@yashigani) 2018年2月5日 ついに鍛冶屋に会えたし、せっかくなのでと鍛治ってみたらどう見てもひじがやられてた。冷えたところを叩いても音しかしないとおもう。 ついにマンモス見つけたけど、そばにおった巨人に撲殺された #NintendoSwitch pic.twitter.com/M
2017年のGOTYであるBotWにあまりに感動してしまい、オープンワールドゲームに興味が出てきたので、Skyrimを遊んでみている。 自分がしばらくゲームから離れている間に台頭していた洋ゲーってやつも久しぶりなので楽しみに始めたところ(最後に遊んでたのはゴールデンアイかペプシマンだとおもう)。今はようやく砦から脱出してSkyrimの大地に出たところで、何をすればいいのか全くわからなくて適当にうろついている。 ここまでの感想 なんか没入感がすごい ムービーシーンがプリレンダじゃなくてゲームとシームレスだから? ファーストパーソンビューなのも関係あるかも 映画みたい!とおもった これはDQやFFでは絶対得られない感覚 断頭台はけっこうキツい キャラメイクが面倒 何もわからないのでいいやつを用意して欲しい 話の続きが気になるので面倒なこと挟まないで欲しい 悩んで作ったけど自分の姿が全く見えなく
こんにちは、新米ディレクターのid:yashigani_wです。 この記事ははてなディレクターアドベントカレンダー2日目の記事です。昨日はid:moretのそろそろ5年生なので右も左もわからない新卒のころの自分にアドバイスする - el cineでした。 私は8月にアプリケーションエンジニアからディレクターになりました。 はてなではディレクター職には担当するサービスの成長に責任を持つプロダクトオーナーとしての役割と、担当するチームの成果を最大化するマネージャーとしての役割が求められます。 マネージャーというと、多くのエンジニアはあまりなりたがらないとおもいますが、それはマネージャーに求められる責任を具体的にイメージできないことや未知の仕事に対する不安からではないでしょうか? この記事は私の経験から、これからマネージャーになるエンジニアに向けてマネージャーがまず意識すべきことと、最初に陥るで
個人的に、ルールは少なければ少ないほどよいと考えていて、必要があるときにだけ最低限のルールを設定すべきだとおもう。 なぜなら、多くのルールには必ず抜け道があって、全てのパターンで上手くいくようにルールを作ったところでどうせ運用でカバーみたいな世界観になる。 そこで起きるのは配慮の強制だとおもっていて、ホスピタリティが高いみたいに片付けると美談っぽいけど、本質的には無視できることに躍起にならざるを得ない状況に陥るという印象がある。 加えて一度作ったルールを変えたりなくしたりするのは倍くらいのエネルギーが必要ということも忘れてはならない。 私のルールに対するスタンスはそんな感じなのだが、一方現実問題として同意できないルールに対しどう向き合うかというものがある。 これに対してとりうるアクションは、基本的にルールを変えるか自分を変えるかのふたつしか無いようにおもう。 であるが、私は性善説的な事なか
シン・ゴジラを二条のTOHOシネマズで観てきた。ゴジラについては他にも良いエントリーが多くあり、ネタバレはしたくないので何も言うまい(ちなみに良い感想エントリーを探すにははてなブックマークの検索機能が便利である。iOSアプリを入れている方はアイコンを押し込んでクイックアクションを起動すると良い)。最高の映画なのでとにかく観に行って欲しい。シン・ゴジラについてひとつ言うとすれば、庵野監督が褒められてるのが最高。日本の映画ってどうしても出演者が褒められがちだけど、そうじゃなくて監督が褒められてるのがとにかくいい。劇中でもそうだけど、とにかくぶっ壊してる感がある。 ゴジラの内容についてはなにも触れないことにしたが、4DXについては言いたいことがある。4DXというのは、簡単に言うとバックトゥーザフューチャー・ザ・ライドが映画館で楽しめるようなもので、映画に連動して座席が傾いたり、振動したり、水しぶ
たまにコードレビューのしかたを紹介するエントリーを目にすることがある。その中でも反響があるものは実際によくまとまっており、なるほどと感心することもよくある。しかし、中にはコーディングスタイルやイディオム、ちょっとしたテクニックを使うように目を光らせるように助言されているものがある。誤解を恐れずに書くと、それらのトピックは無視できるようなものばかりであり、そのような指摘ばかりつけるのはあまり褒められたものではないなと感じる。これは私自身にも言えることだが、瑣末ことを指摘しすぎてしまうあまり、本質的な議論が霞んでしまうことがままある。レビュイーにとって、指摘が学びになることは確かに存在するのだが、コードレビューの目的はあるべき実装を議論するものであり、老婆心からそれを繰り返すことは必ずしも良いレビューとは言えない。 では、本当に良いコードレビューとはなにか。それは、コーディングスタイルのような
挨拶がないことや挨拶もできないのかと怒る人がたまにいる。けど、そういう人に限って自分から挨拶しないという経験則があって、挨拶する側じゃなくて挨拶される側の理論だなと耳にするたびにおもう。唯一例外は学校の先生で、彼らは挨拶しろと怒鳴りつけて、実際に挨拶してる。これは信条の話だが、コミュニケーション不全の原因を相手に押しつけるべきではない。挨拶されないのはされない側にされないなりの理由があるわけで、怒るくらい気に入らないなら人を変える前に自分を変えるべき。平たく言うと、挨拶しない側にとって存在感が無い。挨拶されるために自分を変えるのはいかにもコスパが悪いと感じるかもしれないが、気になるあの子に声かけられるために自分を変える、と言いかえるとなんか尊い感じがする。そういう感じ。 挨拶されないことに怒るより、自分から挨拶したほうが生まれる不幸は少ない。とやかく怒らずに普通に挨拶をすればよい。それを踏
この記事ははてなデベロッパーアドベントカレンダー2015の16日目の記事です.昨日は id:motemen の エンジニア寿司を支える技術 - Hatena Developer Blog でした. こんにちは.id:yashigani_w です. はてなでは定期的に開発合宿があり,好きな開発言語を試したり,普段仕事では一緒にならないメンバーとサービス開発をすることができます. 今年の合宿で私が所属したチームでは,node.jsとtypescriptを使い,Webサービスを開発しました. 私は普段iOSアプリ開発を担当しているので,あまりサーバサイドの実装をすることはありませんし,JavaScriptもあまり得意ではないのですが,開発合宿の機会を使って新たな技術に挑戦してみました. 合宿を前に技術的に不安を抱えていた私は,あるチームメンバーに「事前になにを学んでおけばいいか」と訪ねたところ,
curl とかでとってきた xml を成形して Vim で開きたいみたいなときに成形結果をリダイレクトして Vim で開く,みたいにすると無駄にファイルを作らないといけないのでめんどうです 標準入力から直接 Vim に渡せないかなーと思って調べたらちょうどな - オプションがありました ls | vim -これで ls の出力を直接 Vim に渡せます 余談ですが,これを調べるためにググりましたが,普通にヘルプ見れば書いてました まずはヘルプを確認するようにしようと思いました usage: vim [arguments] [file ..] edit specified file(s) or: vim [arguments] - read text from stdin or: vim [arguments] -t tag edit file where tag is defined or
毎月恒例の関モバ #8に参加しました. kanmoba.connpass.com 今回は,UITableViewで複数のレイアウトを持つセルをどう扱うかというトークをしました. speakerdeck.com 骨子としては,UITableViewで複数のレイアウトを持つセルを実装するとき,いくつかの方法がありますがコードでレイアウトをいじるとAuto Layoutの指定が複雑になるので,レイアウトのパターンごとにxibを分けるといいというものです. 複数のxibを使うことについて少し補足 UITableViewにおいてxibを増やす場合,xibの登録やセルのリユースなどセルを使うための決め事が複雑になることが問題になります. セルを複数のView Controllerで使いまわしたい場合,それぞれで同じ実装をすることが強いられます. そこで,このトークでは実装パターンとしてEntryCel
たまにunwrapするけど,必要なのはその有無でそのままそれを棄てることがあります. こういうときです. if let a = some { print("some is .Some") } このままだとXcodeに,aを使ってないから_に変えろって怒られたりしてゲンナリ………オシャレ感ゼロです. そんなとき,パターンマッチを使うとちょっと小洒落たかんじになります. if case .Some = some { print("some is .Some") } 同様に,nilかどうかを確かめたいときもsome == nilよりパターンマッチを使うほうが小洒落てます. if case .None = some { print("some is .None") } 最近Swiftを始めた同僚がif caseなんてあるんですねって言ってたときに,「あんま使わねーな」とおもってたんですけど,それか
シンプルなCFNetworkラッパーを公開します 色々事情があって,CFNetworkのラッパーを書いて棄てたので公開します. CFNetworkとは Cocoa/Cocoa touchではNSURLConnectionっていうクラスがあって,基本的にはそれを使ってHTTPなどの通信をします. Foundationクラスはより低レイヤのCore Foundationのラッパーなので,NSURLConnectionも実体はCFNetworkになってます.つまり,CFNetworkを使えばオリジナルなNSURLConnectionを作れるということです. 当初はいい感じにまとめて,ARC対応のポストASIHTTPRequestのポジションを狙おうと思ってたんだけど,ちょっとヘビーすぎて諦めました.ASIHTTPRequestはマジでお化けプロダクトです.すごすぎる. どういうときに使うべきかっ
www.flickr.com 毎月おなじみの関西モバイルアプリ研究会で「Swiftで自然数を作るっ」という発表でライブコーディングをしました. kanmoba.connpass.com 書いたコードはgistで公開しています(少し長いので最後に埋め込んであります). 自然数についてはWikipediaの項目を参照してください. 自然数 - Wikipedia コードだけだとわかりにくいとおもうので少し解説を書きます. 解説コーナー 自然数のデータ構造を作る 例えば,自然数3は以下のように表現できます. suc(suc(suc(0))) 要は0からはじめて3回後に進んだ状態です. この構造をSwiftで表現すると, enum N { case Zero indirect case Succ(N) static func succ(n: N) -> N { return .Succ(n) }
この間の関西モバイルアプリ研究会#4でLazy stored propertyについて発表しました. speakerdeck.com Lazy stored propertyについて大まかな使いドコロと,テスタブルな設計をする際にこいつを使うと依存の注入に使いやすいのではないか,というアイディアについて話しました. 簡単にまとめると,Lazy stored propertyを使えば,初めてアクセスするときまでインスタンスの生成が遅延されるので,それまでにテストの準備ができるよねということです. lazy は最もすきなキーワードなのでめっちゃオススメです! 追記 Twitterで@starfruits_jさんと@matuyujiさんにimplicitly unwrapped optionalなpropertyをlazyにしたときにnilを代入することで再度初期化処理が走ることを教えていただき
関西モバイルアプリ研究会#2で「iOSアプリのコードレビューで最近気になるところ」という発表をしました. kanmoba.connpass.com コードレビューでよく指摘するようなことをまとめたのですが,まとめてみるとアプリを設計・実装するときに注意すべきこととほとんど変わらないような気がしました. けどコードレビューって言っておいたほうが意識高そうな感じがするのでコードレビューということにしています. speakerdeck.com スライドだけ見てもあんまりわかんないとおもったけど,ブクマ集まってるわりに特に質問とか無いので特に補足はしません. 代わりにコードレビューのコツっぽいのをつけておきます. コードレビューするときに最近ちょっと気にしてること ちょっと気にしていることを書いておきます. 筆者の経験に基づくポイントです. 1. 理由を聞く こうしてください!って指摘するよりは理
先週ですが,毎度開催されている,Cocoa勉強会 #61でお役立ちテクニックを紹介しました. スライドはこちらです. 今回はこれというネタが無くて連発みたいなネタに走ってしまった… 次はなんとかいいネタを用意します. おもしろかった発表を紹介 熊谷友宏さん「Swiftカジュアルプログラミング(基礎)不変値と可変値」 _ObjectiveCBridgeableを実装してみたという話がおもしろかったです. 例えば,StringとNSStringは暗黙で変換される(Swift 1.2からは少し制限が追加された)秘密とかに迫る感じで非常に興味深い内容でした. スライドも紹介したかったけど見つけられなかった. matuyuji さん「Visual Format Languageを簡単に書けるSwiftライブラリyavfl」 発表スライドを見るとわかるとおもうんですが,私はAutoLayoutがだいす
iOS向けのアプリケーションやライブラリで画像やローカライズファイルなどのリソースを使うとき,bundleという仕組みを利用します. bundleはアプリケーションやライブラリに組み込まれ,実行時に各リソースファイルとの橋渡しをします. 例えば,ローカライズに使うNSLocalizedStringマクロはこのように定義されています. #define NSLocalizedString(key, comment) \ [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil] [NSBundle mainBundle]は実行中のアプリケーションbundleを返します. tableが実際に使用されるローカライズファイルですが,nilだとデフォルトのLocalizable.stringsが利用されます. NSLo
Swiftでコーディングしていると,型について色々と考えることがあります. 型の捉え方は学術的にも色々あるとおもいますが,このスライドは自分の経験から自分なりの捉え方なので,間違っていることや補足などあれば教えて下さい. スライドの補足 例に出しているResult<T>ですが,Swiftコンパイラの仕様でこのままではコンパイルすることができません. このような型に包んで,Result<Box<T>>型にするか,@autoclosureで包むとコンパイルが可能になります. class Box<T> { let value: T init(_ value: T) { self.value = value } } 反省 最初に大きな声で挨拶したらなんか気持ちがアガってしまって,異様なテンションでプレゼンしてしまった. 完全に傾きすぎた… 反響を紹介します 次の発表「型」とかタイトルがカッコイイ。
photo by MDGovpics 技術面接を担当する機会があった. 今まで,面接されることはあってもする側になるのは初めて. 短い時間でよい成果を得るため,事前に色々と準備をしてから望むことにした. 最初に 面接といえば質問だ. 逆に言うと質問の集合が面接と言っても差し支えない. そこでなにを質問すべきか考えた. 採用面接の目的は一緒に働く仲間(を増やす|になる)ということだ. つまり,お互いに一緒に働きたいと感じるエンジニアなのかを判断できればパーフェクトコミュニケーションと言えるだろう. 事前準備 会話は3往復くらいさせると深く人となりがわかるらしい. なにも用意しないとそんなのは絶対無理なので,事前に質問を用意しておく. エンジニアの場合,応募資料はだいたい以下の2つがある. ブログやGitHubなどインターネットでの活動 職務経歴書 この2つからエンジニア像を作りつつ,質問した
Swiftのenumは便利ですが,たまには使い慣れたNS_OPTIONSスタイルのenumを作りたくなるときがあります. 素朴にやるとこのように実装できます. /// My Options enum Options: UInt { case None = 0 case A = (1 << 0) case B = (1 << 1) } しかし,これでは全ての組み合わせのパターンをcaseとして用意する必要がありますし,用意したところで常にrawValueでの比較が必要です. // My Options doesn't have it! let options: Options = Options(rawValue: .A.rawValue | .B.rawValue) こんなのはとてもじゃないけど使えません. UIViewAutoresizingの実装を見てみる UIKitにはNS_OPTI
2/7に開催されたHatena Engineer Seminar #4 @Tokyoで「はてなのiOSアプリとSwift」という発表をしてきました. 現在,はてなのiOSアプリ開発ではSwiftを標準的に採用しており,その経験を紹介した形です. 発表スライドはこちらから御覧ください. Swift with apps by Hatena // Speaker Deck 補足 例に使っているコードについて 例としてあげたSwiftのコード例は冗長なものですが,型推論できずコンパイルできなかったので意図に助長な実装にしています. 推論がキチンと働けばsortedに与えるclosureの引数は省略することができます. func latestHotentry(bookmarks bs: [Bookmark]) -> Bookmark? { // 仕様どおりに型推論されればこれでよい return b
Objective-Cだと今でもマクロを使うことはあります. (ReactiveCocoaなんかも依存していますね.) プロダクトコードで使うのはできたら避けたいマクロですが,ビルド設定によって動作を切り替えたいときとかには結構便利です. しかしながら,Swiftにはマクロは存在しないので,このような手段を使って代替します. Simple Macros いわゆる定数を定義するマクロです. Swiftで定数を定義したいときはletを使うべきです. #define FADE_ANIMATION_DURATION 0.35 このようなマクロによる定数の定義は, let FADE_ANIMATION_DURATION = 0.35 とletを使えば実現できます. マクロに比べ型チェックがされますので圧倒的にセキュアです. 筆者はこの他に定数を定義するのにcomputed propertyをよく利用
App Extensionを実装する際,本体のアプリとコードを共有したいことがあります. コード自体をExtensionのターゲットに追加することもできますが,メンテナンス性や複数のアプリで使い回すことを考慮すると,Embedded frameworkとして実装し,各々で取り込むのが理想的です. しかし,ここで注意する点があります. Extensionでは通常のアプリと違い,いくつかのAPIへのアクセスが禁止されています. 例えば,ExtensionからUIApplicationなどのAPIにアクセスすることができません. 不意にframeworkのコードでこれらのAPIを仕様すると想定の通り動きませんので注意が必要です. そこで,安全にframeworkを共有するためにAllow app extension API onlyというオプションが存在します. (TARGETS > Deplo
SwiftのOptionalにはmapがある. func map<U>(f: T -> U) -> U? 引数のfはT(Optionalで包まれいる値)を受け取ってUを返す関数を受け取って,fの返り値であるUをOptionalで包んだU?を返す関数です. 要は,if-letを使って明示的にunwrapしなくてもOptionalの構造を保ったまま中の値に関数を適用するための関数ということですね. このmapですが,Optionalな値を返す関数と使ってみると案外使いにくいことがわかります. let URL: NSURL? = NSURL(string: "http://yashigani.hatenablog.com") if let URLString = URL.map({ $0.absoluteString }) { // URLStringはString型を期待 println(UR
overrideする Objective-CではPropertyはただのアクセサメソッドの自動生成だったので,overrideするのはなにも考えなくてもいいって感じだったけど,Swiftでは微妙に違う. 例えばUIScrollViewのcontentInsetをいじって常に上部にマージンを設けたいときはこうする. class MyScrollView: UIScrollView { private let topMargin: CGFloat = 44 override var contentInset: UIEdgeInsets { get { return super.contentInset } set(newInset) { var inset = newInset inset.top = topMargin super.contentInset = inset } } } Pro
次のページ
このページを最初にブックマークしてみませんか?
『yashiganiの英傑になるまで死ねない日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く