サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
gfx.hatenablog.com
追記: Apollo Boost は Apollo Client に統合される見込みのようです。Apollo Client 3.0 Roadmap · Issue #33 · apollographql/apollo-feature-requests · GitHub TypeScript用のGraphQL clientであるところの Apollo ですが、これのGet Startedなどのドキュメントでは apollo-boost というパッケージを使っています。 www.apollographql.com しかし、 apollo-boost はサンプルコードをシンプルにするための apollo-client などのラッパーと考えたほうがよく、プロダクションコードでは apollo-boost ではなく apollo-client および関連モジュールを直接使うほうがいいです。 以下理由
追記: Terser v3.10.11 でこの問題が修正されていることを確認しました。現在は collapse_vars: false というワークアラウンドは不要になりました。 webpackのproduction buildの話です。 Reactが悪いわけではないんですが、たまたま秘孔をつくコードがReactないし関連するReact v16に依存するライブラリにあったんでしょうね。 Reactをv16にアップグレードしたら webpack で production build ができなくなった pluginを着脱しながら調べた結果、 uglifyjs がクラッシュしていることがわかった uglifyjs は現在 オリジナル + 2つのforkがあり、すべてで再現する original: https://github.com/mishoo/UglifyJS fork 1: https:/
Sider社の開発する Querly を使うと「歴史的経緯の説明」をコード化できるよという話です。 Querlyの話は以前も書いたことがあります: プロジェクト固有のルールを指定できるLinterであるところのQuerlyがめちゃ便利 - Islands in the byte stream Querlyは便利で可愛いやつなんですが「価値がわかる」ところに到達するのが難しいツールなので(ぼくなんて2年かかってようやく理解できましたからね!)、もうちょい公式ドキュメントがわかりやすくなるといいな〜と思いますね。あと querly init がほしい。
ある特定のファイルのテストカバレッジが、ある特定のテストファイル(群)を実行したときに一定のカバレッジ率であることを保証したいと思うことはありますか?私はあります。 そこで、 次のような spec/coverage_helper.rb を用意して、 spec/rails_helper.rb などから require すると、 COVERAGE_ASSERTION=app/models/ability.rb rspec spec/models/ability_spec.rb:99 のようなコマンドをCIで実行したときに一定のテストカバレッジ以下のときにCIがコケるようにしました。 # frozen_string_literal: true class CoverageAssertion class CoverageAssertionFailure < StandardError end at
https://github.com/soutaro/querly Rubyを構文解析したASTに対して独自DSLでパターンマッチ&メッセージを出すツール プロジェクト固有の事情に配慮したLinterとして使える false positive 上等で注意喚起として使う たとえばKibelaの querly.yaml から一部抜粋するとこんな感じです。 rules: # ... - id: kibela.order_by_string pattern: - "order(:dstr:)" - "where(:dstr:)" - "find(:dstr:)" - "exists?(:dstr:)" message: "文字列によるSQL構築は本当に必要ですか? SQL Injection を引き起こさないように気をつけてください。" - id: kibela.block_call patter
1行で 「特定の場合でバージョニングしなくても対応できることはある」程度なので、「バージョニング不要」とは言わないほうがよい どういうことか RESTful API から GraphQL へ、GraphQL から別の Web API systemへ、ということを考えると大きな意味でのバージョニングは必要 e.g. 実際にGitHub は GraphQL API を "API v4" と呼んでいる 細かなレベルのバージョニング、たとえば1画面の仕様が微妙に変わるたびに /foo, /foo_201807_1, foo_201807_2 みたいにどんどん特定画面専用APIを定義していく、みたいな意味でのバージョニングは不要 fieldの追加は無造作に行ってよい RESTful APIでもfieldの追加は普通はできる、ただし負荷に注意 重いcomputed fieldの場合でも、GraphQL
DX: Developer Experience (開発体験)とは、あるシステムを「気持ちよく開発・保守できるかどうか」を示すもの 開発者は開発・保守という行為を通じたそのシステムのユーザーであり、DXはUXの一種である DXがよいと日々の開発を楽しめるようになり、気持ちに余裕ができる 気持ちの余裕がでるとコードの品質があがり保守時のデグレも減らせる また、DXがよい事自体がDXを高める動機になり、正のスパイラルを見込める つまり、「定められたタスク」(=義務)以上のことを行うようになる DXが悪いと開発を楽しめず、「定められたタスク」以外のことをしたくなくなる DXは放置すると悪化するので、「DXがよくも悪くもない」プロダクトは時間が経つに連れ「DXが悪い」になる なので積極的にDXを良くしていく活動を奨励していくのがよい いくつか興味深いフィードバックがあったので記しておきます。 DX
最近、Kibelaのtslint configの Rule: array-type を "generics" にしました: + "array-type": [ + true, + "generic" + ], 以前は特に指定しておらず、 T[] と Array<T> が混在してていて、それでよしとしていました。今でも、混在することによるデメリットは特にないと思っていいます。ただ、 Array<T> には一つだけメリットがあったのでこちらに統一することにしました。 autofixできるので、エディタ上では T[] と書いて保存時にtslintに Array<T> に直させるということができるため、導入のデメリットがないというのも大きいです。 さて Array<T> のメリットは、 ReadonlyArray<T> に直しやすいということです。 ReadonlyArray<T> は Array
scrapbox.io graphql-ruby の知見をまとめはじめた。 / “GraphQL for Ruby” https://t.co/PqotLzAdtV— FUJI Goro (@__gfx__) 2018年6月10日 なんで graphql-ruby 限定かというと、graphql-ruby はいくつかの独自機能(e.g. complexityベースのAPI制限)があったGraphQL schemaをまったく知らなくても開発できたり、と、他の言語(特にJS)とは開発体験がだいぶ違いそうだからです。— FUJI Goro (@__gfx__) 2018年6月10日
追記(2019/03/18): yarn-toolsからyarn-deduplicateが独立して使いやすくなり、 --strategy でdedupeの方法を選べるようになっています。タイトルも変更しました。 yarnpkg(1) を使って依存関係を管理しているとき、 yarnpkg upgrade-interactive は対話的にライブラリのアップデートができるので大変便利です。しかし、これを実行すると yarn.lock に不必要に重複エントリが作られることがよくあります。 nodejsで実行するケースでは重複があっても問題がないことが多いのですが、 クライアントサイドでは重複があると単純にファイルサイズが大きくなり。また、@types/* や react, jquery といったフレームワークはどの環境でも動作に問題が出たりするので、重複エントリは問題です*1。そこで今までは、
追記(2019/08/23): https://github.com/nodejs/node/issues/19214 によると、将来的にはfull-icuビルドがデフォルトになりそうです。 gfx.hatenablog.com 上記エントリの続きです。 その後調べた結果、 full-icu というNPM moduleでfull-icu相当のデータをインストールできることがわかりました。 https://github.com/unicode-org/full-icu-npm 中身については精査していませんが、 unicode-org が提供しているものなのでそれなりに信頼できるでしょう。 このモジュールをインストールすると node-icu-data-path(1) が提供されるので、それで得たパスを NODE_ICU_DATA 環境変数にいれるとnodejsの Intl APIで日本語を
www.htc.com 発売日に買って2週間ほど使ってますが、非常に快適です。 ここ1年で Android Z4 ⇢ Huawei P9 Lite ⇢ HTC U11 と変えてきましたが、一番ストレスフリーかもしれないです。シムフリーだし*1、変なビルトインアプリはあまり入ってないし*2、指紋認証がついてるし*3、Felica もついているし*4、USB debugも有効にできます*5。今のところ気になるのは、ボトムナビゲーションのホームボタンが指紋認証デバイスとかぶせているせいで独自実装なのがちょっと慣れないと使いにくいのと、ボトムナビゲーションにあるはずのIME切り替えボタンが存在しないのが不便だということくらいです。 Felicaと指紋認証のついているシムフリーのハイエンドAndroid端末というのがなくて困っていたわけですが、HTC U11は今のところ申し分のない出来です。よかった
IntlというのはECMAScript Internationalization APIのこと ECMA-402 として標準化 Intl - JavaScript | MDN NodeJSでも利用可能だが、ビルドオプションによって様子が変わる NodeJSのICUサポートは none, system-icu, small-icu, full-icu というオプションが用意されている https://nodejs.org/api/intl.html 公式バイナリのオプションは small-icu で、これは英語だけをサポートしている 起動時にICU dataを与える事も可能 この情報は node -e 'console.log(process.config.variables)' で調べられる Intl によってI18N処理をするときに日本語サポートをしたい場合、3つの選択肢がある full
Rails Developers Meetup 2018 (#railsdm) で話した資料です。Railsの話はほとんどなくて、全文検索の仕組みとスコアリングについてのまとめが主です。 Q&Aシステムでの質問もここで回答します。 Q. データの同期はどうされていますか? 同期はActiveRecordのcallbackでActiveJobに更新jobを投げる形で非同期で行っています。また、データ構造などの更新がある場合にindex再構築するときのためのblue-green deployment用のバッチがあります。 Q. 何かgemを使われていますか?使われているなら、どんな選定理由ですか? いまはelasticsearch-railsを使っていますが、このエントリの後半にあるような理由で捨てようと思っています。移行先はまだ決めていません。 Q. 辞書を作ったりしていますか? Amazo
elasticsearch-rails はElasticsearchとRails / ActiveRecordのインテグレーションをしてくれるgemです。 こいつを使っているとき、 特定条件下でモデル同士を比較するテストがコケるようになる という現象に悩まされてきました。pryなどで確認しても、たとえば model_a がes-railsからの返却値であるとき、 model_a == Model.find(model_a.id) がコケるのです。これはクラスのリロードがうまくいっていないからではという示唆を得てSpringを切ると、たしかに再現しなくなりました。そこで elasticsearch-rails を調べたところ、 Elasticsearch::Model::Registry がモデルクラスのインスタンスを保持しているようでした。 Springのドキュメントにも触れているとおり、
Elastic社の @johtani さんに教えてもらったんですが、たとえば Elasticsearchのドキュメント(たとえばFunction Score Query )をみて不足があるなーと思ったとき、Edit リンクからGitHubの該当ページを直接開けるので即pull-reqを作れます。 あとはCLAにサインして数日待つとレビューを経てマージされたりされなかったりします。 実例: [document] s/logarithm/common logarithm/ by gfx · Pull Request #28821 · elastic/elasticsearch
DroidKaigi 2018 に参加して発表してきました。 今回はDroidKaigiということでクライアントサイドの視点から解説しています。よって、サーバーサイドの実装についてはまったく触れていません。サーバーサイドの実装については以前発表をしたことがあるのでそちらもどうぞ。 RejectKaigi 2017で「GraphQL on Rails」という発表をしました - Bit Journey's Tech Blog 今回のDroidKaigiはday 1で当日スタッフとして司会もしましたし、個人的にもDroidKaigi Prelude というイベントをするなどして思い出深いkaigiになりました。また来年もできるといいですね。
まあ、分かってしまえばなんということはないんですが、結構面食らいますね。 This sure isn't what I would have expected. pic.twitter.com/wNQ0CkycUn— Andy Hall (@fenomas) January 23, 2018 MDNにはちゃんと書いてありました。 Array.prototype.map() - JavaScript | MDN (callback) is not called for missing elements of the array (...) Due to the algorithm defined in the specification if the array which map was called upon is sparse, resulting array will also be
追記: backports v3.11.0の時点ではstruct/new.rbの冒頭に変なputsがあるなど使われている形跡がありません。またフィールド名を予約語にすると使えないという問題もありました。一旦自前のmonkey patchを使うことにしてます。 NEWS-2.5.0 - Documentation for Ruby trunk Struct.new takes keyword_init: true option to initialize members with keyword arguments. [Feature #11925] これですね。 こんな感じのモンキーパッチでいけそうです。 # frozen_string_literal: true # Backport Ruby 2.5's `keyword_init: true` module Ruby25StructE
Kazuho's Weblog: git blameでプルリクエストの番号を表示する をみて、vscodeとかIntelliJ IDEAのpluginないかな〜と思っていたら、IntelliJ IDEA用にはすでにありました。インストールして数週間使っていますが、git blame を眺める機会が激減していい感じです。ぼくはIDEやeditorにはプラグインを最低限しかいれない派なんですが、これは便利なので "最低限のプラグイン" に入りそうです。 plugins.jetbrains.com 作者は @shiraj_i さんで、ソースコードも公開されてます。 github.com
三行まとめ 保育所*1の電子化データは提供元によってファイル形式もデータの構造も異なるためプログラムで加工しにくい 東京都の場合、認可保育所一覧はそれぞれの区が管理しており探すのが大変 保育所のデータはプログラムで加工しやすい統一されたフォーマットで提供してほしい 保育所データの現状 保育所を検索するAndroidアプリでも作ってみるかなと思って保育所のデータを探しているのですが、いまのところプログラムで簡単に加工できるデータを見つけられていません。 たとえば、東京都の場合、代表的な保育所の種類としては「認可」「認証」「認可外」などがあります。 認可保育所の一覧は23区などの自治体が提供しているため、それぞれの区のサイトを探す必要があります。 たとえば港区と目黒区をみるとこんな感じです: 港区: http://www.city.minato.tokyo.jp/kodomo/kodomo/k
キャリア Bit Journey(as エンジニア)とSpeee(as 技術顧問)は引き続き スタートアップでサービス開発するのは学びがあってよい 技術顧問業は難しい。成果はあったりなかったりする 35歳になった 2017年の初頭に 定年説をめぐって — 1. ミームの濫用 – To Phantasien *1 を読んでキャリアについて考えた ぼくはこれを「35歳定年説は捨てていいとして、その後50代や60代を見据えたキャリアプランを真面目に考えるべきでは?」という話だと解釈した 自分に関して言うと、まだ Plan B(≒ プログラマ以外の職種)は考えられないが… 子供が産まれた 家事と子育てに割く時間が非常に大きい これは好むと好まざるとに関わらず、キャリアに対する影響は大きい 時間もそうだが、家事と子育てで疲労がたまることにより他のことをする気力がなくなるという問題もある 結果、子供が
GraphQLって用語が分かりにくいんですよね…ということで社内用に作った用語集を公開しておきます。 GraphQL http://graphql.org/ グラフキューエル query language リクエストのフォーマットがGraphQLということ レスポンスはJSON(でもMessagePackでもなんでも) GraphiQL https://github.com/graphql/graphiql グラフィクル GraphQL用のAPIコンソールというかAPIエクスプローラとかそういう類のもの 補完のサポートを受けながらqueryを書けるので "GraphQL IDE" とも呼ばれる 実体はReactベースのウェブアプリ(フロントエンドアプリ) graphiql-rails はこのフロントエンドアプリをRails Mountable Engineとして扱うためのgem GitHu
https://caniuse.com/ というサービスがあって、ブラウザごとのJSやHTMLの機能を調べられる(caniuse = Can I use X?) 超便利なサービスなのです。 自分のいるリージョンなども登録できて、ある機能を利用できるユーザーのシェアを数字でみられます。たとえばぼくはJapanとGlobalを表示するように設定していて、こんな感じです。 これによれば、2017年12月時点だとwebpはglobalだと70%、JPだと40%程度のブラウザで利用可能というわけですね。 で、超便利サービスだし寄付できないかなと思ってちょっとサイトを眺めると、subscriptionで $1/month の寄付を受け付けるコースがあるようです。Patreonというパトロン管理サービスを利用しているようです。せっかくなのでパトロン登録してみることにしました。これにより広告がなくなったり
一時的な回避策ですが、このバグが発現する状態になったら「Chromeを再起動する」で回復するようです。このエントリを書いている時点でのmacOSの最新版は 10.13.2 (High Sierra) なので、以降のバージョンでは直ってるかもしれません。 ぼく自身はまだSierraのままなので伝聞です*1。ただTwitterのタイムラインで頻繁にこれ系の悩みを見かけて、そのたびに返信しているのでもっと知られるべきだなと思い、キーボードを叩くことにしました。 追記: Chromeのアップデートがきているときに起きやすいようですが、アップデートが来ていなくても起きるようです。 なんか、アップデートが降って来てる状態だと発生するぽいです— SHIBATA Hiroshi (@hsbt) December 19, 2017 これみんななってたのか。アップデートなくても起きるなあ。 / “High S
railsdm.github.io 発表:「マルチテナント・ウェブアプリケーションの実践」 一文でまとめると「HTTPのリクエストごと、あるいはjobの実行ごとにストレージの名前空間違うから気をつけような!!」ってのを常に意識する必要がありますって話でした。 なおElasticsearchのnamespacing v2はまさに先週の話なのですが、遅くなったというのは勘違いでした。 というのも少しだけ日付けをずらしてfuzzy searchの実験もしており、それがパフォーマンスに悪影響を与えていたようです。fuzzy searchはノイズが増えるので結局無効にすることにしたため、トータルではnamepsacing v2はnamespacing v1よりパフォーマンスがよくなっています。 またブコメでも指摘されているように、テナント横断のことをやり始めるとまたいろいろと新しい課題がでてくると思
DroidKaigi 2018 (2/8-2/9)の関連イベント*1としてDroidKaigi Preludeというイベントを企画しました。現在、参加者&LTを募集中です。 connpass.com メインセッションの「DroidKaigiセッション解説」を @shiraj_i さんと @muumuumuumuu さんといっしょにやります*2。採択されたセッション が沢山あるのでどのセッションに参加するか迷うと思いますが、それぞれのセッションの魅力を余すところなく解説してますます迷ってもらおうという企画です😝 この企画ですが、 RubyKaigi 2017のRejectKaigiのセッションで「タイムテーブル徹底解説」というものがあり *3、これが非常にすばらしかったのでDroidKaigiでもぜひやりたいと思っていたところ、 @okoysmさんと@tarappoさんがイベントの開催をや
ISUCON7 にチーム「スギャブロエックス」で参加して5位でした。 ベストスコアが29944点なので、せめてこれを最終スコアにしたかった…! チームメイト ISUCON7 勝てなかった - すぎゃーんメモ リポジトリ github.com 所感 今回は "Chair Constructor Online" という ロジックが超複雑でサーバーのCPU負荷の高いリアルタイムオンラインゲーム ということで、非常に面白いテーマでした。BigIntが核心だったのもよくて、いちソフトウェアエンジニアとして地力を試された感じでした。運営の皆さん大変おつかれさまでした。 チームとしての動きはだいたいすぎゃーんが書いたとおりなので、ほかにいくつか特筆すべきことを私の視点から書きます。 NodeJSを選んだことについて 予選とおなじくNodeJSでした。 問題設定がWebSocket + BitInt だっ
ES modulesにexport defaultってのがあるんですが、default exportのexport対象に名前が必須でないため、IDEによるコード補完と相性が悪いです。 他のところはどうしてるのかなと思って調べてみると、GoogleのTypeScript Style Guide では禁止されてました(v1.0.0, 2019/07 現在)。 https://github.com/google/gts/blob/v1.0.0/tslint.json#L40 ("no-default-export": true) TypeScript compiler coding guidelineには特に言及はないみたいですね。 https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines そもそもexport defaultは
次のページ
このページを最初にブックマークしてみませんか?
『Islands in the byte stream』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く