タグ

ブックマーク / cockscomb.hatenablog.com (28)

  • SwiftにおけるTyped throwsの現在 - cockscomblog?

    現在Swift Evolutionで議論されているSE-0413 Typed throwsについて、Swift歴史を辿りながら紹介します。 この記事ははてなエンジニア Advent Calendar 2023の9日目の記事です。昨日は id:kouki_dan のiPadだけでアプリを作ってみるでした。ファスティング中の id:kouki_dan を関モバに誘ったのは私です。お誕生日おめでとうございました。 Swiftのエラーハンドリング Swiftのエラーハンドリングでは、2015年6月のSwift 2.0のリリース以来、エラーに型がつかない。Errorプロトコルに準拠したなんらかの型が投げられるということだけ決まっていて、それが実際にどうであるかを確認するのは(あるいは確認しないのは)、呼び出し側に任されている。do文のcatch句にはパターンが書けるので、必要に応じてハンドリングで

    SwiftにおけるTyped throwsの現在 - cockscomblog?
    koogawa
    koogawa 2024/04/27
  • ソフトウェアエンジニアとしての最初の10年 - cockscomblog?

    働き始めてから丸10年経った。 2012年、僕は北海道に住む大学院生で、趣味としてプログラミングを楽しんでいた。Appleのファンだから、macOSやiOSのアプリケーションを開発して、ちょっとでもAppleに近づいたような気持ちになっていた。その夏1ヶ月のインターンシップに参加した。インターンシップで、それまで趣味だったプログラミングが突然違った価値を持ち始めて、これを仕事にしないといけないと思うようになった。それで、両親や先生に謝って、大学院を退学して、インターン先の会社に正社員として入社した。それが2012年11月のことで、それから10年間、株式会社はてなで働いている。 この業界では、10年同じ会社で働いているというと、ちょっと珍しい部類なのかなと思う。とはいえ社内ではそれほど珍しくもなくて、あまり気にならない。いろいろなプロダクトを夢中になって開発していたら、いつの間にか10年経っ

    ソフトウェアエンジニアとしての最初の10年 - cockscomblog?
    koogawa
    koogawa 2022/11/01
  • 東京に引っ越しました - cockscomblog?

    はてなのインターンシップに参加した2012年の夏から、10年弱、京都で暮らした。その間に結婚もしたし、二人の子供にも恵まれた。京都では2Kの賃貸住宅に住んでいて、ひどく手狭だった。上の子は来年度から小学生になる。その前に引っ越しておきたい。 勤務先の株式会社はてなは、フレキシブルワークスタイル制度というので、だいたい全国どこに住んでもよくなった。オフィスに出社することも稀なので、通勤時間を気にする必要もほとんどない。ということで、京都にこだわらず、どこにでも引っ越せる。 いろいろ合理的に考えると、東京近郊がいいということになった。そもそも僕は北海道出身、は静岡出身であるから、帰省などに都合がいいのは関東だ。家賃が高くなるのを心配したけど、地域によっては京都の街中より安いくらいだった。 ということで、先月末に引っ越してきた。 部屋が広くなったおかげで、以前は部屋の狭さから我慢していたいろい

    東京に引っ越しました - cockscomblog?
    koogawa
    koogawa 2022/07/15
    どこに住んだっていいじゃない👏
  • SwiftUIのDynamicPropertyを試す - cockscomblog?

    SwiftUIにはDynamicPropertyというprotocolがある。 これを使ってみようという趣旨の記事を見かけた。 ので、私も試してみました。 @Now import Combine import SwiftUI class Clock: ObservableObject { @Published private(set) var date: Date = Date() init() { Timer.publish(every: 1, on: .main, in: .default) .autoconnect() .assign(to: &$date) } } @propertyWrapper struct Now: DynamicProperty { @StateObject private var clock = Clock() var wrappedValue: Date

    SwiftUIのDynamicPropertyを試す - cockscomblog?
    koogawa
    koogawa 2021/05/07
  • ちょっとスクリプトを書くくらいの気持ちで作るSwiftUIアプリ - cockscomblog?

    12年前くらいからiOS向けのアプリを作ってきた。最初は学生の個人開発、途中から仕事、そして最近は(仕事ではあまりやらなくなったので)趣味的にやっている。UIKitで、はじめの頃はUITableViewが難関だった。毎年のアップデートUIKitはどんどん拡充されて、Objective-CはMRCからARCへ、そしてSwiftも出た。 毎年の変化を差分で学んできて、振り返ってみると、当初のそれからは大きく変わっていて、便利なんだけど、とにかく膨大だ。 SwiftUIの登場 というところで、2019年にSwiftUIが出た。SwiftUIを使うと、宣言的にユーザーインターフェースを構築できる。UIKitでできること全てをSwiftUIで実現できるわけではないが、それでも2020年のアップデートでかなりカバー範囲が拡がった。 それで、SwiftUIでちょっと何か作ったりしている。例えばメニュー

    ちょっとスクリプトを書くくらいの気持ちで作るSwiftUIアプリ - cockscomblog?
    koogawa
    koogawa 2021/02/19
    ポチりました
  • 子供にアプリを作る - cockscomblog?

    3歳の息子にiPad Proを与えている。2018年の11インチのiPad Proで、僕のお下がりだ。Apple Pencilも与えてあるが、こちらは1歳になったばかりの娘が狙っているため、恐れた息子はApple Pencilをなるべく片付けておく。 自由に使っていい iPad Proを与えたからといって、3歳の息子がそれで何か大層なことをするということはない。退屈なときにYouTube Kidsで何かを見ていることが多い。ときどきGarageBandとiRig Keys 2で音を出して遊んだり、ProcreateとApple Pencilで謎の絵を描いたりしている。こういうのは大人も一緒にやってあげると喜ぶ。Smart Keyboardをくっつけて「ブログを書いてる」と宣ったりもする。あとは週末に祖父母とFaceTimeをする。 とにかくiPadを自由に使わせている。自由に使えない道具に

    子供にアプリを作る - cockscomblog?
    koogawa
    koogawa 2020/12/16
    良い話
  • WWDC20ファーストインプレッション - cockscomblog?

    WWDC20のKeynoteをみて、ドキュメントを乱読し、Platforms State of the Unionをみて、ちょっと寝て、仕事をしている。今はめちゃくちゃ眠たい。仕事休んだらよかった。 予想の振り返り 一昨日、ちょっとふざけた感じで、各メディアの予想と筆者の考えをまとめて公開した。 今年はiOS 14の早期ビルドがリークしていたと言われている。そのせいか、各メディアの予想はかなり網羅的だったと言える。筆者の予想も全体的にはいい線だったと思う。 ほぼ正解で震えてる https://t.co/HqYkEARRC9— giginet (@giginet) 2020年6月22日 「SwiftUI 2」と書いた内容は、ウインドウをSwiftUIで作れるとか、穏当に実現している。SwiftUIのパラダイムにはあまり大きな変化がないが、それでも注目すべきことがあるので、いずれ紹介したい。

    WWDC20ファーストインプレッション - cockscomblog?
    koogawa
    koogawa 2020/06/23
    「最高」
  • WWDC20で何が発表される?予想をまとめてみました! - cockscomblog?

    2020年のWWDCは、新型コロナウイルスによる感染症拡大のため、ほかの様々なイベントと同様に開催形式が変わる。現地時間の22日(日時間では23日)、KeynoteとPlatforms States of the Unionが行われ、その後に様々なセッションビデオが公開される予定だ。 WWDC20 期待 Appleプラットフォームの開発者としては、WWDCは一年で最大の楽しみである。昨年はCatalystやSwiftUIが発表され、たいへん盛り上がった。今年は何が発表されるのか、否が応でも期待が高まる。 SwiftUI 2 今年はとうぜん、SwiftUIの大幅なアップデートが出てくるだろう。画面いっぱいに「SwiftUI 2」の文字が大写しになるのが待ち遠しい。SwiftUIでアプリを作ろうとするとすぐに気づくのだが、SwiftUIはまだ機能不足である。 WKWebViewをラップしたW

    WWDC20で何が発表される?予想をまとめてみました! - cockscomblog?
    koogawa
    koogawa 2020/06/21
    夢がある
  • 二人目の子供が生まれました - cockscomblog?

    およそ一週間前の21日午前1時頃、僕との二人目の子供が生まれました。予定日を10日も過ぎて生まれた息子とは違い、予定日翌日のことでした。3,200グラムの女の子です。日が変わる頃に病院へ行って、そこからあっという間に産まれました。 息子のときより小さいせいか、なんだか違った風に感じています。その息子もまた新たな家族の誕生を喜んでおり、赤ちゃんの顔を覗き込んだり、なんだかんだと話しかけたりしています。 二人目ということで、僕にもにもいくらか心の余裕がありましたが、一方で前回とは違って2歳半になった息子もいるので、心配もしました。実際にこの一週間は僕と息子の二人で生活していましたが、息子の成長に驚かされるばかりでした。この二人暮らしのことは、僕にとっても生涯の思い出になりそうです。 この誕生に伴って、僕も少しの間だけ育児休業させていただくことにしました。仕事をしていない自分への恐れもありま

    二人目の子供が生まれました - cockscomblog?
    koogawa
    koogawa 2019/10/28
    おめでとうございます!
  • Flutterを試した - cockscomblog?

    flutter.io 先日なんとなく物見遊山的にFlutterを試してみた。特に事前の知識もなく数時間で試した程度で、全体に不案内ではあるから、それなりの感想であることを先に断っておく。 (当方はiOS/Androidのネイティブアプリの開発や、Reactを使ったWebフロントエンド開発の多少の経験を有しています) 開発環境 IntelliJ IDEAのFlutter開発環境 セットアップ Get Started: Installにしたがって環境を構築した。Homebrewなどでインストールできるようにしようという動きもあるが、現時点では手でSDKを配置する必要があるなど、少し手間がかかる。経験がないと少し難しいかもしれないが、時間が解決するだろう。 エディタ IDEとしてIntelliJ IDEAにDartプラグインとFlutterプラグインをインストールした。プラグインのできがよく、筆

    Flutterを試した - cockscomblog?
    koogawa
    koogawa 2018/05/21
    “WebView widgetの不在に気がついた” なるほど
  • Marzipanを予想する - cockscomblog?

    予想というか、根拠のない与太話です。 Marzipanと呼ばれるAppleプロジェクトは、どのようなものになるのだろう。噂では、iOSとmacOSのアプリが一度に作れるようになるらしい。このふたつのOSのアプリを開発する上での主要な差異は、iOSのUIKitmacOSのAppKitの、UIフレームワークである。その他のフレームワークのほとんどはすでに共通している。この状況を踏まえれば、MarzipanはUIフレームワークであると考えられる。 そのMarzipanがどのようなUIフレームワークになるのか、グラデーションをつけて考えてみる。 UIKitの移植 もっとも単純なのは、UIKitmacOSへ移植してしまうパターンである。macOSのAppKitは古びてきているから、より近代的なUIKitを持ってきてしまう発想である。 もちろんtvOSのUIKitのように、同じUIKitでも異な

    Marzipanを予想する - cockscomblog?
    koogawa
    koogawa 2018/04/16
    今年もWWDC から目が離せない
  • Swift の Nil Coalescing Operator でコンパイルは遅くなるか - cockscomblog?

    趣味のウェブブラウジングをしていると、Swift の ?? (nil coalescing operator) がコンパイルを遅くするのではないか、といった話題*1を見かけました。この演算子は、左辺の Optional<Wrapped> 型の値が Optional.none である場合に右辺の値を返すというもので、直感的にはこれがコンパイル時間を悪化させるとは思えません。経験から言えば、このようなケースでは大抵やや複雑な型推論が発生しており、それがコンパイル時間に支配的な影響を与えています。そうであるなら、人間が少し工夫して型のコンテキストを与えてやることで、計算機はずっとよいパフォーマンスを発揮できるはずです。 ごく簡単な例で実験してみましょう。以下のコードは、let view: UIView? があるとき、座標系における view のX座標を得ようとするものです。ただし view が

    Swift の Nil Coalescing Operator でコンパイルは遅くなるか - cockscomblog?
    koogawa
    koogawa 2016/07/06
  • UIButtonの画像の位置を変えたい - cockscomblog?

    UIButton の画像の位置を、タイトルの左側じゃなく上側や右側にしたい。画像が左側じゃないボタンのモックを見たとき、どうやって実現するかいつも少し悩む。ということでいくつかのアプローチを検討したい。 drawRect(_:) など UIButton は var titleLabel: UILabel? { get } や var imageView: UIImageView? { get } といった view を内包していて、描画はそういった view の側で行われるので、drawRect(_:) などの描画関連のメソッドをオーバーライドするべきではない。 独自に UIImageView を足したり CALayer を足したりして、表示される画像を追加することはできる。 setBackgroundImage(_:forState:) 画像を背景にする。UIImage の resiza

    UIButtonの画像の位置を変えたい - cockscomblog?
    koogawa
    koogawa 2016/04/22
  • Swift 2.2 - cockscomblog?

    寒さも和らぎ、日によっては春の訪れを感じさせる今日この頃、いかがお過ごしでしょうか。春といえば Swift です。Swift は春と秋に、まるで衣替えのように大きなリリースがあります。2016年の春と予告されていた Swift 2.2 は、おそらく来週には正式にリリースされるものと思われます3月22日にリリースされました。 Swift 2.2 は、バグの修正や警告や診断の改善、コンパイル時間や実行速度の向上が主目的であるとされ、それに加えて Swift 2.0 以来のちょっとした機能向上を図ってのリリースとなります。Swift2.2 は OSS となった Swift の初めてのバージョンアップでもあります。すなわちコミュニティからの直接的なフィードバックを経た、最初の Swift と言えるでしょう。そんな Swift 2.2 の変更から主だった(おもしろい)部分を紹介します。 春に備えて準

    Swift 2.2 - cockscomblog?
    koogawa
    koogawa 2016/03/15
    春といえば Swift
  • try! Swiftに参加した日記です #tryswiftconf - cockscomblog?

    先日のtry! Swift Conferenceに参加した。try! Swiftは、日におけるモバイルアプリのカンファレンスとしては間違いなく過去最大規模であり、かつ最も国際色あるものだったように思う。しかし誰もが繰り返し言っているように、その運営は極めてスムーズであり、主催者の苦労が偲ばれる。@NatashaTheRobotさんや id:KishikawaKatsumi さんをはじめとした主催者のみなさんや、ボランティアのみなさん、その他関係者の多くの方々には、ただ感謝するばかりである。 try! Swift #tryswiftconf 💖 pic.twitter.com/4jtb6XEF1J— try! Swift (@tryswiftconf) 2016年3月4日 私のtry! Swift これは個人の感想であるから、僕とtry! Swiftについての関わりから始める。僕はtry

    try! Swiftに参加した日記です #tryswiftconf - cockscomblog?
    koogawa
    koogawa 2016/03/11
  • UIControlにOptionSetTypeで状態を追加する - cockscomblog?

    新成人のみなさん、おめでとうございます。大人になるのは難しいことだけど、自由に自分の人生を歩んでほしいと思います。 UIControlState UIControlにはvar state: UIControlState { get }というプロパティがある。これはすべてのUIControlの状態を示す。UIControlStateは同時に複数の状態を保持できるbit-maskであり、SwiftにおいてはOptionSetTypeとして表現される。つまり例えば、.Disabledでありかつ.Selectedであることが起こり得る。 struct UIControlState : OptionSetType { init(rawValue rawValue: UInt) static var Normal: UIControlState { get } static var Highlight

    UIControlにOptionSetTypeで状態を追加する - cockscomblog?
    koogawa
    koogawa 2016/01/12
  • Swiftにおけるclassとstructの使い分け - cockscomblog?

    新年あけましておめでとうございます。 class, struct Swiftにはclass (class)の他にstructure (struct)があり、どちらもよく似た機能を提供する。しかしそれぞれ参照型 (reference type)と値型 (value type)という違いがあり、このことはパラダイムの違いをもたらす。そこで多くのSwiftプログラマーは、classとstructのどちらを採用するべきか迷いがちである。記事ではこの問題について議論を深めたい。 structはカッコいい classについてはなじみ深いと思うので、structの特徴を整理する。はじめに述べたようにstructは値型である。値型であることがstructを大きく特徴付けている。 structはデフォルトで不変である。var, mutating, inoutのキーワードを用いることで、この不変であるという

    Swiftにおけるclassとstructの使い分け - cockscomblog?
    koogawa
    koogawa 2016/01/01
  • Swift 2 Error Handling in Practice #swift2symposium - cockscomblog?

    Swift 2 から新たに導入されたエラーハンドリングに関する機能を実際のアプリで利用しようとすると、いくつか悩みどころがあることに気付く。これらの問題について議論を深め、実践的な解を求めていきたいと思う。 Which is better? — Optional type or throws func parseInt(string: String) -> Int? func parseInt(string: String) throws -> Int func parseInt(string: String) throws -> Int? 文字列を整数型としてパースする関数のシグネチャ 文字列を整数型にパースする関数があったとして、そのシグネチャはどのようにあるべきだろうか。明らかに、nil を返すかまたはエラーを throw するような、つまり一番下のシグネチャは不適切である。残るふた

    Swift 2 Error Handling in Practice #swift2symposium - cockscomblog?
    koogawa
    koogawa 2015/09/01
  • 結婚しました - cockscomblog?

    学生の頃から4年半付き合ってきた彼女と結婚しました。 区役所に婚姻届を提出し、両家の両親らをお招きして事会を催しました。 もう2年ほど同棲しておりましたので、これといって変わることもありませんが、よりいっそうがんばって参りたいと思います。 今後ともよろしくおねがいいたします。

    結婚しました - cockscomblog?
    koogawa
    koogawa 2015/08/08
    おめでとうございます!
  • Swift 1.2 - cockscomblog?

    第61回 Cocoa勉強会関西で“Swift 1.2 The long-awaited language updates”と題して発表した、Swift 1.2の主だった(おもしろい)変更点の紹介です。 if let Swift 1.2で最も改善されたのはif文です。if letでOptionalをunwrapできる機能が大きく向上し、複数のOptionalを同時にunwrapできるほか、unwrapされた値について条件を加えることができるようになりました。 例えばcondition: Boolが真でふたつのOptional<Int>がnilではなく、大小関係にも条件がある、という条件を表してみます。 Swift 1.1 let condition = true let aNumber: Int? = 3 let anotherNumber: Int? = 7 if condition {

    Swift 1.2 - cockscomblog?
    koogawa
    koogawa 2015/07/13