dotrikunの日記

日々マンガを読んだりプログラムを書いたりしています。

A friend in need is a friend indeed.

タイトなスケジュール、それなりの開発規模、タスクの同時並行がかなり多い、

そういった追い込まれた環境だと人間の底力みたいなものが輝いて見える時がある。

頭の回転キレッキレなタイプじゃなかったり、普段はそんなに評価されてない人でも

  • 取り乱さない
  • 追い込まれた中でも力を発揮できる
  • 自分にできることはないか模索する

といった意志、行動力が物事を前に進める馬力を発生させてくれて、

「ああ、この人は本当に信頼できる人だな」と思える。

無論プロジェクトがそんな状態に陥らないのが一番であることは言うまでもないし、

そんな状態を作り出したり、状況をさらに悪化させるような人物を信用してはいけないということだけは確信できる。

シビアなプロジェクトは信頼すべき人を教えてくれる機会でもあるわけですな。

「Swift の良いところってどんなところだと思いますか?」

仕事で iOSアプリ開発者の面接を担当しています。

一昔前に比べてiOSアプリ開発の裾野が広がったのか、 応募も増えてSwiftに触ったことがない人の方が少ないぐらいです。

面接の場で必ず聞くようにしているのが

「Swift の良いところってどんなところだと思いますか?」

という質問です。

みたいことや、納得感やユニークさがある回答とかなんでもOKなんですが、意外に説明できる人が少ないです。

(良いプログラマが弊社を受けに来ていないという可能性もおおいにありますが…)

効率厨と心理的安全性

心理的安全性というワードに時節に遅れた上に踊らされている方を見かけたのでちょっと考えた。

心理的安全性を担保して意見吸い上げまくって、 それをもとにアクション起こして効率良くして成果に繋げるのがやりたいことであって、 成果を求める集団において心理的安全性だけあってもしゃーないですわ、ってばっちゃが言ってた

あと心理的安全性が担保されてても「こいつに言っても無駄やな」と思ったら相談とかしませんし。

相談を受けて口先でうまく丸め込んだつもりでいると、相手も上辺だけ納得した顔をしてフィードバックの源泉を失っていくんじゃないでしょうか。

まとめると

  • 効率のための和気あいあいであって、その逆ではない
  • 改善の実行力が伴ってはじめて相談相手として成立する
  • Googleの人が言ってることを鵜呑みにしない

かな!

UITableViewCellに付け外し可能なチェックマークを置く時の話

この記事はSansan Advent Calendar 2016の16日目のやつです。

仕事でiOS8のサポートがまだまだ切れなくてUIStackViewを使えないから、UITableViewCellの小ネタでもどうぞ。

概要

AutoLayout対応してるUITableViewCellに、 UITableViewCellAccessoryTypeで付け外しするチェックマークを実現して失敗したお話。

UITableViewCellにチェックマーク置きたい

リストセルの選択状態を表現するために、セルの右端にチェックマークを出したい時があります。

f:id:dotrikun:20161214182702p:plain

UITableViewCellにはaccessoryTypeという気の利いたプロパティが用意されていて、 定義されたEnumを指定するだけでいい感じのチェックマークを表示することができます。

typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) {
    UITableViewCellAccessoryNone,                                                      // don't show any accessory view
    UITableViewCellAccessoryDisclosureIndicator,                                       // regular chevron. doesn't track
    UITableViewCellAccessoryDetailDisclosureButton __TVOS_PROHIBITED,                 // info button w/ chevron. tracks
    UITableViewCellAccessoryCheckmark,                                                 // checkmark. doesn't track
    UITableViewCellAccessoryDetailButton NS_ENUM_AVAILABLE_IOS(7_0)  __TVOS_PROHIBITED // info button. tracks
};

なにが起こったか

先に書いたやり方でチェックマークの表示/非表示を切り換えを実装すると、セルの横幅に合わせたラベルが伸び縮みしてキモい。

