ごまなつ Blog

楽しく働ける世界を目指して

サポーターズcolabオンライン登壇しました(キーボードの話)

9/17、サポーターズcolabにて、「あなたの知らないキーボードの世界」という名前でオンライン登壇してきました。

speakerdeck.com

登壇に関しての感想

オンライン登壇って話してる感じがしないですね。聴衆が見えないため、自分がしゃべっている内容が本当に届いているのか、話したい内容が届いているのか確認ができないので。

話している間もファシリテーターの方が隣にいたので、質問を投げてくれたり、相槌を打って下さったので話しやすかったです。1人ラジオも放送作家の方が隣にいるという話を聞いたことがあるので、まるでラジオだなと思いました。

今回はtwitter実況も用意されてましたが、あまり活発ではありませんでした。サポーターズcolabの勉強会に来て下さる方は初めての方や慣れていない方が多いため、こちらは仕方ないです。ぜひ、勉強会参加者の方は用意されたハッシュタグでリアルタイムにツイートしてください。主催者の方のモチベーションにつながりますし、何より登壇者の方が喜びます。反応があったほうが嬉しいですよね。

最近のキーボードの盛り上がりについて

最近、キーボードについて興味を持つ人が増えてきたと感じています。自作キーボードと、HHKB・REALFORCEが相互に盛り上がっているのではないかと感じています。自作キーボードの自分が作るという過程の楽しさ、カスタマイズの容易さと、製品版の買ってすぐ導入できること、こちらでしかないキースイッチ(静電容量無接点方式)があること、そしてどちらにも関係する値段・時間を含めたコストを鑑みてキーボードを選択するという過程が一般的になったため、どちらから興味を持っても両方を比較するようになったのではないかと考えます。

安いキーボードを使って何個も買い替えるのか、高いキーボードを使って長く使うのか、そもそもキーボードにこだわる必要があるのかという話もありますが、この問題は全ての製品に対して存在する問題なので、答えとしては「自分に合ったものを探して見つけ出そう」がいいと思います。それが製品で存在するなら買うし、無ければ自作する。それでいいと思います。

キーバインド設定をしよう!

キーバインド設定は、かなり便利なのでぜひ使ってみてください。自分が頻度高く行っている操作を早く正確にできるようになります。自分は、macbookを買ったら最初にかな/英数をトグル切替に変更しました(Windowsになれていると違和感しかない)。キーボードでマウス操作したり、遠いキーをキーの組み合わせで設定してホームポジションからほぼ手を動かさずに操作できるようにできます。

無限LT会 #3 【Endless Level Up】に参加してきました

oysters.connpass.com 参加してきました。

今回の形式

今回は、

  • 事前に自己紹介と1回目のLTスライドを用意
  • 自己紹介の際に自分の持ってきたLTのネタを示す。2回目、3回目に資料はその場で作るため、他の参加者の発表内容を見てLT内容を変更してもよい(前日からのスライド準備は禁止、その場で作る。内容は事前準備可)
  • LTが1巡したら、休憩とスライド作成時間を兼ねた黙々タイムがある

という形式でした。LTを聞きながら、内容に関してツイートしつつ自分のスライドを作る。大変ですね。ですが、これが楽しい部分です。自分の発表が終わった時に自分の発表に対しての反応ツイートがないと悲しいので、なるべくツイートするようにしています。作成のために使える時間、発表時間に合わせて、その状態にあった質のスライドを作成する能力をつけていきたいですね。

自分のLT

speakerdeck.com

キーボードの配列をいくつか紹介しました。それぞれ配列の思想が異なるので、自分が共感した配列を使ってほしいと主張しました。

speakerdeck.com

大学院の時に高校の情報科目の非常勤講師をしていたので、その時に感じたことを発表しました。人に教える難しさを実感しました。

3回目の発表は、1回目の発表の補足をしました。実際の配列図と配列評価の方法を紹介しました。資料はほとんどなく、Webページを使ったため、参考にさせていただいたサイトを紹介します。

配列沼へのお誘い: 大岡俊彦の作品置き場

キー配列頂上決戦!さいつよなレイアウトはどれだ! | 遊舎工房

感想

今回で3回目の参加となりました。今回は、会場はVOYAGE GROUPオフィスでおしゃれで(スタッフさん方もおしゃれしていた印象)、LT初心者の方が多く、前回前々回とは異なる雰囲気でした。内容も技術的な内容に寄った印象です。初心者の方も含めて、LTの話し方がうまい方が多かったです。英語でLTする方、元Fire FighterなのでFirebaseを勉強した方、個人開発、服装と筋肉の関係はエンジニアの外面と本当の技術力と同じなど、内容も面白く参加してよかったなと思いました。もう少し聴衆が興味を持てる発表をした方がいいなと思いつつ、趣味の内容を発表していきたいと思います。

