FacebookのOSSとかFB内部版とかについてメモ
FacebookのOSSについてRelayとかReact Nativeは割とIssueなど見たりしてきた。 その結果、それらにはどうやらFB内部版とOSS版があるんだなあといつしか思うようになった。
そう思うに至った会話すべてをあげつらうことはできないけど、いくつか記憶に残ってたり調べたりした結果出てきたものをメモしておこうと思った次第。
React NativeはOSSのものをそのままFacebook内部で使っているわけではない(※)
We use different Image and caching modules internally - - https://github.com/facebook/react-native/issues/9581#issuecomment-287834859
※と書いたのは、下記の記事には「OSSと全く同じものを使っている」と書いてあったりするから。ただ日付としては上記のIssueの方が新しい。全く同じものを使っていたらImageモジュールは別なの使っているとは言わないから、やっぱ別なのかなって感じ。
Facebook engineers use the exact same React Native code you see on GitHub; we don’t have a fork of the codebase. -- React Native: A year in review - Facebook Engineering
RelayもOSS版とFacebook内部版に違いがあるぽい
there is an issue with the OSS compiler -- https://github.com/facebook/relay/issues/1656#issuecomment-303007406
Relay Classicの時は割と顕著だった:
Relay was built to support server-side rendering, and we are doing so internally at Facebook. @voideanvalue gives a great overview of how that works. However, the necessary hooks and APIs are not exposed in the OSS release. --https://github.com/facebook/relay/issues/136#issue-102433255
We have one failing test in OSS which doesn't fail internally. -- Fix OSS-only test failure in RelayGraphQLMutation · Issue #1065 · facebook/relay · GitHub
Relay、Classicの時すでに数々の欠けていた機能、SSRやオフライン対応、サブスクリプションがFB内部の実装では使えていたぽい。これを見ると"in OSS"と新機能欄に書かれている。
FBにはでかいモノレポがある
So this is due to Facebook internal infrastructure. The code they have internally (React, React Native, Metro) sits in a big mono repository. That said, all packages are always coupled to its master version.
— Mike Grabowski (@grabbou) 2018年4月4日
Github, on the other hand, is always pinned to a specific version.
Facebook中の人によるとレポジトリ2つしかないぽい
90%+ of devs work in one of two repos (one with all our web code, one with most everything else)
— Sophie Alpert (@sophiebits) 2018年6月6日
まあこんなツールも作ってるしね
他
FWIW at Facebook we don’t have these problems because there’s a single giant monorepo. Of course that only works if you build a lot of tooling around it.
— Dan Abramov (@dan_abramov) 2018年5月15日
感想
React Nativeでは画像のキャッシュ調べてたときは「その内部で使われてるモジュール公開してもらえると嬉しいです」と思ったり「使ってないからメンテされないのか」みたいな納得をした。Relayについては client schema はやはり内部的には困ってないのかあ(内部では使えてる実装があるから)みたいなことを思った。
最後に
詳しい方や、OSS版と内部版の関係について書かれているドキュメントを知っている方がいれば教えてもらえたら嬉しいです。
一括ダウンロードがないページで無理やり全部ダウンロードするchrome console スニペット
プロローグ
一括ダウンロードしたいけど一括ダウンロードボタンがない時がある。 ログインが必要ない画面だったらwgetなりで引っ張ってくればいいんだけど、管理画面とかだとちょっとしたそういうのがめんどくさい。 chrome consoleからやればページさえ開けていれば一括ではないけれど自動化できるのでそうすることにした。
コード
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)) const links = $$("任意のセレクター, a要素を選択") for (const link of links) { link.click(); await sleep(3000); console.log(link) }
sleepは状況に合わせて適当に時間を。for...of
を使ったのは、forEach
とかmap
内では非同期処理ができなかったから。
例
papertrailのlogダウンロードならこんな感じ
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)) const links = $$("#archives-list > ul > li > span > a") for (const link of links) { link.click(); await sleep(3000); console.log(link) }
他
セレクターもchrome consoleで簡単にとってこれる
余談
最近暑くね
React Native (iOS)で電話番号のリンク
Androidはまた別ぽいけどiOSだけ対応でざっくりやるならこんな感じ
<View> <Text style={{textDecorationLine: 'underline' }} onPress={() => { // <actural phone number>は実際の番号で置き換える const url = 'tel:<actural phone number>' Linking.openURL(url).catch(err => console.error('An error occurred', err)); }} > 電話をかける </Text> </View>
Linking
コンポーネント使ってtel:nnnuuuummmm
形式のurlひらけば良い
メモ: GitHubにpush/pullする時に毎回SSH key使うためにパスワード入れないといけない問題
極たまに設定が必要な状況になって毎回調べてる気がするのでメモ これ:
Generating a new SSH key and adding it to the ssh-agent - User Documentation
読書メモ: Learn You Some Erlang for Great Good!: Introduction
はじめに
個人の話
並列処理という言葉自体がもつ魅力、そしてたまに聞く噂話が積み重なって、とうとうErlangへの好奇心を抑えきれなくなった。2017年も最後の日にしてErlangについて学び始めた。2018年も最初の日にしてLearn You Some Erlang for Great Good!を読み始めたのでその記録を残そうと思う。
Learn You Some Erlang for Great Good!について
邦訳では「すごいErlangゆかいに学ぼう! 」という題で出版されている。
- 作者: Fred Hebert,山口能迪
- 出版社/メーカー: オーム社
- 発売日: 2014/07/04
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る
英語版はIntroduction | Learn You Some Erlang for Great Good!で読める。今回はこれを読んでいく。
読書メモ
(メモだから主観も含まれるし翻訳じゃないよ)
http://learnyousomeerlang.com/introduction#about-this-tutorial
So what's Erlang?
- Erlangは関数型言語。しかし現実の問題に即して実用的なアプローチを取る。すなわち、参照透過性やデータのimmutabilityといった関数型言語の原則は適宜破られる。
- 同時に多数のタスクを処理するために、ErlangはErlangはアクターモデルを採用している。アクターはそれぞれVM上の独立したプロセス (注: 他資料によるとOSのプロセスとは異なる)
- プログラマーは、互いにメッセージの受け渡しをしない限り他のコードとは情報を共有しないアクターを書くことが求められる。
- Erlangは言語レベルでアクターモデルを使うように設計されているが、それだけではない。Erlangは全体として開発環境であり、compiler, debugger, profiler, test framework), the Open Telecom Platform (OTP) Framework, a web server, a parser generator, and the mnesia database, a key-value storage systemといったものを含む
- 他、Erlangの一般的な方針として "Let it crash" がある
Don't drink too much Kool-Aid
曲作り ゲームの町っぽいの
昔作ってあったやつ 昔のゲームの町っぽいやつ作りたいなーと思って作った。 最後のところ、和音全部入れてるけど1個抜かしてもいいんじゃないかなーって思ってる。どうだろう。
Elmについて少し調べた
Elmのドキュメント冒頭から俺の脳内で型エラーが起きそう
— 𝕿𝖆𝖎𝖐𝖎.𝕿 (@taiki__t) December 16, 2017
> Elm is a functional language that compiles to JavaScript. It competes with projects like React as a tool for creating websites and web apps.https://t.co/icz36FfdHe
なんで言語がReactと比べられるんや???みたいな
Elm: Concurrent FRP for Functional GUIshttps://t.co/dudEOLcFDB
— 𝕿𝖆𝖎𝖐𝖎.𝕿 (@taiki__t) December 16, 2017
ざっと読んだ。なるほどね。成り立ちと目的からしてview層とアーキテクチャを含むのは当然なわけか。Wikipediaに書いてあるElm is a domain-specific programming language てのがしっくりくる感