f:id:dotrikun:20161214182500g:plain

なんでこうなるかというと、accessoryTypeに UITableViewCellAccessoryNone 以外を指定するとContentViewの横幅が自動的に狭まるから。 LabelはAutoLayoutでContentViewの右端からマージン取ってるので、ContentViewの幅が変わるとみょんみょんしてしまう。

結論

付け外し可能なチェックマークを実装したい場合、 accessoryType は使わずにUITableViewCellのContentViewに自前でチェックマーク画像のimageViewを置いてレイアウトを組みましょう!ということです。

(みょんみょんするのを気にしない場合はその限りではない)

SwiftのテストクラスでObjective-Cのプライベートメソッドをテストする

この記事は Sansan Advent Calendar 2015の20日目です。

こんにちは。

2015年が終わろうとしている現在もObjective-Cで消耗している者です。

ちなみに2016年も絶賛消耗する見込みです。

地獄の業火に焼かれながら、それでもSwiftに憧れる

本当はSwiftiOSアプリ開発したい!

でもプロダクトコードに入れるにはちょっと(///

という訳でまずはユニットテストだけSwiftで書くことになりました。

ユニットテストだけSwiftで書く場合

普通にSwiftでテストクラスを追加し、

テストしたいObjective-CのクラスをBridging-HeaderでimportすればOKです。

以下はHogeObjcClassというObjective-CのクラスのisValidメソッドをテストしたい場合の例です。

/*
     Bridging-Header
*/

#import "HogeObjcClass.h"
/*
     Swiftで書いたテストクラス
*/

import XCTest

class HogeObjcClassTests:XCTestCase {
    
    func testObjcMethod(){
        XCTAssertTrue(HogeObjcClass.isValid())
    }
}

プライベードメソッドをテストしたい場合

で、ちょっとめんどくさいのがテストしたいメソッドObjective-Cのクラスでプライベートな場合です。

そんな場合はHogeObjcClassのカテゴリを作成し、

/*
     プライベートメソッドテスト用のカテゴリ
*/
#import "HogeObjcClass.h"

@interface HogeObjcClass (PrivateTest)

+ (BOOL)privateMethod;

@end

さらにBridging-Headerで作ったカテゴリをimportします。

/*
     Bridging-Header
*/

#import "HogeObjcClass.h"
#import "HogeObjcClass+PrivateTest.h"

こうしてあげるとSwiftのテストクラスでObjective-Cのプライベートメソッドが使えるようになります。

/*
     Swiftで書いたテストクラス
*/

import XCTest

class HogeObjcClassTests:XCTestCase {
    
    func testObjcMethod(){
        // プライベートメソッドが使える
        XCTAssertTrue(HogeObjcClass.privateMethod())
    }
}

新しくプロジェクト作る場合はおとなしくSwiftで書きましょうということで、、、

Sansan株式会社に入社しました

2015年11月20日付でアシアル株式会社を退職し、11月24日にSansan株式会社に入社していました。

Sansan株式会社では「名刺管理Sansan」iOSアプリ開発を担当します。

Sansan株式会社に入社した理由

前提としてベンチャー企業に限定していました。 時代を動かそうとしている流れの中心に行きたいという思いがあって、 その中でも明確なビジョンとビジネス戦略を持ち、技術に対する考え方が共感できたことがSansan株式会社に入社した理由です。

技術に対する考え方

これまで仕事でいろいろなタイプのエンジニアと出会いました。 技術を表現の手段と捉えていたり、学術的な興味から技術をとことん探求する人など様々です。

自分にとっての技術とは「問題を解決する手段の一つ」です。

最も現実的な手段の選択としてのシステム/アプリケーションを開発する者でありたい、 そういった価値観を持つ人々と価値創造に取り組みたかったという感じです。

入社して嬉しかったこと

最新のMacBookProが用意されていた

入社前には希望するキーボード配列しか聞かれなかったのでちょっと不安だったのですが、 15インチMacBook Pro Retinaディスプレイモデルの搭載メモリを16GBにアップグレードしたバージョンが用意されていました。

メモリ8GBでXcode動かすとかかなり厳しいので、入社した時点で「この会社は分かってる!」と安堵しました。

ソースコード管理がGithub

開発するソースコードGithubのプライベートリポジトリで行われており、 コードレビューなどもPullRequestベースなので違和感なく開発サイクルに合流することができました。

エンジニア向けの福利厚生が充実している

技術書籍だけじゃなく個人のモバイル端末の購入補助があると知って驚きました。

確かにモバイルアプリの開発者は最新の端末を普段から使って新機能を知らないといけないので、 モバイルアプリ開発をやっている会社は同じような制度を設けてほしいですね。

毎週木曜日は技術顧問の方にいろんなことを教わることができるのも大きいです。

エンジニアのモチベーションが高い

当然初期に作られた部分の技術負債などはあるわけですが、 それに対するエンジニア陣の「絶対直してやる」という決意、エネルギーがすごいです。 エンジニアは周囲からすごく期待されるポジションなので、仕事に燃えたいタイプの方は非常に合うと思います。

今後

勉強会など通じてどんどん発信していきますのでよろしくです。

ヨークシンで再会した時にレオリオが念を覚えていた理由

10年以上経って今更だけど気づいたから書いとく。

 

ハンターハンターのコミックス8巻P142で

ヨークシンシティにてゴンとキルアに再開したレオリオが「念を覚えた」という主旨の発言をしています。

f:id:dotrikun:20121218142348p:plain

これ10年ぐらい普通にスルーしてたんですが

おそらく作中で才能的に最高クラスであるゴン・キルア(1000万人に1人の才能)ですら師匠に無理やりこじ開けてもらって覚えた念を、同時期にハンター試験でもあまり評価されてなかったレオリオがなんの修行もせず自然に覚えるのはおかしいですよね。

 

念の覚え方として

  1. 瞑想や座禅などで自分のオーラを感じてうんぬん
  2. 念を込めた攻撃(もしくはそれに準ずる念の衝撃)を受ける

というルールがある。

 

レオリオとゴン・キルアで異なるのはハンター試験中(コミックス2巻P22)で念使いであるヒソカに思いっきり殴られている点。

f:id:dotrikun:20121218142635p:plain

この戦闘時のヒソカのずば抜けた身体能力は、おそらくはオーラを纏(もしくは錬)の状態にしていたためでオーラによる肉体強化がされていたと考えられる。 ※念使えるのに戦闘時にわざわざ絶状態にしてるのは不自然だし

 そして念を纏った状態の顔面パンチをクリティカルされたレオリオは念の覚え方の2番目の条件を満たして念能力が開花した、というのがぼくの推察です。

 

ただこれだと「使えるようになってた」が正しくて、レオリオ本人の「覚えたぜ」という能動的な発言はちょっと食い違ってるかと思いきや、

本人はヒソカに殴られたこと覚えてない設定なんだよね!

f:id:dotrikun:20121218151517p:plain

なのでレオリオ本人としては「なんかよく分かんないけど気づいたらオーラが見えるようになってたから自分で念覚えたっぽい」という理解なんでしょう。哀れ。

完全に殴られ損だけど殴られたことを覚えてなくてヒソカとの因縁(ほぼ良いことない)が構築されないあたりがこの人の幸運値の高さを示してますねぇ。幸運度は作中随一な感じだし。

 

まじで今更な上にどうでもいいね。

 

コミックス派なので32巻早く読みたいです(^q^)

HUNTER X HUNTER31 (ジャンプコミックス)

HUNTER X HUNTER31 (ジャンプコミックス)

HUNTER X HUNTER32 (ジャンプコミックス)

HUNTER X HUNTER32 (ジャンプコミックス)