技術的なこと以外で登壇できる勉強会は存在するのですが、あまり知られていないのではないかと思いました。この無限LTもそうですが、エンジニアの登壇を応援する会の自由研究LTも技術的なこと以外で登壇できます。技術的な登壇へのハードルは、技術の内容に関してはもちろん、登壇(多くの人の前で自分で作った資料で発表すること)に心理的なハードルが存在します。技術的な内容以外で登壇できれば、心理的なハードルは下がるため、このような会が増えて、いろいろな人が登壇に積極的になり、いずれは自分が身に着けた技術について登壇していけるようになったらいいなと思います。

「転職透明化らぼ x kiitok - スタートアップ企業の見分け方編 」に参加した

rtlabo.connpass.com

イベント内容の説明は割愛。LTとパネルディスカッションの内容をまとめてレポートします。

CAMPFIRE 久津さん スタートアップ転職後の『想定通り』と『ギャップ』

  • 自分の影響力を感じなかったので転職を決意
  • 新規事業を希望、そこに配属されたが選考時に聞いたプロダクト状況と異なった。出てきた面接官がプロダクトや開発組織を正確に把握しているとは限らない。
  • カルチャーに関する質問はどちらも抽象的な会話になる
  • イケてるベンチャーという先入観がバイアスをかけていた。あいまいな情報を都合よく補完してしまう
  • 面接官をリクエストしたり、遠慮なく細かい質問をする。
  • 理解する姿勢はいいが、○○ができないけど問題ないかの連発は良くない。

Repro 三木さん スタートアップは見極められたくない

  • スタートアップに入る心構え
  • いろいろリスクがあるが、大きなリターンがある可能性がある。
  • 会社はどうか(市場規模、成長率、資本戦略)
  • 自分はどうか(MA時の株の取り扱い、キャピタルゲインの取り扱いをよく確認。成功するまで自分はコミットできるか、会社より成長速度が遅くならないか)
  • 裁量は本当にあるのか、挑戦が許容されるか、自分より上の思想があるか。
  • 自分が耐えられる報酬はどのくらいか。福利厚生は無いけど作れる。合理的な提案は通るか?
  • やることが変わる可能性がある。一番大事なのは、一緒にやる人の人間性(と能力)

株式会社プレイド 池上さん スタートアップ企業との面談でするべき3つの質問

  • スタートアップは、自分と似た考えの人がいて、本質的な議論ができる。が、文化になじめないとつらい。雰囲気や事業の進めやすさが小数人の個人に依存。成長が止まると歪みが出る。
  • 面接で自然に出ないトピックを引き出す。面接官自身のビジョンや考え、メンバーのスキル、組織や事業の弱み
  • 内容に共感できるか、ミッションと接続されているか
  • すごい人が複数いるか、納得感があるか
  • 弱点がクリティカルで、自分がその解決に貢献できるか

株式会社スタディスト 北野さん スタディスト開発チームが面接で大事にしている3つのこと

  • 公平で、楽しく、分かりあえる
  • お互いに選びあう立場。お互いを尊重、面接官の希望を聞く
  • 楽しく面接をする。その心は、業務に近い状態で面接をしたいから。言いたいことを言い合えるようにしたい
  • 質問には正直に答える。チームによって面接方法が異なる
  • 素敵な企業は素敵な面接をしている

LAPLAS株式会社 両角さん Techブログ分析で見えた今転職するべきスタートアップ企業

  • いい企業は良いテックブログを書くという仮説からの分析(内容はオフレコ)
  • 自分の分析にはぜひLAPLASを使ってください!

パネルディスカッション

  • 良い質問は?
    呼び水になる質問。技術の話からビジネスの話につなぐなど。

  • 人間性ってわかる?
    人間性相対評価。同じ質問をして、その答えを掘ると人間性が分かる

  • カルチャーってわかる?
    正直、入ってみないとわからないことのほうが多い(社内での共通認識など)。フォローしてくれないならそういうカルチャー。コミュニケーションの方法がカルチャーを表す。

  • 怖いスタートアップは?
    採用を止めている、失敗のリカバリができていないところ。

  • なじんだと思うとき
    自分の役割ができたとき、貢献できたと感じたとき。能力がマッチしていない、パフォーマンスが出ていないとつらい。

感想

