開発ログ
リリースノートと言うより開発のログのような何か
開発ログにした
2021-09-01
ユーザーには何も影響ないけど、バックエンド(画像サーバー)のデプロイを自動化してみた
Google Cloud BuildをGitHubと連携させて
削除・移動などの挙動を少し改善した
投げなわで選択して移動または削除した場合、undoすると投げなわも戻ってくるようにした
地味だけど便利じゃない?
2021-08-29
点が打てないを直した
開発版
画像の方は開発版とかないので直接更新
バックエンドの方はほとんどいじらないので、毎回勝手を忘れてしまうという問題がある
ついでに、 SVGのファイルサイズが小さくなるようにした
具体的には、座標の小数点以下の桁数を制限した
計測してないけど、結構な差になってると思う
2021-08-28
Safariでログインできない問題を修正した
ポップアップがブロックされていることが原因だった
対策として、ポップアップのブロックが原因でログインが失敗した場合は、リダイレクトを使って再度ログインを試みることにした
(クリティカルなので安定版にリリースした)
2021-08-27
開発版を用意したので、新機能などはそちらにまずデプロイするようにしていきます
最近色々進みまして、パスの複製に近いことをするために、コピー/ペーストを実装してみました
キーボードショートカットまたは画面下部のボタンでコピペなどの操作ができます
できる操作は増減するかも
開発版にデプロイしてます
Clipboard APIを使ったんだけど、なかなか面倒くさかった
概ねいい感じだけどまだ改善する予定
書き忘れてたけど、ついでにiOS/iPad OSのsafe areaに対応したんだった
JavaScriptからsafe areaのサイズを取得する
2021-08-22
マルチタッチのジェスチャーに対応した
iPadなどのタッチスクリーンで、ピンチなどの操作ができるようになった
2021-08-18
また久しぶりにコードいじりに来ました
とりあえず、以前一度Yarn1に戻したのを再びYarn V2にしてみる
というのも、Yarn2でデフォルトで有効になるPnPはOFFにもできるということを今更知ったため
PnPをオフにすると、ロックファイルの形式が違うのを除いてはほぼ変化なし
そのうちPnPもやってみる
Pointer Eventsを使ってみる試み
タッチイベントとマウスイベントを両方扱わずに、Pointer Eventだけでできないか?とふと思いやってみた
マウスでは完璧に動いているが、タッチで微妙な動きをしていて、苦戦中
と思ったけど結果的にうまく行きました
動作確認はしましたが、なんか問題あれば教えてください
ペンタブレットでKakeruに書き込めなくなった
2021-06-07
えー、前回更新したのが半年前だなんて... お久しぶりです
久しぶりに少しコードに手を入れてみました
大量のパスを一度に動かすのに失敗するを直した
Firestoreのバッチ更新に関して、1つのバッチに含める変更が最大500になるようにした
バッチ更新をしている箇所がいくつかあったので、batchHelperという関数を作って、それで更新処理をラップするといい感じに500操作ずつコミットしてくれるようになった
CanvasManagerって、実質Reactコンポーネントじゃない?と思っていたので、コンポーネントにしてみた
名前はCanvas
大きくは変わらないけど、コンポーネントがマウントされた後にpictureIdが変わる可能性があることを考慮する必要がある
あと、今までCanvasManagerが持っていたいくつかの状態を外に出して、DrawingServiceという名前にしてみた
なぜかというと、今まではCanvasManagerの状態にToolBarコンポーネントが依存していた
コンポーネント化すると、ToolBarから参照しづらくなるし、Ref使うのもちょっと違う感じがする
そこで、ToolBarからアクセスされる状態はDrawingServiceに切り出した
状態を永続化したり復元したりの処理もそこに入れたし、密結合疎結合になって良い感じだと思う
あれ?システム設計って疎結合にしたほうがメンテナンス性が良くなるのではないでしょうかtakker.icon
密結合にすると色んな機能が複雑に絡み合ってバグの温床になる
あまり詳しくないので、間違ったこと書いていたらご指摘いただけるとありがたいです
普通に疎結合の間違いでしたodiak.icon
なるほどtakker.icon
素人目線ですが、Hookに切り出したほうが見通し良くなるのではと思いましたtakker.icon
logicとviewが同じブロックに混ざるとよくわからなくなる
CanvasManagerにたくさん処理を詰め込んでいるのも気になりました
線の描画からundo/redoまで一つの巨大なクラスが処理している
すべて<canvas>に対する処理なので、一つのクラスに統合されてしまうのはわかりますが、いくつかの機能を別のhookに切り出したほうがコードが読みやすくなるのではないでしょうか
テストをしやすくなるという利点もあります
うーん、hooksにはしませんし今のところクラスを分割しようとは思わないですodiak.icon
僕にとっては割と完成されているんですよね
わかりました。自分も具体的に困っているわけではないので、odiak.iconさんの一番納得のいくコーディング方法にするのがいいと思いますtakker.icon
PRとか出したりする中で明確に問題点がでたら、また伺おうと思います。
ついでに久しぶりにAnalyticsをみたんだけど、少ないながらもじわじわとアクセスがあって嬉しいです
いつも使っていただいてありがとうございます
こちらこそ/icons/感謝.iconです!takker.icon
しかも2割は海外からのアクセスだった
/icons2/へえ〜.icontakker.icon
Scrapboxと連携してガンガン使ってくれている方も何人かいらっしゃるようで、嬉しい限りです
2020-12-28
久しぶりです
最近ほとんど何もしていなくて、少し前にSentryを入れてみたくらい
このログを書き始めてちょうど1年みたい
少しずつだけどよくやったよ、自分
今日は、描画処理を少し改善した
最近新しくiPad Proを買ったのだが、Kakeruを使ってみたらちょっとおかしいところを見つけた
というのも、Apple Pencilで線を書いたすぐ後にまた線を書くと書けないことがある
前にTwitterで似たような報告をもらっていたが、スムージング処理がブロックしてるのではと思っていた
スムージングをオフにしてみても起きた
古いiPad(iOS 13)では起きていなかった
原因は分からなかったが、touchmoveイベントのリスナーで、preventDefault()を呼んだら直った
passive: true がついていたのも外した
passiveにする意味はなかったかもしれない
2020-11-20
投げなわツールリリースした!
2020-11-19
投げなわツール、作ってる
概ねできたかなー
まだいくつか改善すべきところなどあり
2020-11-05
Fontawesome Pro導入した
まだ導入しただけ
2020-11-02
FirestoreDataConverterを使って、Firestoreのデータを変換したり型をつけたりしてみた
なかなか良い
今までは自分でそれっぽいことをしていたが、煩わしさが減った感じ
NetlifyからVercelに乗り換えてみた
なんとなく
投げなわツールを実装するぞー
投げ輪のアイコンが欲しいという理由で、fontawesome proを買おうかと思う
2020-10-30
デザインのことを考えてました
線の太さと色のことを考えると、まずデザインをちゃんとしたいなという気持ちが
それはそれとして、雑にでもいいからまず実装しよう
線の色を設定する&線の太さを設定するを実装した!!!
快挙!!!
https://gyazo.com/8897ee100052b5ffd16bc4a2a6754e3d
2020-10-25
パスのスムージング機能を全開放したよー
Galaxy Noteでパームリジェクションするハックを有効にするためのフラグを追加したよー
線の位置が少しずれるを直した
2020-10-23
ログイン前に描いていた絵の所有権を移転するを実装した
Firebase Functionsで移行処理を書いた
フロントエンドも実装した
ちょっとした問題に気づいたが、それも解決した
超細かいところだけど、ずっとやりたかったので嬉しい
この機能は、Gyazoにインスパイアされて作りました
次何やる?
そろそろパスのスムージングをexperimentalじゃなくして良いと思う
あと、Galaxy Noteでパームリジェクションするのをexperimental flagsに入れたい
色とペンの太さ...
2020-10-03
スクロール中だけスクロールバーを表示するを実装した
時間がない中でやるのにすごく良い大きさのタスクだった
次はログイン前に描いていた絵の所有権を移転するをやるか
2020-09-25
はたまたお久しぶりです
しばらくいろいろと死んでました
最近調子がよくなったような、なっていないような
とりあえず今、夜中に起きてテンション上がってきたので勢いで小さいタスクを3つ倒しました
消しゴム機能の改善
以前は感度が悪かったのだが、かなり良くなったと思う
特に、ベジェ曲線に対しては偶然動いていたような状態だった
これでパスのスムージングを胸を張ってオープンにできる
内部的には、太さのある消しゴムの準備ができた
実装的にはすごく愚直なものなんだけど、なかなか腰が上がらなかった...
キーボードでundo/redoする
マウスホイールでズームする
↑ 2つはタイトル通り
振り返ってみると、リポジトリを作ってもう1年以上経つみたい
最初の方はちょっと迷走気味で、今の形の原型は去年の11月くらいに作ったと思う
最初はFirestoreを使おうとしていたっぽい
コンポーネントから直接Firestoreを触っていたせいでごちゃごちゃになって、一旦描けるものを作ることだけにフォーカスすることにしたんだった
最近Galaxy Note20を買ったのでそれで快適に使えるようにもしたいんだけど、Androidだとまともな方法でペンと指を判別できないのでどうするか迷っている
experimental flagsからこっそり有効にできるやつを作ればいいかな
2020-07-26
パスのスムージング機能、とりあえずリリースしちゃいました
https://kakeru.app/6229173a8c8623520c8a10a52686e4ea https://i.kakeru.app/6229173a8c8623520c8a10a52686e4ea.svg
ただし、 https://kakeru.app/flags から "Enable smoothing paths" をオンにすると使える
消しゴムが微妙かもしれないが、使えないほど酷くはない
ちょっとスムージングがきつすぎる気がするので、パラメーターを後で変えるかも
その他フィードバックなど歓迎です
2020-07-22
ちょっとお久しぶりです
最近パスのスムージングを実装してた
途中でこんなこともやった point-down.icon
/odiak/点列をベジェ曲線でフィッティングするライブラリをフォークしてTypeScriptで書き直してみた
とりあえず基本的な部分は実装できた
あとは、消しゴム機能をもう少しまともにしてからリリースしたい
もうしばらくお待ちください (誰もこんなところ見ていないと思うけど)
2020-07-07
お久しぶりです
https://kakeru.app/7fcc52636eb2dc0dbc91a17a93e744fa https://i.kakeru.app/7fcc52636eb2dc0dbc91a17a93e744fa-opaque.png
6月は個人で仕事っぽいことしたり、なんか疲弊したりしてた
PNG画像を出力できるようにした
PNG画像として出力する
ついでに、幅や高さなどのオプションを指定してPNG/SVG画像を出力できるようにした
画像URLのオプション
書いた絵の一覧画面(https://kakeru.app/boards )ではPNG画像を使うようにした
SVGだと絵が複雑なほどクライアントのレンダリングコストがかかるため
macOSでスクロールするとグニャグニャする問題を直した
Macでスクロールがおかしい問題を直す
地味に嬉しい
次は描く機能の方に何か手を入れたいな〜
2020-05-23
i.kakeru.app(画像を配信するサーバー)をCompute EngineからApp Engineに移した
メンテナンスコストを下げるため
Node.js(w/ TypeScript)+Expressで書いていたので、ほとんどそのまま移植できた
2020-05-20
絵にタイムスタンプを持たせるを実装した
既存のタイムスタンプを持たない絵については、適当にタイムスタンプを設定した
微妙に間違えて、意図したのと違う日付になってしまったけどそれほどクリティカルではないはず
一瞬全部のデータを壊しそうになって焦った
↑を受けて、絵の一覧を作成日の順にならべるようにした
それから自分の絵の一覧でページングを行うも実装した
自分が書いた絵の一覧に、新規作成ボタン、アカウントのメニューを追加した
2020-05-19
自分が書いた絵の一覧を実装した
5割のクオリティを目指してとりあえず雑にやった
2020-05-17
アクセス制限の設定を実装した
https://kakeru.app/6d0cce3fd7b461823f292cee349c4cc7 https://i.kakeru.app/6d0cce3fd7b461823f292cee349c4cc7.svg
記念カキコ: https://kakeru.app/12ad765036c6aba14c1cfa72a7b40e57
書き込みができない人にはツールバーの余計なボタンなどを見せないようにもした
ここ数日、ちまちまやっていた作業がやっと一段落した
次は、自分が書いた絵の一覧を実装しようかな
せっかく認証関連でやってきたわけだし
その他の細かいコードの修正とか、リファクタとかいろいろ
タイトルの編集周りがたびたび少しずつバグっているのも落ち着いた
Firestoreのセキュリティルールは、試行錯誤を経てようやく望む挙動をするようになったと思う
Webのコンソールからルールの設定を編集できるんだけど、そのエディタがなかなか良くできている
型推論が行われているっぽい
シンタックスエラーはもちろんのこと、関数が未定義の場合などもエラーがちゃんと出る
2020-05-15
@emotion/styledをstyled-componentsに置き換えた
emotionは全体的に気に入っていたものの、一つ不満な点があった
スタイルシート内で${SomeComponent} > { color: red; }のように別のコンポーネントを参照しようとすると、babelのプラグインが必要になる
Kakeruの開発ではtscを使っておりbabelは使っていないので、そのためにわざわざ導入するのは重すぎる
styled-componentsではbabelプラグインはいらない
将来emotionでもbabelプラグインが不要になったら戻るかも
emotionとstyled-components
2020-05-11
久しぶりの更新
2月から今まで少しずつちまちま開発していたものの、たいしたことはやってなかった(と思う)
ログインを実装したり
ログインを実装するために既存のコードに手を加えたり
設計に納得がいかずに二転三転してた
昨日くらいでようやく固まった気がする
今日はFirestoreのセキュリティルールを設定した
アクセス制限の設定のための布石
一瞬書き込みができなくなり焦った
2020-02-17
Pointer Eventsという、マウスイベントとタッチイベントを統合したようなやつがあることを知った
以前見たもののオワコンな雰囲気を感じた記憶があったけど、どうも一度標準化に失敗していたらしい
タッチイベントとは独立に設計されたような感じで、イベントのインターフェースはMouseEventを継承している
マウスイベントにマルチタッチのための情報やその他のメタデータを含めた感じ
軽く試してみた
簡単に使えて良い
マウスとタッチの両方のイベントを扱わなくて良いので楽
ただ、iPadで少しパフォーマンスが落ちている印象を受けた(気のせいかも)
とりあえず今は問題なく動いているし、まだ導入しないことにした
ツールとパームリジェクションのon/offを、永続化した
特にパームリジェクションは、一度ONにしたらずっとONが維持されてほしいので開発者としても嬉しい変更
2020-02-16
線を描いている間は描画結果をキャッシュするのをやめた
キャッシュするコストのほうが大きいことが分かったため
具体的には、getImageData, putImageDataの呼び出しが結構時間がかかる
見えるパスだけ描画するを実装した
iPad OSでApple Pencilを使って描いたときの不具合を修正した
2つあった
(1) 空のパス(正確には1点だけで構成されるパス)が生成されることがあった
(2) まれにパスの最後の方に1点だけおかしな点が入ってしまうことがあった
2つとも、タッチイベントを扱っているのにマウスイベントも発生しているために起きていたバグだった
(1) は具体的には、Apple Pencilで短い時間だけ画面に触れていた場合に、ペンが画面を離れた後にマウスイベントが発生したことが原因だった
touchendの直後にmousedown, mouseupが起きるため、描いた直後に1点だけを含んだパスが追加されてしまった
そもそも1点だけを含んだパスは描画できないはずなので、2点以上ないとパスとして扱わない、すなわちmousemoveを伴わないマウスイベントは無視するということにした
(2) は具体的には、touchstartとtouchendの間にmousemoveが発生していた事が原因だった
Kakeruはマウスとタッチの両方に対応しているので、マウスイベントも処理してしまう
touchstartが発火したときにフラグを立てて(touchendで下ろす)、そのフラグが立っている間はmousemoveを無視するようにした
この現象が稀にしか起きないため、原因を探るのが大変だった
今までiPad OSではMacに接続しない限りブラウザのコンソールが見えないと思っていたのだが、Chromeではchrome://inspectを開くとコンソールの出力を見ることができるので無事にバグを直すことができた
2020-02-15
線を描いている途中または消しゴムで消している途中は、キャンバスに表示されているものをできるだけキャッシュするようにしてみた
線を描いている間は描画結果をキャッシュする
iPadでパフォーマンスを計測していないので効果があるかはわからない
一筆書きで長い線を描く場合は有効そう
文字のように短い線をたくさん描くケースだと、見えるパスだけ描画するをやらないとだめな気がしてきた
Firestoreのデータ変更通知の処理が非効率的になっているのもパフォーマンス低下の一因かも
2020-02-09
undo/redoを実装した
正確には昨日で、内部実装の話だけど
今までパスを配列に入れていたのを、Mapに入れるようにした
理由としては、IDをキーにしておくことであるIDのパスが存在するかどうかを手軽に確かめられるため
Mapオブジェクトは挿入順も覚えてくれるそうなので、順番の問題も起きない
2020-02-04
Firebase版を公開した
流れとしては
新しい画像サーバーを一旦、古いサーバーへのプロキシにする
i.kakeru.appの向き先を新しいサーバーに向ける
古いバックエンドにあったデータをFirebaseに移動する
しばらくの間は、古いバックエンドに飛んできたデータを定期的にFirebaseに移し続ける
Firebaseに対応したフロントエンドをデプロイして、画像サーバーもFirebaseを見るようにする
2020-02-03
Yarn2に移行してみた
2020-02-02
バックエンドをFirebaseに変えてみるのを実験していた
2020-02-01
メニューを追加した
画像をサーバーから返すときにmax-ageを設定してみた
2020-01-28
データを読み込んだときのスクロール位置を調整した
2020-01-27
ズーム機能を実装した
無限のスクロールバーを実装した
とりあえず常時表示してみたけど、スクロール中だけ表示したほうがいいかもなぁ
2020-01-25
リファクタした
2020-01-24
ページのタイトルにノートの名前が表示されるようにした
描画のコードをReactコンポーネントから切り離してみた
2020-01-19
パスにIDをつけるのを実装した
これ単体では使用上の変化はないけど、差分保存ができるようになり、共同編集やundo/redoが可能になる
その勢いで差分保存と共同編集を実装した
1つの絵に、複数人で同時に書き込める
もう少し改善の余地があるけど、概ね良い感じ
具体的には、リアルタイムで受け取れなかった変更を反映させる
2020-01-18
タイトルが編集できなくなっていたのを修正した
パスの角と端点を丸くしてみた
2020-01-17
SVGの代わりにcanvasを使うが一通り終わった
たまにペンで書いた線がおかしくなる問題は未解決
2020-01-13
SVGの代わりにcanvasを使うことにして、描画部分をcanvasで書き直してみた
ついでに間に挟まっていた余計なレイヤーを外し、可能な限り高速に描けるようにしてみた
新しいパスを描いている間は、Reactのstateは一切更新せず、canvasに描き続ける
一瞬Reactをやめようかと思ったがcanvasを直接触ることでReactでも十分高速に描けそう
他のUIでReactが便利なので、やめなくてよかった
とりあえずペンで線を描いて保存するところまではできた
消しゴムが未実装
ペンで書き終えたときに、線の末端がおかしくなることがある
React hooksのdependenciesの管理が辛くなってきたので、eslintのプラグインで足りない値があると警告が出るようにした
便利
eslint、ちゃんとTypeScriptでも使えることを初めて確認した
設定を少しずついじっていきたい
個人的に満足の行くMVPまでもう少しじゃないかな
2020-01-10
Reactでリプレースした
スクロールをスクラッチで実装し直して、上下左右に無限にできるようにした
画像出力とかスクロールバーとかまだいろいろおかしいところもあるけど、これから実装していく
パフォーマンス改善した
Twitterで報告があった問題が多分解決した
パームリジェクション、一時期壊れてたかもしれないけどもう直ったはず
2020-01-02
簡易的なパームリジェクションを実装してみた
https://gyazo.com/57683938f3cb0bf511c6e5b51256f843
とりあえず適当に作ってみたけど、まだいろいろ課題ありな感じ
2020-01-01
あけましておめでとうございます
ページのタイトルにノートのタイトルを含めるようにした
2019-12-31
WebアプリのURLと画像のURLから/p/を取った
描く画面が https://kakeru.app/:id で、画像が https://i.kakeru.app/:id.svg
ついでに404ページも追加した
想定したパターン以外のパスに対して表示される画面
存在しない絵のページにアクセスした場合は、まだ何も起きない
2019-12-29
リリースノート書き始めた(昨日の分から)
消しゴムが正常に動作しないバグを修正した
タッチスクリーンでペン以外のツールを使えるようにした
2019-12-28
画像出力機能を作ってみた
画像として出力する
とりあえずSVGだけ
https://i.kakeru.app/p/:id.svg のようなURL
pいらないかも
URLからpを取る
取った
https://i.kakeru.app/:id.svgになった
こんな感じ↓
https://i.kakeru.app/a70455ea28beeca088da09fe5a5292bd.svg https://kakeru.app/a70455ea28beeca088da09fe5a5292bd