サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
blog.penginmura.tech
Tl;Dr それは何? 構成は? がんばるぞい bot の歴史 (興味がない方は読み飛ばしてください) ペンギン村 Slack では昔から がんばるぞい bot が稼働していました。 それは Slack bot と呼ぶには単純すぎるもので、「がんばるぞい!」や「がんばったぞい!」などと書き込むと、ランダムでキャラクターがメッセージを返答してくれるという、まぁがんばる人を応援しちゃうぜ的な bot でした。 そんな、がんばるぞい bot ですが実は2度もスクラッチで書き直されています。 初代: JavaScript / AWS Lambda もっとも初期のサービスは JavaScript / AWS Lambda で稼働させていました。 ちょうど Lambda や AWS Dash Button などが流行っていたので、とりあえずなんか作ってみようという発想で作られたのが始まりだった、と記憶
どうも、休職中の @tobi462 です。 毎日仕事もせずに何をやっているかと言えば・・・そうですね、個人的推論に則った改善活動といったところでしょうか。 Bitrise の Xcode 11.3.x ビルドスタックの bundler が 1.x → 2.x に更新された 先週くらいに iOS 界隈を騒がせた小さな事件といえば、Bitrise の Xcode 11.3.x のビルドスタックのマイナーアップデートにおいて、bundler のバージョンが 1.x から 2.x に更新されたことでしょう。 Xcode 11.3 から Xcode 11.3.1 へのマイナーアップデートに関わらず、長らく bundler 1.x を利用し続けていた Bitrise が、このタイミングで bundler 2.x 系に更新したことは、Bitrise を利用している iOSアプリエンジニアの多くを混乱させ
はじめに お疲れ様です。かむいです。 この記事はiOS Advent Calendar 2019の17日目の投稿となります。 前回は@codelynxさんの名前付き UIView と後付けストアドプロパティもどきでした。 先月Firebase AuthenticationでSign in with Appleが利用できるとの発表がありました。 firebase.googleblog.com それまでは@fromkkさんが書かれていたようなCloud Functionsを利用したやり方でも近い仕組みを実現できていましたが、やはりFirebase Authentication単体で処理が実現できるのは嬉しい限りです。 qiita.com 今回はこのFirebase Authを利用した実装の紹介だけでなく、実装の中で登場するDelegateメソッドをRx化し、RxSwiftを利用しているケースを
どうも、最近はRabi-Libiという弾幕アクションゲームをやっているtobi462です。 というわけで、PEAKSから『iOSテスト全書』の電子版が正式リリースされました。 peaks.cc おそらく製本版も今月中には発送されるかと思います。 (ところで一般販売はされるのでしょうか?私、気になります!) 追記:一般販売が開始されました! iOSテスト全書 著者: 松尾 和昭,細沼 祐介,田中 賢治,平田 敏之,玉城 信悟, 製本版,電子版 PEAKSで購入する そんなわけで、個人的にどういう想いを込めて執筆したのか、みたいなことを自分なりに振り返りながら書いてみたいと思います。 担当した章 私は著者陣の一人として、以下の章の執筆を担当させていただきました。 第2章:ユニットテスト(概要) 第4章:ユニットテスト(Quick / Nimble 編) 第5章:BDDによるアプリ開発 なお、第
かむいです。東京に台風15号が接近中です。雨風の音が凄い。。 iOSDC 2019に、今年も村から僕と@tobi462氏で参加してきました。 この光景を見るとiOSDCに来たなぁってなります iOS13から登場するダークモード仕様になってました 今年もCfPを幾つか投下したのですが、粉砕☆玉砕☆大喝采☆ そんなボツネタを来月弊社で開催するmeetupにて発表するので、ご都合がよろしければ是非遊びに来てください。 dmm.connpass.com 昨年参加した時にも書きましたが、普段カンファレンスでお会いする顔なじみの方、今回初めてお会いした方と、1年に1回この場で会える機会は本当に同窓会・文化祭の楽しさがありますね。 実行委員長の@tomzoh氏も話していましたが、iOSDC = コミュニケーションの場だなと強く感じさせられます。 今年の1セッションの時間は30分, 60分枠となり(LT除
この記事の目的 ビルド前の準備 メモリリークの検知 メモリリークの原因を特定する 原因を特定するときのTips メモリリークの修正方法 まとめ その他備考 この記事の目的 iOSアプリにおけるメモリリークの対処法を紹介します。 例えば、以下の画像のような、一見複雑な循環参照が原因のリークも簡単に直せるようになります。 ビルド前の準備 Edit SchemeでMalloc Stack LoggingをONにしておきます。 これで各クラスインスタンス生成時に実行されたコードを見ることができます。詳細は後述します。 「Edit Scheme」で「Malloc Stack Logging」をONにする メモリリークの検知 デバッグビルドしてから、アプリを操作*1した後に'Memory Graph'を開きます。 Memory Graphを開くボタン Xcode左端のDebug Navigatorを見
どうも、WWDC19に行ったついでにサンフランシスコで食べたカニの味が忘れられない @tobi462 です。 さて、そんなわけで今年も iOSDC の CfP を快適に検索できるサービス「このすばCfP」をリリースしました! iosdc19-cfps.penginmura.tech アニメでいうなら2期という感じでしょうか。 せっかくなので、軽く開発ストーリを記事にしてみたいと思います。 今年は必要ないかも? Flutter で作ろう 再始動 開発・リリース かむい shi より一言 おわりに 今年は必要ないかも? 去年、iOSDCに投稿されたプロポーザルを快適に検索・閲覧できるサービスが欲しい、という思いから通称「このすばCfP」をリリースしました。 しかし、正直なところ今年は開発すべきかどうか迷っていました。 というのも、公式のプロポーザル一覧の検索機能が向上したため、あえて情報源を増
どうも、最近は ウマ娘 プリティーダービー というアニメにハマっている @tobi462 です。 ちなみにセイウンスカイちゃんが一番好きです。 さて、すでに結構時間が経ってしまいましたが、try! Swift 2019 TOKYO で登壇してきたのでその感想的なブログ記事です。 www.tryswift.co speakerdeck.com LT採択から20分トークへ 今回、2日目の午後に20分トークで発表させていただいたのですが、実はもともとLTの予定でした。 ですが、当初予定していた20分トークのキャンセルがあったとのことで、運営から「20分で発表してみませんか?」という提案をいただき、せっかくの機会なので快諾させていただきました。 何を話すか(あるいは何を話さないか) もともとLTの予定で提出したCfPなので、最初はまさにライトニングトークというようなスピーディーな発表をしようと考え
どうも、 try! Swift 2019 TOKYO で登壇したのにいまだにブログを書いてない @tobi462 です。 今回はすごく久しぶりに勉強会に参加してきたのでそのレポートです。 yj-meetup.connpass.com Bonfire iOS は今回で5回目の開催で、今回は テスト がテーマということでした。 try! Swift でもProperty-based Testing / SwiftCheck で発表するくらい、テストの自動化に興味を持っているので、今回は絶対参加せねば・・・と思いブログ枠で参加させていただきました。 今回はキュレーターである @kumamo_tone さんのチョイスでYahoo!社内外のあわせて5名からの発表がありました。 テストは書かないと宣言していたアプリの現在 最初は @fromkk さんの発表でした。 メモ 振り返り 度重なる判断ミス ア
はじめに おは椎名!かむいです。 今回、ペンギン村で初の開発合宿を敢行しました。 スペシャルゲストとしてダンボー氏, やみつき氏にもお越し頂き、千葉の土善旅館に行ってきたイベントをレポートしたいと思います。 なお当日の感想はTwitterにて #ペンギン村開発合宿 というハッシュタグを作って頂いたので、当日の様子についてはそちらを見て頂いても良いかもです。 都心部でも雪が積もる天気でしたが、旅館の庭園の雪化粧が見れてとてもエモかったです 土善旅館のここがスゴい!(声: 中井和哉) エンジニアのための開発合宿プラン、弓道場を備えた弓道合宿プランがある デザイナー, 漫画家などの執筆者のための原稿合宿執筆プランもある 温泉が24時間入れる 猫と開発ができる 看板猫が何匹かいるらしい。圧倒的可愛さ 今回は開発部屋に遊びに来てくれず(´・ω・`) 寒さのせいでどこかでまったりしてたのかな? 実際に
自己紹介 概要 できること 使い所 方法 手順 リファレンスからデリファレンスする方法 x/gx コマンドを使う。 expression -l objc -o -- *(id**)を使う キャプチャされたデータが知りたい場合 動作環境 備考 脚注 自己紹介 ペンギン村の通行人 、po_miyasakaです。 概要 できること 任意のタイミングでメモリ上に保持されているクロージャが定義されている場所を表示する。おそらく本邦初公開😎 使い所 手順がちょっと大変なので、どうしてもリークを確かめたい時とかに使えるかも。 方法 手順 Debug Memory Graphを開く closureでコンポーネントを検索すると swift closure contextというクラスのインスタンスのアドレスが複数引っかかる このインスタンスがクロージャにキャプチャされたデータなどのクロージャの情報のようであ
自己紹介 vinfoとは 使用方法イメージ 使い所 使い方 備考 SwiftのStuctには vinfoではアクセスできません。。 自己紹介 ペンギン村の通行人 、po_miyasakaです。 名前の「po」はLLDBのコマンドから拝借しました。 (プロダクトオーナーでは🍆😎) vinfoとは github.com pythonで実装されたLLDB用カスタムコマンド 任意のアドレスからデバッグ用変数を生成する程度の能力を持つ (クラスインスタンスのアドレスに限る) SwiftもしくはObjective-Cで利用可能 使用方法イメージ アドレスからインスタンス生成デモ https://po-miyasaka.github.io/ezgif-2-f0ca03bf9732.gif Debug Memory Graphからインスタンス生成デモ https://po-miyasaka.githu
以下の記事の続きです。 blog.penginmura.tech blog.penginmura.tech 最後となるこの記事では、ここまで紹介してこなかった細かい機能や、Go言語における並列処理を実現するゴルーチン・チャネルについて触れ、最後に Go 言語に対する総括的な感想を述べて終わりにしたいと思います。 defer Swift でも用意されている defer は Go言語で初めて採用された仕組みらしい。どちらもリソースの後片付けなどに利用できる。 概略 次の例では Mutex ロックを確保した直後に defer でロック開放のコードを書くことで、関数を抜けたタイミングで確実にロック解放がされるようにしている。 func increment() { mu.Lock() defer mu.Unlock() count++ } Swift で同等のAPI が用意されていれば次のようになる
以下の記事の続きです。 blog.penginmura.tech 制御構文 Go言語の制御構文としては次のものがある。 if switch for ゴルーチン・チャネルにおいて利用できる select という制御構文もあるが、それは後ほど触れることにする。 if 文 基本的な書き方は Swift とほとんど変わらない。次のコードは Go言語 / Swift ともにコンパイルできる。 if 0 <= x && x < 100 { } else { } Go言語では if 文において事前にローカル変数を宣言することができ、これは Go言語におけるエラー処理のパターンで多用される。前編において 0除算された場合にエラーを返すDiv関数を呼び出した例として、次のようなエラー処理を記述した。 n, err := Div(6, 2) if err != nil { panic("error!") }
私は Rust に賭けていた。ポストC++言語としての地位をどのプログラミング言語が取るか、もっといえば Rust vs Go でどちらが勝つかという話においてだ。 私が初めてGo言語を知った時は、こんな非力なプログラミング言語のどこが良いのだろうという感想だった。シンタックスはC言語を踏襲しているもののなんだか奇妙に見えたし、例外もジェネリクスも無いプログラミング言語が流行るわけ無いと思った。もちろんそれが意図的であるというWeb記事をいくつか読んだあとでもだ。それにGCを採用した言語がそれほどの高速さを得られるのかという点においても懐疑的であった。 しかし、予想に反してGo言語は相当受け入れられたらしい。 コンテナ界の世紀末覇者先輩であるDockerはGo言語で書かれているし、私の愛するKubernetesやその周辺ツールまでもがGo言語で書かれているらしい。 それに比べて Rust
「OSSを公開する」と心の中で思ったならッ! その時スデに行動は終わっているんだッ! ジョジョ5部は面白いですね、どうも @tobi462 です。 そんなわけで iOSDC 2018 のプロポーザル検索サービス「この素晴らしいCfPに祝福を!」のソースをOSSとして公開しました。 github.com このすば CfP は衰退しました。 このすば CfP は、 iOSDC 2018 のプロポーザルをもっと快適に見れたら便利だろうという思いつきが発端となり、ペンギン村の有志で開発・公開したサービスです。 GKE / Kubernetes をインフラとして採用し、バックエンドの API には Python、フロントエンドには Vue.js、CSS フレームワークには Bulma を採用し、SPA な Web ページとして公開しました。 おかげさまでそこそこ好評をいただけて、iOSDC リジェク
はじめに お疲れ様です。最近寒くてオフトゥンから出られないかむいです。 勉強会に足を運べていない日が続いていたのですが、今回はメルペイさんが主催する『Merpay Tech Talk #2』にお邪魔して来たので、レポートをまとめたいと思います! mercari.connpass.com この日はペンギン村の村民でもある@natpenguin氏も主催側で参加されており、久々にお会い出来て良かったです😃 発表されたテーマはUIにフォーカスを当てたものが多く、どれもiOSエンジニアにとっては関心の高い発表内容でした。 「Cloning Photos app fluid interface」by @masamichiueta さん speakerdeck.com WWDC2018でもセッションがあった、iPhone Xなどに使われる操作インターフェースであるDesigning Fluid Int
どうも、最近涼しくなってきたので温泉が最高に感じる今日この頃な tobi462 です。 そんなわけで iOSDC Japan 2018 に続き、DroidKaigi 2019 のプロポーザル一覧を快適に見れるかもしれないサービスを開発・公開しました。 droidkaigi-index.penginmura.tech 前回と同様に SPA で快適に検索・閲覧出来ることを目標としています。 また iOSDC とは違い、いわゆるプロポーザルの詳細画面が公式になかったので、SNSでシェアする目的にも使えるように用意してみました。 きっかけ 例によってペンギン村Slackでの発言がきっかけでした。 あいかわらず雑なノリだと感心しますが、賛同してくださった開発メンバーで作ることになりました。 それにしても間違って去年のDroidKaigiのURLを貼っているあたり本当に雑だと思います。 利用技術につい
どうも、最近は「進撃の巨人 3期」が楽しみな tobi462 です。 しかし、最近一部の人達から「シュタインズ・ゲート ゼロ」を強烈に推されプレッシャーを感じる今日このごろです。いや原作こそ未プレイですがアニメ初期は見てますし、全話配信されたら見ようと思ってはいたんですよ? レギュラートーク30分 はい、ということで iOSDC Japan 2018 にて 30分 のレギュラートークをさせていただきました。 去年は LT で発表させていただいたのですが、今年はレギュラートーク、しかも今までに経験したことがない 30 分の発表ということで、資料作り・発表練習ともに苦労した面も多いのですが、良い経験が出来たと思います。 正直なところを言うと、こんな平凡な(あるいは中身の透明性が高い)テーマを聞きに来る人はいないのではないかと思っていたのですが、予想に反して聞きに来てくれた人が多かったので嬉しか
この度、ペンギン村 Tech のエンジニア3名で iOSDC 2018 の プロポーザル(CfP)一覧を閲覧・検索できるサービスを公開しました! iosdc-cfps.penginmura.tech Web UI は SPA で開発し、画面遷移なしで快適に見られるようにしてみました。 1stリリースでは一覧表示のみでしたが、現在では採択ラベルの表示・フィルタリング・キーワード検索にも対応しており、今後も少しずつ改善していきたいと思っています。 なぜ作ったか? これは私個人の話になるのですが、私は去年 LT を採択され iOSDC 2017 にて登壇させていただきました。 iosdc.jp 参加して感じたのは、カンファレンスをより楽しいものにしようとするスタッフ達の想い・情熱でした。 そんなわけで「来年はスタッフをやるぞ!」と意気込んでいたのですが、ふとプロポーザル一覧をもっと手軽に見れたら
はじめに ども、かむいです 気がついたら2018年も7月に突入してますね(´・ω・`) 投稿がご無沙汰だったので、先月弊社で登壇したイベントがあったので、その話について書きたいと思います WWDC18報告会 in 弊社 dmmcj.connpass.com 当日はまさかの申込数約200人と大変注目を浴びたイベントとなりましたmm 登壇1番手として変なプレッシャーもあったり(´・ω・`) そんな中で発表した内容がこちら https://speakerdeck.com/tony1224/wwdc18-cherry-pick-xcode-10-beta WWDC18 cherry-pick Xcode 10 beta というお題目で発表しました ただXcode絡みのテーマのセッションは複数あったので、その中から Source Control Workflows in Xcode develope
どうも、Nintendo Switch版の斑鳩が配信されるの楽しみな tobi462(過去記事) です。 斑鳩はSTGとしての面白さは当然のこと、硬派なストーリー設定も素晴らしく・・・おっとこれを語りだすと長くなるのでやめておきましょう。 Kubernetes輪読会 始動 #0 コワーキングスペース Docker ハンズオン インストール Docker 入門 Vagrant も触ってみる(ハイパーバイザ型の仮想化を試してみる) Docker に戻る(ハイパーバイザ型とコンテナ型の違いについて) 自分で Docker Image を作る スペシャルメニュー 参加者の感想 おわり 輪読会は続くよ Kubernetes輪読会 さて、ペンギン村のエンジニア数人で Kubernetes の輪読会をすることになりました。 輪読会の対象となる技術書は以下です。 Kubernetes は Google が
この素晴らしきビルドシステムに祝福を。 どうも tobi462(過去記事)です。 さて、Xcode 9 から新しいビルドシステムが導入されたのは記憶に新しいですが、9.3 の時点でも Preview となっており標準のビルドシステムにはなっていません。 すでに他記事でも紹介や現状のビルドシステムとの比較がされていますが、実際に自分でやってみないと信用しない質のエンジニアなので、今回は自分で試してみた結果です。 追記(2018/05/27): 逆にビルド時間が長くなったり、そもそもエラーでビルドできないケースもあるようです。現時点では Preview 扱いなので、そのうち改善されるかもしれません。 Tl;Dr 以下のパフォーマンス向上結果が得られた Clean Build で 95% 差分ビルドで 90% Swift 4.2 のツールチェーンではビルドエラーになった 自分のPJで試して問題な
Rust はとても良い言語です、 TRust me。 ダジャレから始めるのは初めてでしょうか。Rust 勉強中の tobi462 です。 私はプログラミング言語を学ぶのが好きな畑の人間でして、最近では Rust を学んでいるのですが、これがなかなかどうして面白いのです。 Love Swift ? おそらく私の一番得意な言語は Swift か Java なわけですが、どちらが好きかと言われれば断然 Swift です。 Haskell のような代数データ型としての enum はとても好きですし、Protocol Oriented Programming や extension による既存クラスの拡張、switch によるパターンマッチも好きです。 機能やシンタックスが多すぎて覚えるのが大変な点や、switch によるパターンマッチの読みづらさといった点、バージョンアップごとに破壊的仕様変更が入
どうも、運動したあとはお酒が飲みたくなってしまう tobi462 です。 ちょっと時間が空きましたが、今回はremoveAll(:where)という新たに追加されたコレクション系のAPIの Proposal を見ていきたいと思います。 今までの Swift 4.2 の記事は以下です。 Swift 4.2 で追加されるコンパイラディレクティブ(SE-0196) Swift 4.2 で追加される @dynamicMemberLookup メモ(SE-0195) Swift 4.2 では boolean の反転(toggle)ができるようになる(SE-0196) Swift 4.2 では enum の件数がとれるようになる(SE-0194) なんだか増えてきましたね。 Tl;Dr let isOdd: (Int) -> Bool = { $0 % 2 == 1 } var xs = [1, 2,
どうも、tobi462 です。 今日は docker-compose build での apk update 時に以下のエラーが発生した時の対処メモです。 Step 7/11 : RUN apk update ---> Running in 45856361a825 fetch http://mirrors.aliyun.com/alpine/v3.4/main/x86_64/APKINDEX.tar.gz ERROR: http://mirrors.aliyun.com/alpine/v3.4/main: temporary error (try again later) WARNING: Ignoring APKINDEX.47c31cae.tar.gz: No such file or directory Tl;Dr Docker のバージョンを最新にしたら解決しました。 $ sud
何でもは知らない、知ってることだけ。 どうも、最近書き出しの挨拶を考えるのに時間を要する tobi462 です。 今日は SE-0196 で追加されたコンパイラディレクティブの紹介です。 今まで書いた Swift 4.2 の記事は以下です。 Swift 4.2 で追加される @dynamicMemberLookup メモ(SE-0195) Swift 4.2 では boolean の反転(toggle)ができるようになる(SE-0196) Swift 4.2 では enum の件数がとれるようになる(SE-0194) いつのまにかシリーズ化してきましたね。 (化物語みたいに) Tl;Dr in Objective-C in Swift 4.2 まとめ Tl;Dr #warning("強制アンラップはやめるべき") // コンパイル時の警告 let message = self.messag
全地球100億人のSwifterな皆さん、コンバトラーっ! tobi462 でーっす! え、いつもとノリが違う?まぁ、そういう日もあるんじゃないでしょうか。 そんなわけで、前回・前々回と続き Swift 4.2 の記事です。 今回は、Swift 作者であるラトナーさんの Proposal (SE-0195) のようですよ。 Tl;Dr @dynamicMemberLookup struct AnimeCharacter { subscript(dynamicMember member: String) -> String { let properties = ["name": "阿良々木月火", "music": "白金ディスコ"] return properties[member, default: ""] } } character.name // => "阿良々木月火" charac
かむいです。今月転職しました。 転職活動も忙しかったりして1ヶ月ぶりの投稿となります。 時間過ぎるのホント早い! Hyperion-Androidが話題に 先週 Android界隈で話題になったコレ。 こりゃすげぇ!てなりましたよね。 qiita.com てっきりAndroidだけかと思っててんですけどちゃんとiOSもあったんですよ! github.com 僕はもうかよちんの「さすがです!」LINEスタンプを開発者に送りつけたい気持ちになったのですが、サンプルコードがあったのでまずは動かしてみたわけです。 そしたら実際に動かしらもっと感動しちゃったので、そのことについて書きます。 導入の仕方 CocoaPodsかCarthegeで導入できます。 詳細はREADME.mdがわかりやすいのでそれ見てもらえれば早いのですが、CocoaPodsで言うと:configurations => ['De
次のページ
このページを最初にブックマークしてみませんか?
『ペンギン村 Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く