スタートアップの一般論と、登壇者の方の経験論がどちらも聞けたのが良かったと思います。ずっとスタートアップの方、転職を複数回されている方でお話しされていたので、スタートアップに入る側も受け入れる側もお互いの考えていることを知れたのではないかと思います。懇親会は、皆さん会話が弾んでいました。Connpassのアイコンとユーザ名の名札は、アイコンで知っている方に話しかけやすいので効果が高いと思います。次回の内容が楽しみですし、また参加したいと思います。

A Swift Tourをやったメモ

少しスマホアプリに興味が出てきたので、Swiftを触ってみようと思いました。とりあえず最初にA Swift Tourをやってみたのでその感想です。

A Swift Tourで何が学べる?

Swiftの基本文法が分かります。サイトからダウンロードできるPraygroundで実行結果を確認しながら学ぶことができます。

軽くまとめ

動的型付け。変数宣言は var a=42; 定数は let a=42; 型を指定したいときは let a: Double=70; と後ろに型を明示する。

キャストは String(a) 。型を前に書いてキャストしたい変数を()で囲む。

文字内変数展開は "I have (apples) apple."。()で展開したい変数を囲む。文字列を”””(ダブルクォート3つで囲むことでも宣言できる。

配列を var shoppingList = ["catfish", "water","tulips"]で宣言できる。動きはリスト。辞書は

var occupations = [
    "Malcolm" : "Captain" ,
    "Kaylee" : "Mechanic" ,
]

空を作りたいなら let emptyArray=String let , emptyDictionary=[String:float]

型情報が推測できるならshoppingList = []  occupations = [:]

for文はlet individualScores = [ 75 , 43 , 103 , 87 , 12 ] for score in individualScores {}という形。これ、foreach文だよね・・・。

if文はよくある形。nilを許すとvar optionalString : String ? = "Hello"という形にする。nilを使った二項演算子は( nickName ?? fullName )

swiich文もある。switch vegetable{} ()はいらない。

複数の辞書に対するfor文はfor ( kind , numbers ) in interestingNumbers {}

while文もある。()はいらない。do-whileではなくrepeat-while。

for i in 0 ..< 4 {}と、..<を使えばインデックスの範囲を作成できる。

関数の宣言と呼び出し方は

func greet(person : Stirng, day : String)->String{ 
   return "Hello  \ ( person ) , today is  \ ( day ) ."
}
 greet ( person : "Bob" , day : "Tuesday" )

関数の宣言に変数名と型名が必要かつ、呼び出しにも必要。返り値の方は関数宣言の最後に->を伴って書く。

タプルがあり、タプルを関数で使うときは

func calculateStatistics ( scores : [ Int ]) -> ( min : Int , max : Int , sum : Int ) {
    return ( min , max , sum )
}
 let statistics = calculateStatistics ( scores : [ 5 , 3 , 100 , 3 , 9 ])
 print ( statistics . sum )

関数をネストできる。

 func returnFifteen () -> Int {
    var y = 10
    func add () {
        y += 5
    }
    add ()
    return y
}
 returnFifteen ()

関数は型なので、関数を返り値、引数に用いることができる。

map関数がある。

numbers . map ({ ( number : Int ) -> Int in
    let result = 3 * number
    return result
})

let mappedNumbers = numbers . map ({ number in 3 * number })
 print ( mappedNumbers )

 let sortedNumbers = numbers . sorted { $0 > $1 }
 print ( sortedNumbers )

クラスがある。

class NamedShape {
    var numberOfSides : Int = 0
    var name : String

    init ( name : String ) {
        self . name = name
    }

    func simpleDescription () -> String {
        return "A shape with  \ ( numberOfSides )  sides."
    }
}

initは、インスタンスの作成時に呼ばれる関数。 サブクラスの例は

class Square : NamedShape {
    var sideLength : Double

    init ( sideLength : Double , name : String ) {
        self . sideLength = sideLength
        super . init ( name : name )
        numberOfSides = 4
    }

    func area () -> Double {
        return sideLength * sideLength
    }

    override func simpleDescription () -> String {
        return "A square with sides of length  \ ( sideLength ) ."
    }
}
 let test = Square ( sideLength : 5.2 , name : "my test square" )
 test . area ()
 test . simpleDescription ()

getterとsetterを含むこともできる。

列挙体enum、構造体structもある。メソッドを関連付けられる。

protocol(いまいちわからなかった。クラスのようなもの?)

例外処理は、try-catchではなくdo-catch。

let printerSuccess = try ? send ( job : 1884 , toPrinter : "Mergenthaler" )
let printerFailure = try ? send ( job : 1885 , toPrinter : "Never Has Toner" )

という方法も。二項演算子と理解。

defer{ 何かの処理 }を関数内に書いておくと、どこに書いていてもその関数の最後に実行され、エラーをthrowしても実行される。

ジェネリックもある。

 func makeArray < Item >( repeating item : Item , numberOfTimes : Int ) -> [ Item ] {
    var result = [ Item ]()
    for _ in 0 ..< numberOfTimes {
        result . append ( item )
    }
    return result
}
 makeArray ( repeating : "knock" , numberOfTimes : 4 )

次にやること

FoodTrackerというiOSアプリ作成チュートリアルがあるので、それをやろうと思います。

【C#】WritePrivateProfileStringでハマった

WritePrivateProfileStringは、Windowsapi関数でiniファイルを扱う関数の一つです。他には、

  • GetPrivateProfileInt (iniファイルから数値を読みとる)
  • WritePrivateProfileString (iniファイルに文字列を書き込む)
  • GetPrivateProfileSectionNames (iniファイル中のすべてのセクション名を列挙する)
  • GetPrivateProfileSection (iniファイル中の指定されたセクション中のすべてキーと値のペアを列挙する)

といったものがあります。

iniファイルの形式

iniファイルの形式は、以下のようになります。

[section1]
key1 = hoge
key2 = huga
[section2]
length = 3
max = 255

つまり、

[セクション名]
データ1=値1
データ2=値2

といったセクションを並べていくファイル形式です。このファイルに対して、最初に述べた関数を用いることで、セクション名や、任意のセクションのデータを取得・書き込みができます。

陥った状況

WritePrivateProfileStringは、書き込みしようとしたデータのセクションとデータ名があった場合は上書き、無い場合は新規に書くというものです。しかし、

[section1]
key1 = hoge
key2 = huga
[section2]
length = 3
max = 255

に対してsection1のkey1をhogehogeに上書きしようとすると、

[section1]
value1 = hoge
value2 = huga
[section2]
length = 3
max = 255
[section1]
value1 = hogehoge

というように一番上のセクションが認識されないという状況になりました。

そもそも使用を推奨されていなかった

この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されています。つまり、使用は推奨されておらず、メンテナンスも行われていません。調べてたどり着くページも古いものばかりでした。

json形式に変更

json形式に変更することにしました。C#ではjsonのシリアライザとデシリアライザが用意されているのでうまく扱えます。

使っている関数が現在のバージョンでサポートされているか、調べることが重要だと感じました。

エンジニアのためのコーチング体験型勉強会Vol.1に参加してきました

7/25に開催された、エンジニアのためのコーチング体験型勉強会Vol.1に参加してきました。 coaching.connpass.com

今回の趣旨

1on1は必要だといわれていますが、受ける側が必要だと感じていないことがあります。なぜこうなってしまうのでしょうか。それは、1on1は目標を達成するための手段であって、することだけに意味があるわけではないからです。また、1on1は技術なので、技術が足りていないのかもしれません。学べば良い1on1をすることができます。しかし、

1on1の技術を学ぶ場がありません。

業務で行うなら、失敗をすると後が大変です。失敗が許されません。今回は、実験の場だと全員が認識したうえで実践するので失敗しても問題ありません。そのトレーニングとしてこの勉強会を開催した、とのことです。

やったこと

  • チェックイン
  • ルール説明
  • 実践
  • 振り返り

チェックイン

最初のチェックインでは、3人一組でグループ分けを行い、自己紹介と今の自分の気持ちと状態を話しました。気持ちと状態は抽象的なので、各人によって話すことが異なり良い質問だと思いました。緊張がほぐれました。

ルール説明

ルール説明と、コーチングで意識することを知りました。 グランドルールは

  • ここは実験の場。失敗する場
  • 守秘義務(あとでこんな人がいた、と言わない)
  • 正しい人、間違っている人はいない

このルールを守ることで、安心して自分の考えたことを試せる環境を作ることができたと思います。最初は、失敗します。ですがだんだんできるようになっていきます。しかし、最初の失敗できる場がないです。今回の場は、失敗できる場でした。

目指すことは、コーチングで動きをもたらすことでした。何で動きをもたらすかというと、問いで動きをもたらします。そして、相手が内面から動き出すようにします。

コーチングのために鍛えることは

  • 好奇心
  • 拡大質問
  • 認知(「あなたは~な人なんですね」など)

コーチは好奇心を持って拡大質問し、クライアント自身の探求の様を傾聴します。 はい・いいえで答えられない開かれた質問、相手が持っている・秘めているものを知る質問を勇気をもって無邪気に質問します。 認知は、自分の直感を信じます。相手の鏡になり、相手の本来ある姿・特性やあり方・深いところを伝えます。当てにいかなくていいです。

承認と認知は異なります。承認は正当かどうかの価値判断が入ります。認知は認めるのみです。

コーチングは、自分にも使えます。

”People are naturally creative, resourceful, and whole.” 人はもともと才知に溢れ、欠けるところのない存在である。 NCRWともいわれます。

実践

3人一組で、コーチ、クライアント、オブザーバーを1回ずつ担当しました。コーチングを実践した後、コーチからひと言、クライアントからひと言、オブザーバーからひと言でした。チェックシートは、

  • 好奇心
  • 拡大質問
  • 認知
  • 良かった点
  • より良くなるとしたらどのような点か

全体での振り返り

  • 認知で、あなたは~な人なんですね、と言われるといい表情になる。自分が気づけていないことに気づくため
  • オブザーバーがいることがとても良かった。コーチとクライアントだけの振り返りでは気づけない点、例えばコーチングをしている中で気づかなかった表情の変化や、質問の有効性などをオブザーバーが教えてくれた

感想

実際にコーチングをやってみる機会はなかなかないので、このような機会が貴重な経験になりました。年上の方にコーチングしましたからね......。自分がコーチングで心がけたことは、

  • なるべく話を遮らない。考えるそぶりや口の動きを見て、動いたら待って話を聞く。動かなければ質問。
  • 相手が話していることをすべて理解しようとしなくてもいい。相手は自分で考えて話している

ということです。会社内で1on1を行うと決まった最初の関係構築段階では雑談で、趣味などについて傾聴して、ある程度関係ができたら仕事や自身の成長のための方策を気づかせるというのが何となくイメージできました。雑談では、質問を行って考えていることや実行していることを聞きます。相手が話してくれます。方策を考える方では、自分自身で答えを見つけることが重要なので、難しいけれど相手がじっくり考えている間待つことを心がけていきたいと思います。

次回があればぜひ参加したいです。普段行っている人は手法を業務で生かすために、行っていない人はコーチングが良いものだと気づく良い経験になると思います。私は後者ですが、良い経験になりました。

コーチングが必要ない、という人について

私の考えでは、自分で課題を設定できている人や上司と話すことに抵抗感がある人が必要ないといっているのではないかと考えています。また、頻度が高すぎて、話すことがないという声も聞いたことがあります。しっかりとしたコーチングをやり、たまに雑談があるというのが良いのではないかと思います。メンバーが求めたときが一番いいと思いますが、メンバーは言い出しにくいことがあるので定期的な実施が現実的ですかね。

無限LT会 #2 【まだLT事前に作ってんの!?】に参加してきました

oysters.connpass.com 参加してきました。

他人のLTを聞きながら自分のLTを作る

他人のLTを聞きながら自分のLTを作る、事前にLTスライドを準備しない、こんなことが許される会があるのでしょうか?あります。それが無限LTです。

自分のLT

speakerdeck.com 音ゲーマーのやっていることはPDCAだと言いたかった。それだけ。

speakerdeck.com ら抜き言葉について考えていることを言いました。サ変では「られる」にならないので、そもそも「ら」が入っていることがイレギュラーという主張もあります。

speakerdeck.com 運動しようと思って周りを走って膝を壊す人をよく聞くので、陸上競技経験者として長距離を走る時の注意点をいくつか挙げました。

個人的お気に入りLT

speakerdeck.com

面白Tシャツ、自分も着てみようかなという気持ちにさせてくれました。Tシャツは簡単に印刷できるようなので、面白いものを思いついたら自分で印刷を頼むのもいいかもしれないですね。

今回の形式

今回は、

  • 事前に自己紹介と1回目のLTスライドを用意
  • 自己紹介の際に自分の持ってきたLTのネタを示して、投票して多かったものを2回目、3回目で発表(前日からのスライド準備は禁止、その場で作る。内容は事前準備可)
  • LTが1巡したら、休憩とスライド作成時間を兼ねた黙々タイムがある

という形式でした。LTを聞きながら、内容に関してツイートしつつ自分のスライドを作る。大変ですね。ですが、これが楽しい部分です。作成のために使える時間、発表時間に合わせて、その状態にあった質のスライドを作成する能力をつけていきたいですね。

感想

エンジニアが集まっているため実用的な内容が評価高いですが、テーマが限定されていないLT会ですので私は趣味の話をしていきたいです。ずっと実用的な話だと疲れますし、聞き流してもよい内容だと休憩になると考えています。実用的な話から趣味、ネタ、興味深い内容、面白い話まで、いろいろな話が聞ける会であってほしいなと考えています。