
Portuguese: 
Conferência de Desenvolvedores 
Firebase 2016
Esta manhã começamos
com a apresentação principal
onde todas as novas características
foram introduzidas.
Adorei o que vi.
Depois fomos até o Steve para
falarmos de analytics.
Sendo sincero, mesmo tendo
gostado da primeira,
gostei mais ainda da sua palestra.
Ele nos mostrou muitas novas
integrações com analytics.
Elas são ótimas.
Depois vocês almoçaram,
e sendo sincero, não tenho certeza,
mas não consegui achar
aqueles caras no almoço.
Não tenho certeza do que aconteceu ali.
Nós voltamos, e agora, Justin e Ali
nos mostraram como se assegurar
de que seu app tenha uma boa qualidade
utilizando o Firebase.
Somente nos deixa com uma coisa...
nós ainda não desenvolvemos um app.
Então é isso que iremos fazer
nos próximos 30 a 40 minutos.
Vamos construir um app
aqui no palco, ao vivo.
Gostamos de nos arriscar.
Se você não usou Firebase antes,

Indonesian: 
Pagi ini, acara dimulai
dengan pembicara utama
yang memperkenalkan semua fitur baru.
Saya suka yang saya lihat di sana.
Lalu kami beralih
ke diskusi Steve tentang Analytics.
Jujur saja, meski saya suka
pembicara utamanya,
saya lebih suka diskusi ini.
Dia menunjukkan
banyak integrasi baru dengan Analytics.
Itu luar biasa.
Lalu makan siang.
Jujur saja, saya tak begitu yakin,
tapi saya tak menemukan itu
saat makan siang.
Entah apa yang terjadi di sana.
Tapi kami pergi dan kembali.
Baru saja, Justin dan Ali menunjukkan
cara untuk memastikan
aplikasi kita bermutu tinggi
dengan menggunakan Firebase.
Tinggal satu hal yang kurang.
Kami belum membuat aplikasi.
Jadi, itu yang akan kami lakukan
selama 30 - 40 mendatang.
Kami akan membuat aplikasi
di panggung secara langsung.
Kami suka mengambil risiko.
Jika Anda belum pernah
menggunakan Firebase,

English: 
[MUSIC PLAYING]
FRANK VAN PUFFELEN: This morning
we started out with the keynote
where all the new
features were introduced.
I loved what I saw there.
And then we went to Steve's
talk about analytics.
And to be honest, as much
as I loved the keynote,
I loved his talk even better.
He showed us a lot of new
integration with analytics.
They're amazing.
Then you all had lunch, and to
be honest, I'm not really sure,
but I couldn't find
those over lunch.
I'm not sure what
happened there.
But then we went and came back,
and just now, Justin and Ali
showed us how you can ensure
your app is of high quality
by using Firebase.
It just leaves us
with one thing-- we
haven't developed an app yet.
So that's what we're going to
do in the next 30 to 40 minutes.
We're going to be building
an app here live on stage.
We like taking chances.
So if you haven't
used Firebase before,

Arabic: 
قمة مطوري Firebase 2016
بدأنا هذا الصباح بالمحاضرة الرئيسية
حيث تم تقديم كل الميزات الأساسية.
أحببت ما رأيته هناك.
ومن ثم ذهبنا إلى حديث ستيف عن التحليلات.
ولأكون صريحًا، بقدر ما
أحببت المحاضرة الرئيسية،
أحببت حديثه أكثر.
حيث عرض علينا الكثير من
التكاملات مع التحليلات.
إنها مذهلة.
ومن ثم تناولتم الغداء،
وصراحًة، لست واثقًا،
ولكنني لم أستطع إيجاد
هؤلاء على الغداء.
لست واثقًا ماذا حدث هناك.
وبعدها ذهبنا وعدنا،
والآن، جستن وألي
عرضوا علينا كيفية ضمان
أن تطبيقك ذو جودة عالية
عن طريق استخدام Firebase.
يترك لنا ذلك شيئًا واحدًا--
لم نطور تطبيقًا بعد.
لذا هذا ما سنقوم به خلال
الـ30 إلى 40 دقيقة القادمة.
سنقوم ببناء تطبيق
بشكل مباشر على المسرح.
نحب استغلال الفرص.
لذا إذا لم تستخدم Firebase سابقًا،

Spanish: 
Esta mañana comenzamos 
con el evento principal
donde presentamos
las nuevas características.
Me encantó lo que vi allí.
Y luego fuimos a la 
charla de Steve sobre analítica.
Y la verdad, 
aunque me encantó el evento principal,
me gustó mucho más su charla.
Nos mostró muchas nuevas
integraciones con analíticas.
¡Increíbles!
Luego todos almorzaron,
y la verdad, 
no estoy seguro, pero...
no podía encontrar 
a estos en el almuerzo.
No estoy seguro 
que sucedió allí.
Luego nos fuimos y volvimos,
y justo ahora, 
Justin y Ali nos mostraron
cómo asegurarte 
que tu aplicación es de alta calidad
utilizando Firebase.
Solo nos deja con un tema...
Todavía no hemos 
desarrollado una aplicación.
Así que eso haremos
en los próximos 30 a 40 minutos.
Construiremos 
una aplicación, aquí,
en vivo, 
en el escenario.
Nos gusta correr riesgos.
Si no has utilizado Firebase antes,

Japanese: 
今朝 基調講演で始め
あらゆる新機能が紹介されました
そこで見たものは良かったです
そうして Steve の分析の話もありました
正直言って 基調講演も良かったですが
彼の話はもっと良かったです
彼はアナリティクスとの新しい統合を
沢山見せてくれました
それらは素晴らしいです
それから皆さんは昼食をとり
正直私はよく分かりませんが
昼食中彼らが見つかりませんでした
そこで何があったかよく分かりませんが
戻ってみると 今は
Justin と Ali が Firebase を使うことで
アプリを高品質にできる方法を示しました
あと残りは１つだけで
私達はまだアプリを開発してないんですね
そこで次の 30 ～ 40 分で
それをやってみようと思います
この舞台でライブでアプリ構築をしてみます
思い切ってやってみます
ですから 皆さんが以前 Firebase を
使ったことがない場合

Korean: 
오늘 아침 우리는 Firebase의
새로운 특징을 소개하는
기조연설로 시작했습니다
그 연설이 맘에 들었습니다
Firebase 애널리틱스에 대한
스티브 씨의 강연도 들었죠
솔직히 말하면 기조연설도 좋았지만
스티브 씨의 강연이 더 좋았습니다
그는 우리에게 새로 통합된
많은 분석기술을 보여줬습니다
놀라웠어요
이윽고 점심시간이 됐고
솔직히 확신이 정말 없었어요
점심시간에 이 두 명이 보이지 않아서요
도대체 뭔 일이 있었는지 모르겠어요
본론으로 돌아와서, 저스틴 씨와 알리 씨가
Firebase를 이용해서
앱의 고품질을 유지하는 방법을
보여드렸습니다
그걸 듣고 한 가지 깨달았어요
우린 아직 앱을 개발한 적이 없다는 거죠
그래서 30분에서 40분 정도
앱을 개발하는 걸 보여드리겠습니다
여기 이 무대에서 라이브로 앱 개발하는 걸
보여드리게 되어 기쁩니다
전에 Firebase를 쓰지 않았다면

Chinese: 
2016 Firebase 开发峰会
今天早晨 
在我们的专题演讲中
我们向大家介绍了所有的新功能
我喜欢在那里看到的一切
之后 我们转到Steve关于数据分析的演讲
尽管我很喜欢其他专题演讲
对他的演讲
我得加一个更字
他向我们展示了很多
与分析有关的数据整合
非常的令人惊叹
再那之后，你吃了午饭
说实话，我不是很清楚
吃午饭期间，没有遇到什么新鲜事
我不知道是怎么回事
然后我就回来了，就在刚才
Justin和Ali向我们展示了如何
通过使用Firebase
来确保应用的高质量
有一件事情他们忘记了
就是我们还没有开发一个应用
在接下来的30到40分钟里
我们将在这讲台上，构建一个应用
我们喜欢冒险
如果你以前没有用过Firebase

Japanese: 
これは皆さんのアプリに
使うモデルになるでしょう
まず デバイスやウェブページで
実行するコードを書きます
するとデータを格納する
必要があると気づきます
そこで データベースを回転させます
それが MySQL か SQL サーバーのような
リレーショナルデータベースか
Mongo のような NoSQL データベースかは
あまり問題じゃありません
するとアプリがそのデータベースに
アクセスする方法が必要だと気付きます
そこでアプリサーバを回転させます
データベースで操作を[ 作る？] 
基本的なルートを構築します
今度はもうデータを読み書きでき
それは良いです
アプリに戻り
ユーザーが満足するコードを
記述していきます
すると思うんですね--
こんな風です 「待てよ」
「今世界に私のデータベースを
公開したと思う」
「これはあまり良くないんじゃないか」
「じゃこのアプリをどう保護するんだ？」
「だからユーザーにサインインさせて」
「それからアクセスしてよいデータだけ
認める方法が要る」
後に見ますが
この流れをスムーズにするには
大変な作業です
はい そこはできています
ではアプリに戻ります

Portuguese: 
este é provavelmente o modelo
que usa para seu app.
Você começa escrevendo um código
que roda no dispositivo
ou na página da Web.
Depois você percebe que precisa
armazenar seus dados,
então você cria um banco de dados.
E não importa se é
um banco de dados relacional
como o MySQL ou o SQL server
ou um banco de dados NoSQL como o Mongo.
Aí percebe que precisa de um jeito
para que seu app acesse o banco de dados,
então você cria um app server,
cria algumas rotas básicas
para fazer operações CRUD
no seu banco de dados.
Agora consegue ler e escrever os dados,
isso é bom. De volta ao app.
Estamos escrevendo os códigos
que farão nossos usuários felizes.
Depois você pensa... espera um pouco,
acho que acabei de abrir
meu banco de dados para o mundo.
Talvez não seja
a melhor ideia que já tive,
então como irei proteger esse app?
Então farei com que
meus usuários façam login,
depois preciso fazer com que
eles tenham acesso
a somente o que devem ter acesso.
Veremos mais tarde que dá muito trabalho
se assegurar que isso funcione bem.
Certo, já resolvemos isso.

Korean: 
앱을 위해 쓸 때 좋은 본보기가 될 겁니다
여러분은 기기나 웹페이지를
작동할 코드를 짜는 것으로
앱 개발을 시작합니다
그리고 데이터를 저장할 필요성을 깨닫고
데이터베이스를 스핀업 합니다
MySQL이나 SQR 서버 같은
관계형 데이터베이스이거나
몽고처럼 NoSQL 데이터베이스라도
전혀 상관없습니다
그럼 앱이 데이터베이스에
접근할 방법이 필요하단 걸 알고
앱 서버를 스핀업한 다음
데이터베이스를 운영 할
기본 라우터를 설정합니다
이제 여러분은 데이터를
읽고 쓸 수 있습니다, 좋아요
앱으로 돌아가죠
우리는 이용자를 만족하게 하려고
코드를 짜고 있습니다
그리고 이건 마치, 잠깐만요
제 데이터베이스를 전 세계에
공개했다고 생각해보죠
제가 생각할 수 있는
최고의 예시는 아니지만요
이 앱의 보안을 어떻게 지킬까요?
그건 사용자가 로그인하고
접근해야 하는 데이터를
그 사용자만 볼 방법이 필요하다는 거죠
이 과정을 매끄럽게 잇는 많은 작업을
잠시 후 보여드리겠습니다
좋아요, 보안 작업은 끝났고
앱으로 다시 돌아갈까요?

Spanish: 
este es el modelo 
que utilizarás para tu aplicación.
Comienzas escribiendo 
código que se ejecute
en el dispositivo o en la página web.
Luego te das cuenta que 
necesitas almacenar tus datos,
así que giras la base de datos.
En realidad no
importa si eso es
una base de datos relacional
como MySQL o SQL Server,
o una base de datos 
NoSQL como Mongo.
Entonces ves que necesitas
una manera para que tu aplicación
acceda a la base de datos,
aumentas un servidor a la aplicación,
construyes rutas básicas
que realizan operaciones
en tu base de datos.
Puedes leer 
y escribir la información,
esto es bueno.
Regresamos a la app.
Estamos escribiendo códigos
que pondrá felices 
a nuestros usuarios
Así que piensas ... 
es cómo, espera,
creo que acabo de abrir
mi base de datos al mundo.
Puede que no sea
la mejor idea que he tenido,
¿cómo voy a 
proteger esta aplicación?
Voy a hacer que mis 
usuarios se registren,
luego necesito una 
forma de asegurar que
solo tienen acceso a la 
información que deberían tener.
Vamos a ver que es mucho trabajo
asegurarnos que esto fluya.
OK, tenemos eso cubierto.
De vuelta 
en la aplicación.

Chinese: 
你的应用所使用的模型可能是这样的
一开始，你写下一些编码
在设备或者网页上运行
然后你意识到你需要储存你的数据
所以你就创建了一个数据库
是什么样的数据库并不重要
是像MySQL或是SQL服务器一样的关系数据库
还是像Mongo一样的NoSQL数据库
然后你发现你需要一个方法
让你的应用可以访问数据库
所以你就创建了一个应用服务器
你构建了一些基本路径
来运行你的数据库
现在你可以读写数据了，这很好
我们回过来看一下我们的应用
我们写下
那些让用户开心的编码
然后你想，等一下
我刚刚向全世界公开了我的数据库
这可能不是一个好主意
我要怎么确保我的应用的安全呢？
因此，我让用户登录
之后，我就得确保
他们只能访问他们可以访问的内容
之后我们可以看到
要确保一切运行顺畅
需要大量的工作
好了，我们有了安全措施
回到应用，对吗？

Indonesian: 
mungkin ini model
yang Anda gunakan untuk aplikasi.
Anda mulai dengan menulis
kode yang dijalankan di perangkat
atau di laman web.
Lalu Anda sadar Anda harus menyimpan data.
Jadi, Anda buat database.
Tak masalah itu database relasional,
seperti server SQL atau MySQL
atau database NoSQL seperti Mongo.
Lalu Anda sadar bahwa aplikasi perlu cara
untuk mengakses database,
maka Anda buat server aplikasi,
Anda buat route dasar
untuk beroperasi dengan database.
Kini, Anda dapat membaca
dan menulis data. Bagus.
Kembali ke aplikasi. Kita akan menulis
kode yang akan disukai pengguna.
Lalu kita berpikir, "Tunggu."
Sepertinya saya baru membuka
database ke publik.
Mungkin itu bukan ide terbaik saya.
Bagaimana cara pengamanan aplikasi ini?
Para pengguna saya harus wajib login.
Saya harus memastikan mereka hanya
mendapat data yang bisa mereka akses.
Nanti kita akan tahu bahwa sangat sulit
memastikan alur ini lancar.
Kita sudah bereskan itu.

English: 
this is probably the model
that you use for your app.
You start by writing some
code that runs on the device
or in the web page.
And then you realize that
you need to store your data,
so you spin up a database.
And it doesn't really
matter whether that's
a relational database
like MySQL or SQL server
or a NoSQL database like Mongo.
Then you realize that you
need a way for your app
to access the database, so
you spin up an app server,
you build some basic routes
that do [INAUDIBLE] operations
on your database.
So you can now read and write
the data, so that's good.
We're back into the app.
We're writing the
codes that our users
are going to be happy with.
And then you think--
it's like, hold on,
I think I just opened up
my database to the world.
That's maybe not the
best idea I ever had,
so how am I going
to secure this app?
So I'm going to have
my users sign in,
and then I need a way
to ensure they only
get the data that they
should have access to.
We're going to see later that
it's a lot of work to ensure
that this flow is smooth.
OK, we've got that covered.
So we're back in the app, right?

Arabic: 
هذا على الأرجح النموذج
الذي تستخدمه لتطبيقك.
تبدأ بالبرمجة التي تعمل على الجهاز
أو في صفحة الويب.
ومن ثم تدرك أنه يجب عليك
أن تخزن بياناتك،
لذا تبني قاعدة بيانات.
ولايهم فيما إذا كانت
قاعدة بيانات ارتباطية
كـMySQL أو SQL server
أو قاعدة بيانات غير ارتباطية
NoSQL كـMongo.
ومن ثم تدرك أنك بحاجة لطريقة لتطبيقك
ليصل لقاعدة البيانات، لذا
تبني خادم للتطبيق،
تبني بعض المسارات الأساسية
التي [غير مسموع] عمليات
على قاعدة بياناتك.
لذا بإمكانك الآن قراءة وكتابة
البيانات، هذا جيد.
عدنا للتطبيق.
نقوم بكتابة البرمجة
التي ستسعد مستخدمينا.
ومن ثم تظن--
إنه أشبه، انتظر،
أظن أنني فتحت قاعدة بياناتي للعالم.
هذه على الأرجح ليست
أفضل أفكاري،
لذا كيف سأؤمن هذا التطبيق؟
سأدع المستخدمين
يسجلوا دخول،
ومن ثم أحتاج لطريقة
لضمان أنهم يحصلون
فقط على البيانات
التي يجب أن يصلوا إليها.
سنرى لاحقًا أنه عملٌ كبير لضمان
أن هذا التسلسل يسير بسلاسة.
حسنًا، غطينا ذلك.
لذا عدنا إلى التطبيق، صحيح؟

Arabic: 
نقوم بكتابة هذه الميزات.
يحب الناس التطبيق، أعتقد.
ماذا لو أضفنا القدرة
على رفع الملفات
للتطبيق، صحيح؟
سيكون الأمر مدهشًا.
والأمر رائع لأننا سنصبح
الـSnapchat التالي.
الأمر أشبه، لا انتظر،
هذا ليس رائعًا.
سنصبح الـSnapchat التالي.
كيف سنتدبر تطوير ذلك؟
تعمل عل بنية Google التحتية،
لذا أنا واثق من أنه يمكننا
التعامل مع هكذا تطوير.
لكن خادم التطبيق
الذي وضعناه في المنتصف--
سيتعامل مع هكذا تطوير؟
لست واثقًا أبدًا، لذا في الواقع
أجد نفسي قلقًا
حول قابلية التطور كثيرًا.
وتذكر، بينما أقلق حول قابلية التطور،
لا أبني تطبيقي الفعلي.
الكثير من وقتك يذهب إلى
إدارة البينية التحتية بدلًا من
بناء المميزات التي تجعل
تطبيقك خاصتك.
يجب أن يوجد طريقة أفضل.
تلك الطريقة الأفضل هي استخدام Firebase.
إذا استخدمت Firebase،
برمجة تطبيقك

Indonesian: 
Kita kembali ke aplikasi, 'kan?
Kita akan menulis fitur-fitur itu.
Saya rasa orang suka aplikasinya.
Bagaimana jika kita menambah kemampuan
untuk mengunggah file ke aplikasi.
Itu pasti luar biasa.
Itu bagus karena kita akan
mengikuti kesuksesan Snapchat.
Tunggu, itu tak bagus.
Jika akan jadi Snapchat berikutnya,
bagaimana kita menangani skalanya?
Kita pakai Google Infrastructure.
Jadi, saya cukup yakin
kita bisa menangani skalanya.
Tapi server aplikasi
yang kita letakkan di tengah,
Apakah akan bisa?
Saya tak pernah yakin. Jadi, saya sering
mencemaskan soal skalabilitas.
Ingat, meski saya mencemaskan
soal skalabilitas,
saya tak membuat aplikasi.
Banyak waktu yang dihabiskan
untuk menjalankan infrastruktur,
alih-alih membuat fitur
yang membuat aplikasi jadi milik kita.
Pasti ada cara lebih baik.
Cara lebih baik itu menggunakan Firebase.
Dengan Firebase, kode aplikasi Anda
akan berkomunikasi langsung

Japanese: 
これらの機能を記述します
このアプリは好かれると思いますよ
例えば アプリにファイルをアップできる
機能を付けたらどうか
素晴らしくなります
次の Snapchat になるんですから
素敵です
例えば いや待てよ
素敵じゃないよ
次の Snapchat になるんだ
どうやってそれのスケールに対応する？
Google インフラで実行してるんだ
だから絶対それのスケールの対応できる筈だ
だが 中間に入れるあのアプリサーバー --
あれもスケールするか？
確信がないので スケーラビリティを
とても心配しています
スケーラビリティを心配しているうちは
実際のアプリを構築していません
時間の多くがインフラの実行に割かれます
アプリをアプリにする機能を
構築するのではなくてですね
もっと良い方法がある筈です
それは Firebase を使うことです
Firebase を使えば アプリのコードは

Korean: 
이 앱만의 독특한 특성을 갖춰야
사람들이 이 앱을 좋아할 거예요
가령 앱에 파일 업로드 기능을
추가하면 어떨까요?
놀라운 일이 되겠죠
제2의 스냅챗이 되는 건 대단한 일입니다
이건 마치, 잠시만요
제2의 스냅챗이 되는 건
대단한 일이 아니에요
앱의 규모는 어떻게 다룰까요?
여러분이 사용하는 Google 인프라로
앱의 규모를 다룰 수 있다고 자신합니다
하지만 앱과 데이터베이스를
연결하는 앱 서버의 규모는
어떻게 처리할까요?
절대 확신하지 않아요, 정말로요
전 확장성을 많이 걱정합니다
명심하세요, 확장성을 걱정한다면
실제 앱을 개발하는 게 아닙니다
앱의 특성을 만드는 게 아니라
인프라를 관리하는 데
많은 시간이 소모된다면
더 좋은 방법을 써야 합니다
더 나은 방법은
Firebase를 사용하는 겁니다
Firebase를 사용하면 앱의 코드가

Spanish: 
Escribimos esas características.
A la gente le 
encanta la app,
creo...
Es como, ¿qué tal si agregamos
la capacidad de cargar archivos
a la aplicación, ¿sí?
Va a ser increíble.
Es genial porque vamos 
a ser el próximo Snapchat.
No, espera,
eso no está bien.
Vamos a ser el 
próximo Snapchat.
¿Cómo manejaremos a esa escala?
Estás ejecutando en 
Google Infrastructure,
por lo que estoy seguro 
que podemos maneja esa escala.
Pero ese servidor de aplicación
que ponemos en el medio,
¿escalará?
Nunca estoy seguro,
así que realmente, me preocupa
mucho la escalabilidad.
Tengan en cuenta que,
mientras me preocupo por la escalabilidad,
no estoy construyendo la aplicación.
Mucho de su tiempo 
se va en ejecutar infraestructura
en lugar de construir las características
que hacen a tu aplicación, tu aplicación.
Debe haber una mejor manera.
Y esa mejor manera 
es utilizando Firebase.
Si utilizas Firebase,
el código de tu aplicación
habla directamente con nuestra

Chinese: 
我们编写了这些功能
我想人们喜欢这个应用
如果我让应用上传文件
会怎么样？
这将会非常棒
这是个好主意，因为我们
将成为下一个Snapchat
等一下，这也许不是一个好主意
我们将会成为下一个Snapchat
可是我们要怎么处理这么多的数据呢？
如果你的应用在Google Infrastructure上运行
我知道处理这种规模的应用应该没问题
但是那个放在中间的应用服务器
能处理这么多的信息吗？
我不是很确定
我发现我对可扩展性有很多的担忧
请记住，当我在担心可扩展性的时候
我没有在构建我想要的应用
你的很多时间都被浪费在了基础框架的运行
而不是构建功能
应该有更好的解决方法
更好的方法就是使用Firebase
如果你使用Firebase
你应用编码可以直接与我们

Portuguese: 
Estamos de volta no app, né?
Estamos escrevendo os recursos.
Acho que todo mundo adora o app.
Que tal se adicionarmos a opção
de fazer upload de arquivos no app?
Será maravilhoso.
É ótimo porque seremos o próximo Snapchat.
Não, espera, isso não é ótimo.
Seremos o próximo Snapchat.
Como iremos lidar com uma escala daquelas?
Você roda com a infraestrutura do Google,
então tenho certeza que conseguiremos
lidar com uma escala dessas.
Mas o app server que colocamos no meio...
ele será suficiente?
Nunca tenho certeza, então
sempre me preocupo com a escalabilidade.
E pense que, enquanto me preocupo
com a escalabilidade,
não estou construindo meu app.
Muito do seu tempo é gasto
com a infraestrutura
ao invés de construção das coisas
que fazem do seu app, seu.
Tem que ter um jeito melhor.
Esse jeito melhor é usando o Firebase.
Se você usar Firebase, o código do seu app

English: 
We're writing those features.
People love the app, I think.
It's like, how about if we add
the ability to upload files
to the app, right?
It's going to be amazing.
And it's great because we're
going to be the next Snapchat.
It's like, no hold
on, that's not great.
We're going to be
the next Snapchat.
How will we handle
the scale of that?
You're running on
Google Infrastructure,
so I'm quite sure that we
can handle the scale of that.
But that app server that
we put in the middle--
will that scale?
I'm never sure, so really,
I find myself worrying
about scalability a lot.
And keep in mind, while I'm
worrying about scalability,
I'm not building my actual app.
A lot of your time goes into
running infrastructure instead
of building the features
that make your app your app.
There has to be a better way.
That better way
is using Firebase.
If you use Firebase,
your app's code

Spanish: 
poderosa administración 
de servicios de backend.
Nos ocupamos de la seguridad
y escalabilidad,
para que te enfoques
en construir las características
que tus usuarios amarán.
Pero, ¿porqué 
me creerías a mí?
Así que hoy 
construiremos una aplicación,
y con la clásica tradición de Firebase,
va a ser una aplicación de chat.
Vamos a utilizar cinco características.
Vamos a usar Firebase Realtime Database
para almacenar y sincronizar
datos entre nuestros usuarios.
Vamos a aumentar la
habilidad para nuestros usuarios,
de registrarse
utilizando Firebase Authentication.
Y agregaremos Firebase Storage
para poder compartir estos archivos
Luego, desplegaremos
la aplicación terminada
a Firebase Hosting para que 
todo el mundo tenga acceso.
Luego, no estoy 
muy seguro porqué,
pero Thomas me dijo 
que quiere utilizar Cloud Messaging.
Más tarde tendremos 
que averiguar por qué.
Ok, son muchas características.
Empecemos 
haciendo el primero.
La base de datos 
de Firebase Database:
es la primera característica
que construímos para Firebase.

Indonesian: 
dengan layanan backend kami
yang teratur dan canggih.
Kami mengurus keamanan dan skalabilitas
agar Anda dapat fokus membuat
fitur yang disukai pengguna.
Tapi untuk apa Anda percaya
kata-kata saya saja?
Kami akan membuat aplikasi hari ini.
Dalam tradisi klasik Firebase,
aplikasinya adalah aplikasi chat.
Kami akan menggunakan lima fitur.
Kami akan gunakan
Firebase Realtime Database
untuk menyimpan dan menyinkronkan
data dengan pengguna kami.
Kami akan menambahkan
kemampuan agar pengguna
dapat masuk ke aplikasi
dengan Firebase Authentication.
Lalu kami akan tambahkan Firebase Storage
untuk berbagi file yang saya bicarakan.
Kami tempatkan
aplikasi jadinya ke Firebase Hosting
agar semua orang bisa mengaksesnya.
Saya tak tahu kenapa,
tapi Thomas bilang
ingin menggunakan Cloud Messaging.
Kita harus cari tahu alasannya nanti.
Banyak fitur. Mari mulai yang pertama.
Firebase Database.
Database adalah fitur pertama
yang kami buat untuk Firebase.

Japanese: 
私達の強力に管理されたバックエンドの
サービスに直接通信します
セキュリティとスケーラビリティは
私達が対処しますから
皆さんはユーザーが好きな
機能の構築に集中できます
でも なぜ私の言葉を信じてよいのだろうか？
それで 今日私達はアプリを構築します
そして定番の Firebase 伝統で
それはチャットアプリです
５つの機能を使用します
Firebase リアルタイムデータベースを使って
ユーザー間でデータを格納し同期させます
ユーザーがアプリにサインインできる
機能を付けるのに
Firebase 認証を使います
また Firebase ストレージを加えて
さっき話したファイルの共有を可能にします
そうしてできたアプリを 
Firebase ホスティングにデプロイして
皆がアクセスできるようにします
次に理由がよく分からないけど
Thomas はクラウドメッセージングを
使いたいそうです
その理由は後で見つけなければなりません
はい 沢山の機能です
最初のものを始めましょう
Firebase データベースですね
このデータベースは
Firebase に構築した最初の機能です

Korean: 
강력하고 잘 관리되는
백엔드 서비스에 직접 연결됩니다
보안과 확장성은 우리에게 맡기시고
여러분은 사용자가 좋아하는 특성을
만드는 데 집중할 수 있습니다
여러분은 제 강연을 왜 듣고 있나요?
앱 개발하는 걸 보기 위해서죠
Firebase의 대표적인 방법으로
채팅 앱을 만들겠습니다
여기 5가지 특징을 사용할 계획입니다
Firebase의 '실시간 데이터베이스'로
사용자 간의 데이터를 저장하고 동기화합니다
사용자가 앱에 로그인할 때
'Firebase 인증' 기능을 추가했고
앞에 언급한 파일을 공유 가능한
'Firebase 저장소'도 더했습니다
그리고 'Firebase 호스팅'으로
완성된 앱을 배포하면
모든 사람이 접근할 수 있습니다
그리고 왜인지 확신할 수 없지만
토마스 씨가 '클라우드 메시징'을
쓰고 싶다고 제게 말했는데
그 이유를 잠시 후 살펴보겠습니다
네, 많은 특징이 있는데
첫 번째 특징을 알아볼까요
'Firebase 데이터베이스'입니다
데이터베이스는 Firebase를 개발할 때
처음 만든 특징입니다

Chinese: 
强大的后台管理服务器对话
我们会兼顾安全性和可扩展性
你便可以把注意力放在构建
用户喜欢的功能上
可是你凭什么相信我的话呢？
因为今天我们要构建一个应用
以Firebase的传统
我们要构建一个聊天应用
我们要使用5种功能
我们要使用Firebase实时数据库
来存储并同步用户间的数据
我们将让用户可以
通过Firebase身份验证来登录应用
然后，我们将要使用Firebase存储
这样我们就可以分享
刚刚提到的那些文件
之后，我们将把应用的成品
发布到Firebase托管，
这样大家都可以访问它了
我不是知道为什么
Thomas告诉我，他想要使用云信息
我们之后得找出原因
好了，很多的功能
让我们开始构建第一个功能吧
也就是Firebase数据库
数据库是我们
为Firebase构建的第一个功能

Arabic: 
تتحدث مباشرة مع خدماتنا
المدارة بالخلفية القوية.
نهتم بأمر الأمان وقابلية التطور
بحيث يمكنك التركيز
على بناء ميزاتك
التي يحبها مستخدموك.
ولكن لمَ عليك أن تثق بكلامي؟
لذا سنقوم ببناء
تطبيق اليوم،
وفي تراث Firebase الكلاسيكي،
سيكون تطبيق محادثة.
سنستخدم خمس مميزات.
سنستحدم قاعدة بيانات
الزمن الحقيقي لـFirebase
لتخزين ومزامنة البيانات
بين المستخدمين.
سنضيف القدرة لمستخدمينا
لتسجيل الدخول للتطبيق
باستخدام توثيق Firebase.
ومن ثم سنضيف تخزين Firebase
بحيث يمكننا مشاركة تلك
الملفات التي تحدثت عنها.
ومن ثم سننشر
التطبيق النهائي
في مستضيف Firebase
بحيث يتمكن الجميع من الوصول إليه.
ومن ثم لست واثقًا لماذا،
ولكن أخبرني توماس أنه أراد
استخدام التراسل السحابي.
سيتوجب علينا لاحقًا
معرفة سبب ذلك.
حسنًا، الكثير من الميزات.
لنبدأ بالأولى.
قاعدة بيانات Firebase.
قاعدة البيانات هي الميزة الأولى
التي سنبنيها للـFirebase.

English: 
talks directly to our powerful,
managed backend services.
We take care of security
and of scalability
so that you can focus
on building features
that your users love.
But why would you
take my word for that?
So we're going to be
building an app today,
and in the classic
Firebase tradition,
that will be a chat app.
We're going to be
using five features.
We'll use the Firebase
Realtime Database
to store and synchronize
data between our users.
We will add the
ability for our users
to sign in to the app using
Firebase Authentication.
Then we're going to
add Firebase Storage
so that we can share those
files that I talked about.
And then we'll deploy
the finished app
to Firebase Hosting so that
everyone can access it.
And then I'm not
really sure why,
but Thomas told me he wanted
to use Cloud Messaging.
We will have to find
out later why that is.
OK, lots of features.
Let's get started
doing the first one.
So the Firebase Database.
The database is
the first feature
that we built for Firebase.

Portuguese: 
conecta-se diretamente a nossos poderosos
serviços gerenciados de backend.
Cuidamos da segurança e da escalabilidade
para que foque
em construir as características
que os usuários adoram.
Mas por que vocês acreditariam em mim?
Iremos construir um app hoje,
e pela tradição clássica do Firebase,
será um app de chat.
Usaremos cinco recursos.
Usaremos o Firebase Realtime Database
para guardar e sincronizar dados
entre nossos usuários.
Adicionaremos a opção para nossos usuários
fazerem login no app
usando Firebase Authentication.
E adicionaremos Firebase Storage
para que possamos compartilhar
os arquivos de que falei.
Depois enviaremos o app pronto
para o Firebase Hosting
para que todos possam acessá-lo.
E depois, não tenho certeza do motivo,
mas Thomas disse que queria usar
o Cloud Messaging.
Teremos de descobrir depois o porquê.
Certo, muitos recursos.
Vamos começar fazendo o primeiro.
Então, Firebase Database.
O banco de dados é o primeiro recurso
que construímos para o Firebase.

Spanish: 
En realidad, de aquí
nació nuestro nombre.
Y es una base de datos
NoSQL alojada en una nube.
Así que está alojado en una nube,
lo cuál es genial
porque todos los usuarios 
de nuestra aplicación chat
hablan a la 
misma base de datos,
muy importante.
Y es una base de datos NoSQL.
De hecho es un árbol JSON,
y si alguna vez utilizaron JSON,
sabes que es un flexible 
lenguaje de modelado de datos
Esto es genial.
Este es el modelo de datos
que vamos a usar hoy.
Así que podemos ver al principio
que tenemos un nodo llamado chat,
y bajo ese, tenemos 
una lista de mensajes de chat.
Así que para cada mensaje,
tenemos el nombre del usuario
que envío el mensaje
y el texto que enviaron.
Te puedes imaginar cómo en la aplicación
accederemos a la información
y la mostraremos, ¿sí?
Solo pedimos los mensajes
de chat y los revisamos.
Y pueden imaginar 
cómo podríamos extender
este modelo de datos
para enriquecer la app.
Por ejemplo,
para compartir archivos,
querremos almacenar una URL
para cada mensaje de chat,
y talvez queremos permitir
a varias salas de chat en la app,
así que aumentamos 
un nodo bajo la raíz.

English: 
It's actually where
we got our name from.
And it's a cloud-hosted,
NoSQL database.
So it's cloud hosted,
and that's great
because it means that all
the users of our chat app
are talking to the same
database-- quite important.
And it's a NoSQL database.
It's, in fact, a JSON tree,
and if you've ever used JSON,
you know that it's a very
flexible data modeling
language.
So this is great.
This is the data model
that we're using today.
So we can see that at the top,
we have a node called chat,
and under that, we have a
list of the chat messages.
So for each message,
we have the name
of the user that sent
the message and the text
that they sent.
You can probably
imagine how in the app
we will access this
data and show it, right?
We just request the chat
messages and look through them.
You can also imagine how
we could extend this data
model to enrich our app.
For example, for file
sharing, we probably
want to store a URL
for each chat message,
and maybe we want to allow
multiple chat rooms in our app
so we add a node under the root.

Chinese: 
也是我们名字的来源
它是一个云端的NoSQL数据库
它是通过云端托管的，这非常的棒
因为这意味着我们聊天应用的所有用户
都在使用相同的数据库
这一点非常的重要
这是一个NoSQL数据库
事实上，它是一个 JSON树
如果你曾经使用过 JSON
它是一个非常灵活的
数据模型语言
它非常的棒
这是我们今天将要使用的数据模型
我们可以看到在顶端
我们有一个节点叫做聊天
在那下面，我们有一个聊天信息列表
每一条信息
我们都会有发送信息的用户姓名
以及他们所发送的信息
你可以想象在应用中
如何访问这些数据并显示它，对吧？
我们只需要请求对话信息，然后阅读它
你可能会想象
如何才能扩展这个数据模型
从而丰富我们的应用
比如说，要实现文件分享
我们可能需要为每一条
聊天信息储存一个链接
也许我们要在应用中开通多个聊天室
这样我们就可以在根目录下添加一个节点

Portuguese: 
É na verdade de onde pegamos nosso nome.
E é um banco de dados 
hospedado em nuvem NoSQL.
Então é hospedado em nuvem,
e é ótimo porque significa
que os usuários do nosso app de chat
estão falando com o mesmo banco de dados,
o que é bem importante.
E não é um banco de dados NoSQL.
É, na verdade, uma JSON tree,
e se você j[á usou JSON,
sabe que é uma linguagem super flexível
de modelagem de dados.
Então isso é ótimo.
Esse é o modelo de dados
que utilizamos hoje.
Podemos ver que no topo,
temos um nó chamado de chat,
e sob isso, temos uma lista
de mensagens de chat.
Para cada mensagem,
temos o nome do usuário
que enviou a mensagem e o texto
que foi enviado.
Você pode imaginar
como o app acessará esses dados
e os mostrará, certo?
Pedimos as mensagens do chat
e demos uma olhada nelas.
Pode imaginar também como podemos extender
esse modelo para enriquecer nosso app.
Para compartilhamento de arquivos,
por exemplo, queremos guardar uma URL
para cada mensagem de chat,
e talvez também queremos permitir
várias salas de chat no app

Japanese: 
実は 私達の名前はそこから来ています
それはクラウドでホストされる
NoSQL データベースです
クラウドホストなので良いんです
つまりチャットアプリのユーザー全員が
同じデータベースで通信するからで-- 
とても重要です
しかも NoSQL データベースです
実は JSON ツリーです
JSON を使ったことがあれば
これが柔軟なデータモデリング言語だと
ご存じでしょう
だからこれは素晴らしいです
これが今日使っているデータモデルです
上に chat というノードがあります
その下に チャットメッセージの
リストがあります
各メッセージに対し
そのメッセージを送ったユーザー名と
テキストがあります
アプリでこのデータにどうアクセスし
それを表示するかと想像できますね
単にチャットメッセージをリクエストし
目を通すだけです
又 このデータモデルをどう拡張して
アプリを充実させるかと想像できます
例えば ファイル共有で
各チャットメッセージの URL を
格納したいとか
アプリで複数のチャットルームを
可能にしたいから

Korean: 
Firebase란 이름도 여기서 생겼죠
이건 클라우드 호스팅이고
NoSQL 데이터베이스입니다
클라우드 호스팅은 유용하죠
채팅 앱의 모든 사용자가
같은 데이터베이스에 접속하므로
꽤 중요한 특성입니다
동시에 NoSQL 데이터베이스입니다
이건 사실 JSON 트리 구조로
만약 JSON을 써 봤다면
유연한 데이터 모델링 언어인 걸
아실 겁니다
그래서 쓰기 편합니다
오늘날 사용하는 데이터 모델을 보시죠
위에 '채팅'이라는 교점이 있고
그 아래에 채팅 메시지 목록이 있습니다
각각의 메시지마다
메시지를 보낸 사용자의 이름과
보낸 문자가 있습니다
이걸 보면 우리가 앱 속 데이터에
어떻게 접근해서 보는지 상상할 수 있죠
우리는 채팅 메시지를 요청하고
받은 메시지를 읽습니다
우리 앱의 질을 높이기 위해
데이터 모델을 확장하는 방법도
상상할 수 있습니다
예를 들어 파일을 공유할 때
채팅 메시지의 URL을 각각 저장하고
앱에 채팅방 여러 개를 만들 때
뿌리와 연결되는 교점을 추가합니다

Indonesian: 
Itulah sumber nama kami.
Ini adalah database NoSQL
dengan host awan.
Ini menggunakan host awan.
Bagus karena berarti
semua pengguna aplikasi chat kami
berbicara dengan database
yang sama. Cukup penting.
Itu adalah database NoSQL.
Itu adalah pohon JSON,
dan jika Anda pernah menggunakan JSON,
Anda tahu itu adalah bahasa pemroses
model data yang sangat fleksibel.
Jadi, ini bagus.
Ini model data
yang kami akan gunakan hari ini.
Kita bisa lihat di atas,
ada node yang disebut chat.
Di bawahnya, ada daftar pesan chat.
Untuk setiap pesan, ada nama pengguna
yang mengirim pesan,
dan teks yang mereka kirim.
Mungkin bisa dibayangkan
cara mengakses data
dan menunjukkannya dalam aplikasi, 'kan?
Tinggal meminta pesan chat
dan memeriksanya.
Anda juga bisa bayangkan
cara memperluas model data ini
untuk memperkaya aplikasi.
Misalnya, untuk berbagi file,
mungkin kita ingin
menyimpan URL untuk setiap pesan chat.
Mungkin kita juga ingin
ada banyak ruang chat dalam aplikasi.
Kita tambahkan node di root.

Arabic: 
إنها في الواقع سبب اسمنا.
وهي قاعدة بيانات NoSQL،
مستضافة سحابيًا.
لذا إنها مستضافة سحابيًا،
وهذا رائع
لأن ذلك يعني أن كل
المستخدمين لتطبيق المحادثة
يتحدثون مع نفس قاعدة
البيانات-- مهم للغاية.
وإنها قاعدة بيانات NoSQL.
إنها في الحقيقة، شجرة JSON 
وإذا استخدمت JSON سابقًا،
تعلم أنها لغة نمذجة بيانات مرنة جدًا.
هذا عظيم.
هذا نموذج البيانات الذي نستخدمه اليوم.
لذا بإمكاننا رؤية أنه في القمة،
لدينا عقدة اسمها "chat"،
وتحت ذلك، لدينا قائمة
لرسائل المحادثة.
لذا لكل رسالة،
لدينا الاسم
المستخدم الذي أرسل
الرسالة والنص الذي أرسلوه.
بإمكانك على الأرجح تخيل
كيف في التطبيق
سنصل إلى هذه البيانات
وعرضها، أليس كذلك؟
قمنا بطلب رسائل المحادثة
فقط ونظرنا خلالها.
بإمكاننا تخيل كيف بإمكاننا
توسيع نموذج البيانات
هذا لإثراء تطبيقنا.
على سبيل المثال، لمشاركة
الملفات، على الأرجح
نود أن نخزن URL
لكل رسالة محادثة،
وربما نود أن نسمح
بعدة غرف محادثة في تطبيقنا
لذا نضيف عقدة أسفل الجذر.

Spanish: 
Justo como donde ahora tenemos chat,
podríamos tener "público" 
como la sala de chat.
OK, suficiente teoría.
Empecemos a construir esto.
Codifiquemos.
Este es un demo que ejecutamos
en una de nuestras laptops ahí.
Ven que tenemos 
una aplicación de web
y casi tenemos todo 
preparado para este demo.
Así que hemos construido un HTML báscio
y hemos cableado un poco de código.
Si ahora pulsamos el botón de enviar,
el mensaje se agregar a la pantalla local.
Incluso podemos seleccionar una imagen.
Y si enviamos esta imagen,
vemos una previa de la imagen
en la pantalla local.
Y terminamos, ¿verdad?
Eso es lo que piensan.
Pero en realidad, no.
Hay un gran problema con esta aplicación.
Cuando volvimos a cargarla,
toda la información se perdió
porque solo es una aplicación local.
Todo solo existe en la página web.
Cuando lo volvemos a cargar,
se pierde, y la información no
continuó en un servidor en ningún lado.

Chinese: 
就像现在我们可以聊天
我们可以在聊天室里公开聊天
好了，说了足够多的理论
让我们开始构建它吧
让我们写一些代码
好了
这是一个演示
我们使用这里的一台笔记本电脑运行
你可以看到，我们有一个网页应用
在这个演示中，我们基本上
已经做好了一切的准备
我们已经构建了基本的HTML
我们也已经写下了一些编码
如果我们现在点击“提交“按钮
信息就会被添加到本地的屏幕
我们甚至可以选择一个图像
如果我们提交那个图片
我们可以在本地屏幕上看到一个预览
我们做好了，对吗？
你可能是这么认为的
但是还没有
这个应用有一个大的问题
当我们刷新它时
所有的数据都消失了，
因为它只是一个本地的应用
所有事仅仅存在于网络页面
当我们刷新它，就都会消失
数据没有被保存到任何的服务器上

Arabic: 
فقط حيث لدينا محادثة،
يمكن أن يكون لدينا
عام كغرفة محادثة.
حسنًا، يكفي نظري.
لنبدأ فعليًا ببناء هذا.
لنبدأ بالبرمجة.
حسنًا، هذا توضيح سنجريه
على واحد من اللابتوبات هناك.
يمكنك رؤية أن لدينا تطبيق ويب،
وكل شيء نوعًا ما
جاهز لهذا العرض.
لذا بنينا الـHTML الأساسي
وربطناه ببعض البرمجة.
إذا ضغطنا الآن على
زر تسليم،
يتم إضافة الرسالة للشاشة المحلية.
بإمكاننا حتى اختيار صورة.
وإذا سلمنا تلك الرسالة،
نرى معاينة لها
على الشاشة المحلية.
الآن، انتهينا، صحيح؟
هذا ما تظنه.
إن الأمر أشبه، ليس تمامًا.
يوجد مشكلة كبيرة بهذا التطبيق.
عندما نعيد تحميله، كل البيانات
اختفت لأنه تطبيق محلي فقط.
كل شيء موجود فقط في
صفحة الويب.
عندما نعيد تحميلها، تختفي،
والبيانات لم تكن
محملة على خادم في أي مكان.

Korean: 
그럼 우리가 현재 채팅하는
대중적인 형태의 채팅방이 생깁니다
네, 이론은 충분히 설명했고
앱을 실제로 만들어볼까요
코드를 입력해보죠
좋아요, 지금 보시는 건
제 옆의 노트북에서 작동하는
데모입니다
오른쪽에 웹 앱이 있고
왼쪽은 이 데모를 만드는 모든 코드입니다
기본 HTML을 사용해서
특정 코드를 짰습니다
만약 제출 버튼을 누르면
메시지가 부분 화면에 추가됩니다
심지어 이미지를 선택할 수 있죠
이미지를 제출하면
부분 화면에서 미리 볼 수 있습니다
"이제 다 끝났어요, 그렇죠?"
이렇게 생각하실 겁니다
하지만 끝난 게 아니에요
이 앱은 큰 문제가 하나 있습니다
로컬 앱이라서 재로딩하면
모든 데이터가 날아갑니다
웹페이지에만 존재할 뿐이죠
재로딩하면 모두 사라지고
데이터는 서버 어디에도 남지 않습니다

Japanese: 
今チャットがある場所に似せて
ルートの下にノードを付けるとか
チャットルームとして公開にできます
理論はここまでにして
実際にこれの構築を開始しましょう
コードを書きましょう
これはそこのラップトップで
実行するデモです
ウェブアプリがあるのが見えます
このデモの為に万事準備してあります
基本的な HTML を作り
それをコードに繋いでいます
「送信」ボタンを押すと
メッセージはローカルの画面に
付け足されます
画像を選ぶこともできます
その画像を送信すれば
ローカルの画面に画像の
プレビューが見えます
これで終わり
皆さんはそう考えていますね
そうではないです
このアプリには１つ大きな問題があります
再読み込みすると
全データが無くなります
それが単にローカルのアプリだからです
全部はウェブページに存在するだけです
再読み込みすると無くなり
データはサーバーのどこにも残りません
そこで Firebase を使うのです

Portuguese: 
então adicionamos um nó sob root.
Assim como agora temos chat,
podemos ter public
como uma sala de bate-papo.
Tá, chega de teoria.
Vamos começar a construir isto.
Vamos escrever um pouco de código.
Então, este é um demo que estamos
rodando de um dos laptops.
Pode ver que temos um app da Web
e meio que temos tudo preparado
para este demo.
Construímos o HTML básico
e o conectamos ao código.
Se clicarmos no botão Submit,
a mensagem é adicionada na tela local.
Podemos até selecionar uma imagem.
E se enviarmos a imagem,
pré-visualizamos a imagem na tela local.
Agora, acabou, né?
É no que estão pensando.
Na verdade não.
Existem um grande problema com este app.
Quando o atualizamos, todos os dados somem
porque é só um app local.
Tudo só existe na página da web.
Quando recarregamos, tudo some,
e os dados não estão em nenhum servidor.
Aí que usaremos o Firebase.

Indonesian: 
Di tempat chat berada saat ini,
kita bisa membuat publik
sebagai ruang chat.
Sudah cukup teorinya.
Mari kita mulai membuatnya.
Mari kita tulis kode.
Ini demo yang kami jalankan
dari salah satu laptop di sana.
Anda lihat kami punya aplikasi web.
Kami sudah menyiapkan
semuanya untuk demo ini.
Kami sudah membuat HTML dasar
dan menghubungkannya ke beberapa kode.
Jika kita klik tombol Submit,
pesan akan muncul ke layar lokal.
Kita bahkan bisa memilih gambar.
Jika kita kirim gambar itu,
muncul pratinjaunya di layar lokal.
Sekarang, sudah selesai, 'kan?
Anda pikir begitu.
Tidak juga.
Ada satu masalah besar
dengan aplikasi ini.
Saat kita muat ulang,
semua datanya hilang
karena ini hanya aplikasi lokal.
Semua hanya ada pada laman web.
Saat kita muat ulang, semua itu hilang,
dan data tak disimpan di server mana pun.
Di sinilah kita akan menggunakan Firebase.

English: 
Just like where
we now have chat,
we could have public
as the chat room.
OK, enough theory.
Let's start actually
building this.
Let's write some code.
OK, so this is a demo that we're
running of one of the laptops
there.
You can see that
we have a web app,
and we sort of have everything
prepared for this demo.
So we've built the
basic HTML and we've
wired it up to some code.
If we now hit the Submit
button, the message
is added to the local screen.
We can even select an image.
And if we submit
that image, we see
a preview of the image
on the local screen.
Now, we're done, right?
That's what you're thinking.
It's like, not really.
There's one big
problem with this app.
When we just reloaded
it, all the data
is gone because it's
just a local app.
Everything just exists
in the web page.
When we reload it, it's
gone, and the data was not
persisted to a server anywhere.

Indonesian: 
Kodenya sudah siap di sini.
Kita akan beralih ke Firebase console dulu
dan mengatur beberapa hal.
Firebase console adalah tempat
Anda mengatur semua project Firebase.
Hari ini, kita akan menggunakan
project yang bernama fireconf2016.
Di sini, sudah ada...
Aplikasi Android dan iOS?
Jadi, ini kerjamu saat makan siang?
Baik.
Rupanya, sudah ada
aplikasi Android dan iOS.
Kau baik sekali. Untung kau sisakan
beberapa hal untuk dikerjakan.
Kami akan membuat aplikasi web, ingat?
Jika kita klik tombol
untuk menambahkan aplikasi,
kita tambahkan aplikasi web,
dan kita dapat cuplikan konfigurasi.
Cuplikan ini mengandung semua informasi
yang dibutuhkan aplikasi kita
untuk mencari project di server.
Untuk aplikasi iOS dan Android,
kita punya cuplikan serupa.
Unduh file dari console.
Tambahkan melalui Xcode
atau project Android Studio.

Japanese: 
もうここにコードは用意できています
まず Firebase コンソールに
切り替えて
そこで少し設定をします
Firebase コンソールは
皆さんの Firebase プロジェクト全てを
管理するところです
今日は fireconf2016 という
プロジェクトを使っていきます
この中にもう Android と
iOS アプリがありますね？
これが 君が昼食中にやってたこと？
ま いいよ
明らかにもう Android と iOS があります
君はとてもやさしいね
私達にやることを残してくれて嬉しいよ
ウェブアプリを構築してるんだよね？
アプリを加える為にボタンを押せば
ウェブアプリを加え
設定スニペットが出ます
このスニペットには アプリが
サーバー上でこのプロジェクトを
見つける為に必要な全情報が入っています
iOS と Android 用に
同様のスニペットがあります
そこでコンソールから
ファイルをダウンロードします
それを Xcode か Android Studio
プロジェクトを使って加えます
これで これらのアプリ全ては

Arabic: 
هنا سنستخدم Firebase.
إذًا لدينا البرمجة جاهزة هنا.
سننتقل إلى وحدة تحكم Firebase
أولًا ونقوم ببعض خطوات التهيئة هناك.
لذا وحدة تحكم Firebase
هي حيث تدير
كل مشاريعك الخاصة بـFirebase.
اليوم سنستخدم المشروع المسمى
fireconf2016.
وهنا لدينا تطبيق Android وiOS مسبقًا؟
هل هذا ما قمتما به خلال الغداء؟
حسنًا.
لذا يبدو أن لدينا مسبقًا
تطبيقي Android وiOS.
هذا لطيف منكما.
سعيد أنكما تركتما لنا بعض العمل.
سنبني تطبيق الويب، اتذكر؟
لذا إذا نقرنا الزرلإضافة 
تطبيق، نضيف تطبيق ويب،
ونحصل على snippet تهيئة.
الآن، تحوي هذه الـsnippet
على كل المعلومات
التي يحتاجها تطبيقنا لإيجاد
هذا المشروع على الخادم.
لتطبيقي الـiOS والـAndroid،
لدينا snippet مماثل.
تنزل الملف من وحدة التحكم،
تضيفها من خلال Xcode
أو Android Studio project.
وبهذا، كل التطبيقات

English: 
That's where we're
going to use Firebase.
So we have the code ready here.
We're going to switch over
to the Firebase console
first and do a few
setup steps there.
So the Firebase console
is where you manage
all of your Firebase projects.
Today we're going to be
using the project called
fireconf2016.
And in here we already have
an Android and an iOS app?
So is this what
you did over lunch?
OK.
So we apparently already have
an Android and an iOS app.
That's very nice of you.
I'm glad you left
us some work to do.
We are building the
web app, remember?
So if we click the button to
add an app, we add a web app,
and we get a
configuration snippet.
Now, this snippet contains
all the information
that our app needs to find
this project on the server.
For the iOS and the Android
app, we have a similar snippet.
So you download the
file from the console,
you add it through your Xcode
or Android Studio project.
And with that,
all these apps are

Portuguese: 
Temos o código pronto aqui.
Iremos mudar para o console do Firebase
e fazer algumas etapas de configuração lá.
O console do Firebase é onde
você controla todos
os seus projetos Firebase.
Hoje usaremos o projeto
chamado fireconf2016.
E aqui já temos um app Android
e um app  iOS?
Então isso que você fez durante o almoço?
Tá bom.
Aparentemente já temos
um app Android e iOS.
Muito legal da sua parte.
É bom que nos deixou trabalho para fazer.
Estamos construindo o app da Web, lembra?
Então se clicarmos no botão
para adicionar um app,
adicionamos um app da Web
e vemos um pouco da configuração.
Agora, este pedacinho
contém toda a informação
que nosso app precisa para encontrar
este projeto no servidor.
Para o app Android e o iOS,
temos um pedaço similar.
Você baixa o arquivo do console,
e o adiciona através do seu Xcode
ou Android Studio project.

Korean: 
이곳이 Firebase를 쓸 지점입니다
여기 코드가 준비됐습니다
이걸 Firebase 콘솔로 전환해서
설정 단계를 몇 개 거칠 거예요
Firebase 콘솔은
모든 Firebase 프로젝트를
관리할 수 있는 곳입니다
오늘 사용할 프로젝트의 이름은
'Fireconf2016'입니다
Android와 iOS 앱이 이미 있네요?
아까 점심시간에 만들었나요?
잘했어요
Android와 iOS 앱이 준비됐습니다
아주 좋아요
미리 준비해서 고마워요
우린 웹 앱을 만들었죠, 기억하세요?
앱을 추가하려면 버튼을 클릭하세요
우린 웹 앱을 추가할 겁니다
환경 설정 정보가 나타납니다
앱이 서버에서 이 프로젝트를 찾을 때
필요한 정보가 모두 포함됐어요
iOS와 Android 앱에도
비슷한 정보가 있습니다
콘솔에서 파일을 다운로드하고
여러분의 X 코드나
Android 스튜디오 프로젝트에 더합니다
그러고 나면 모든 앱은

Spanish: 
Para eso vamos a utilizar Firebase.
Así que tenemos el código listo aquí.
Vamos a pasar a la consola de Firebase,
y hagamos unas cuantas cosas aquí.
La consola de Firebase 
es donde administras
todos tus proyectos de Firebase.
Hoy utilizaremos el proyecto que se llama
fireconf2016.
Y aquí ya tenemos...
¿una aplicación para Android e iOS?
¿Esto es lo que hicieron 
durante el almuerzo?
Ok.
Aparentemente ya tenemos
una aplicación Android y iOS.
Muy bonito de su parte.
Me alegra que nos 
dejaron algo de trabajo.
Estamos construyendo 
una aplicación web, ¿recuerdan?
Entonces si hacemos clic
en el botón "aumentar una aplicación",
aumentamos una aplicación web
y obtenemos un pedazo de configuración.
Ahora, este pedazo
contiene toda la información
que nuestra aplicación necesita
para encontrar este 
proyecto en el servidor.
Para la aplicación iOS y Android, 
tenemos un fragmento parecido.
Así que descargas 
el archivo de la consola,
lo agregas por tu Xcode 
o Android Studio Project.
Y con eso, 
todas estas aplicaciones

Chinese: 
我们需要在这里使用Firebase
我们在这里已经有了编码
我们先要切换到Firebase控制台
完成一些设置步骤
因此，你可以在Firebase控制台
管理你所有的Firebase项目
今天，我们将使用一个
叫做fireconf2016的项目
在这里，我们已经有了
一个 Android和一个iOS应用
这就是你们午饭时间做的应用吗？
好的
很显然，我们已经有了
一个 Android和一个iOS应用
你真的是太好了
我很高兴，你还留了一些工作给我们
还记得我们在构建一个网页应用吗？
如果我们点击按钮来添加一个应用
我们添加了一个网页应用
我们得到了一个配置代码片段
现在，这个代码片段包含了
所有我们需要的，在服务器上
有关这个项目的信息
对于iOS和Android应用，
我们有非常类似的代码片段
因此你从控制台下载文件
你通过你的Xcode
或者Android Studio把它添加
这样，所有的应用

Indonesian: 
Dengan itu, semua aplikasi ini
bicara dengan backend yang sama.
Mereka bicara dengan database yang sama,
dengan daftar pengguna
dan file tersimpan yang sama.
Jadi, kita bisa mengolaborasi
data yang sama dengan cara itu.
Kami sudah mengambil cuplikan konfigurasi
dan menambahkannya ke aplikasi.
Kini, aplikasi web itu bisa menemukan
project Firebase-nya di server Google.
Kami sudah memulai aplikasi
berdasarkan data itu.
Dengan itu, kami siap
untuk mulai menghubungkan database.
Hal pertama yang harus dilakukan
adalah mencari node chat
yang Anda lihat
pada slide di database kami.
Kita buat referensi
ke node chat pada awan.
Kini, kita bisa mulai menulis
data itu ke database.
Saat pengguna mengeklik tombol Submit,
inilah kode yang dijalankan.
Anda lihat kami mengambil
nilai dari layar
dan menambahkannya ke HTML,
memanggil metode yang bernama
addMessageToHtml.
Itu yang akan dihapus karena, jujur saja,
kita tak mau langsung tambahkan ke layar.
Kita ingin mengirimnya ke database.

Portuguese: 
Com isso, todos esses aplicativos
estão falando com os mesmos backends.
Estão falando com o mesmo banco de dados,
a mesma lista de usuários,
os mesmos arquivos guardados.
Podemos facilmente fazer colaborações
nos mesmos dados dessa forma.
Pegamos o pedaço da configuração
e adicionamos no nosso app aqui,
e agora o app da Web pode achar
seu projeto Firebase
nos servidores Google.
Iniciamos um app com base nesses dados.
Com isso, estamos prontos
para começar o banco de dados.
Primeiro o que precisamos,
é achar o node do chat que vocês viram
no slide no nosso banco de dados.
Criamos uma referência
ao node do chat na nuvem.
Agora podemos começar
a escrever dados no banco de dados.
Quando o usuário clica o botão Submit,
este é o código que rodamos.
Pode ver que pegamos os valores da tela
e os adicionamos ao HTML,
chamando um método
com o nome de addMessageToHTML.
É isso que vamos remover porque,
para ser sincero,
não queremos adicioná-lo direto na tela,
queremos mandá-lo ao banco de dados.
Para mandar para o banco de dados,

Chinese: 
都可以于相同的终端对话
它们和相同的数据库对话
它们有相同的用户列表
相同的储存文件
这样我们很容易就可以用相同的数据合作
我们有了配置代码片段
我们把它添加到这里的应用
现在，网页应用就可以找到它的Firebase项目
在谷歌服务器上
我们根据那些数据初始化应用
这样，我们就可以开始连接数据库了
我们要做的第一件事
是我们需要找到聊天节点
我们在那个数据库幻灯片上看到过
我们为云端的聊天节点创建一个参数
现在，我们就可以将数据写入数据库
所以当用户点击“提交“按钮
我们就会运行这些代码
我们从屏幕获取了这个值
我们把它们添加到HTML
调用一个叫做HTML消息的方法
我们将把它移除
说实话，我们不想把它直接添加到屏幕中去
我们想把它发送到数据库
要把它发送到数据库，
我们需要把参数发送到聊天节点

Korean: 
같은 신호로 접속하고
같은 데이터베이스와
같은 사용자 목록과
같은 저장 파일에 연결됩니다
이런 방법으로 같은 데이터를
공동으로 쉽게 작업할 수 있습니다
지금까지 환경 설정 정보를 가져와서
앱에 추가하는 걸 보여드렸습니다
이제 이 웹 앱은 Google 서버에서
Firebase 프로젝트를 찾을 수 있어요
우린 데이터에 기초해서
앱의 초기 내용을 설정했고
데이터베이스에 연결할 준비가 됐습니다
첫 번째로 해야 할 일은
아까 봤던 슬라이드 속의 채팅 교점을
데이터베이스에서 찾는 겁니다
그래서 클라우드의 채팅 교점에
참조 표시를 합니다
이제 우린 데이터베이스에
데이터를 입력할 수 있습니다
그래서 사용자가 제출 버튼을 클릭하면
이 코드가 작동합니다
화면을 설정하는 값을 넣고
HTML에 이렇게 입력하면 
메시지를 HTML에 보내는
도구로 작용합니다
이 코드는 지우겠습니다
메시지를 화면에 더 띄우지 않고
데이터베이스로 보내고 싶어서요
메시지를 데이터베이스로 보내려면

Spanish: 
están hablando con el mismo backend.
Están hablando a la misma base de datos,
a la misma lista de usuarios,
a los mismos archivos almacenados.
Así que podemos colaborar fácilmente
con la misma información en ese sentido.
Hemos tomado el fragmento de configuración
y lo hemos agregado 
a nuestra aplicación.
Ahora la aplicación web 
puede encontrar su proyecto Firebase
en los servidores de Google.
Inicializamos una aplicación 
basada en esos datos.
Con eso, estamos 
listos para conectar la base de datos.
Lo primero que necesitamos hacer es
encontrar el nodo de chat
que viste en la dispositiva 
de nuestra base de datos.
Creamos a una referencia a 
ese nodo de chat en la nube.
Ahora podemos empezar a escribir 
la información a la base de datos
y cuando el usuario
aplaste el botón de enviar,
este es el código que ejecutaremos.
Ves que tomamos los valores de la pantalla
y los aumentamos al HTML, 
con un método llamado
un mensaje a HTML.
Eso es lo que vamos a quitar porque,
no queremos aumentarlo 
directo a la pantalla
queremos enviarlo a la base de datos.

English: 
talking to the same beckons.
So they're talking
to the same database,
to the same list of users,
to the same stored files.
So we can easily collaborate
on the same data that way.
So we've taken the
configuration snippet
and we've added it
to our app here,
so now the web app can
find its Firebase project
on the Google servers.
We've initialized an
app based on that data.
So with that, we're ready to
start wiring up the database.
First thing we need
to do is that we
need to find the
chat node that you
saw on slide in our database.
So we create a reference to
that chat node in the cloud.
Now we can start writing
the data to the database.
So when the user clicks
the Submit button,
this is the code that we run.
You see that we take the
values from the screen
and we add them to the HTML,
calling a method called
at message to HTML.
That's what we're going to
remove because, to be honest,
we don't want to add it
straight to the screen,
we want to send it
to the database.
So to send it to the database,
we take the reference

Arabic: 
تتحدث مع نفس الخلفية.
لذا يتحدثون مع نفس قاعدة البيانات،
لنفس قائمة المستخدمين،
لنفس الملفات المخزنة.
لذا بإمكاننا بسهولة التشارك
على نفس البيانات بهذه الطريقة.
لذا أخذنا snippet التهيئة
وأضفناها لتطبيقنا هنا،
لذا الآن تطبيق الويب يستطيع
إيجاد مشروع Firebase خاصته
على خوادم Google.
هيئنا تطبيقًا مبنيًا على تلك البيانات.
بهذا، نحن جاهزون بتوصيل قاعدة البيانات.
أول ما نحتاج القيام به هو
أن نجد عقدة المحادثة التي
رأيتها على الشريحة في قاعدة بياناتنا.
لذا نبني مرجعًا لعقدة
"chat" تلك في السحابة.
والآن بإمكاننا كتابة
البيانات على قاعدة البيانات.
بحيث عندما يضغط المستخدم
على زر تسليم،
هذه البرمجة التي يتم تنفيذها.
ترى أننا نأخذ القيم من الشاشة
ونضيفها إلى HTML،
باستدعاء أسلوب يدعى
addMessagrToHtml.
هذا ما سنزيله لأنه، بصراحة،
لا نود أن نضيفها مباشرًة إلى الشاشة،
نود أن نرسلها إلى قاعدة البيانات.
لإرسالها إلى قاعدة البيانات،
نأخذ المرجع

Japanese: 
同じバックエンドと通信します
だから通信は 同一のデータベースと
ユーザーの同一リストと
同一の格納ファイルと です
そんな風に 簡単に
同じデータで共同作業できます
設定スニペットを受け取って
それをここのアプリに加えました
これでウェブアプリは
その Firebase プロジェクトを
Google サーバー上で 見つけられます
そのデータに基づき
アプリを初期化してあります
それで データべースの
配線を開始できます
まず必要なのは
データベースのスライドで見た
チャットノードを見つけることです
だから クラウドのチャットノードへの
参照を作ります
では データベースに
そのデータの記述を始めます
ユーザーが「送信」ボタンを
クリックする時
これが実行するコードです
画面から値を受け取り
それらを addMessageToHTML という
メソッドで HTML に付け加えます
それは削除するものです
というのは 正直に言うと
画面に直接加えたくないのです
それをデータベースに送りたいのでね

Korean: 
복사해 온 채팅 마디를 참조하고
아래에 새 채팅 메시지를 추가해서
사용자가 채팅 메시지를 시작할 때의
데이터를 설정합니다
이제 Firebase 데이터베이스로
메시지를 이동시키는 작업이
끝났습니다
새 채팅 메시지를 입력하고
제출 버튼을 누르면
모바일 사이트 화면 2개에
입력한 메시지가 보이고
더는 웹페이지에 보이지 않습니다
당연하죠, 방금 부분 화면에 메시지를 추가하는
코드를 지웠기 때문입니다
화면 좀 조절해 주세요
Firebase 데이터베이스를 이용한
지금까지의 상호 작용은
꽤 전통적인 방법이었습니다
'요청 반응 모델'이라고 하죠
우린 채팅 메시지를 입력하고
데이터베이스로 보냈습니다
그리고 데이터베이스가
처리할 때까지 기다렸습니다
이건 전통적인 데이터베이스입니다
여러분은 데이터를 어떻게 읽죠?
채팅 메시지를 요청하고
반응이 오기를 기다렸다가

Japanese: 
データベースに送るには
さっきのチャットノードへの参照を受け取り
その下に新しいチャットメッセージを
加えるようにして
次に ユーザーがチャットメッセージに
入ったというデータを設定します
これで Firebase データベースに
記述が必要な全部です
というのは 新しいチャットメッセージを
入れ 「送信」を押すと
メッセ―ジはモバイルサイトの
２つの画面に表示されますが
もうウェブページには表示されません
それは勿論当然です
ローカルの画面に加えたコードを
削除したからです
ではそれを直しましょう
ここまで Firebase データベースとの
相互作用はかなり伝統的でした
リクエスト レスポンスのモデルです
チャットメッセージを作成し
それをデータベースに送り
データベースが済むまで待ちます
伝統的なデータバースでは
それがデータの読み方ですね
チャットメッセージをリクエストし
レスポンスが戻るまで待ち

Spanish: 
Para enviar a la base de datos
tomamos la referencia
al nodo de chat que tenemos,
decimos "aumentar un 
nuevo mensaje de chat" debajo,
y luego ponemos la información que el
usuario puso en el mensaje de chat.
Eso es todo lo que le toma escribir
la base de datos a Firebase.
Porque si ahora ponemos un 
nuevo mensaje de chat
y lo enviamos
aparece el mensaje en las dos pantallas
que tenemos para los sitios móbiles,
pero ya no aparece en la página web.
Esto hace sentido, 
porque acabamos de
eliminar el código 
que lo agrega a la pantalla local.
Así que arreglemos eso.
Hasta ahora, la interacción 
con la base de datos de Firebase
ha sido muy tradicional, ¿sí?
Es un model de solicitud-respuesta.
Creamos un mensaje de chat,
lo enviamos a la base de datos,
y esperamos hasta que 
la base de datos esté lista.
En una base de datos tradicional,
así es como se lee la información, ¿sí?
Solicitas el mensaje de chat,
esperas a que una respuesta venga,

Portuguese: 
pegamos a referência para o node de chat
que tínhamos, e mandamos adicionar
uma nova mensagem de chat,
depois usamos set
nos dados que o usuário colocou
na mensagem de chat.
Isso é tudo que se precisa para escrever
no Firebase Database.
Porque se agora colocarmos uma nova
mensagem de chat e clicarmos em Submit,
a mensagem aparece nas duas telas
que temos para os sites móveis,
mas não mais aparece na página da Web.
Isso, é claro, que faz sentido
porque acabamos de remover o código
que o adiciona na tela local.
Então vamos consertar isso.
Até agora, a interação
com o banco de dados Firebase
tem sido bem tradicional, certo?
É um modelo request-response.
Criamos a mensagem de chat,
enviamos ao banco de dados,
e esperamos até que
o banco de dados esteja pronto.
Em um banco de dados tradicional,
também é assim que você lê dados, certo?
Você pediria as mensagens de chat,
espera a resposta voltar,

Chinese: 
我们让它在这下面添加一条新的聊天信息
然后我们把数据设置为
用户输入的聊天信息
这就是把信息写入Firebase数据库的
全部过程
因为如果我们现在输入一个
新的聊天信息，我们点击“提交”
信息就会被显示在
我们移动网站的两个屏幕上
但它不再在网页上显示了
当然会这样
因为我们刚刚移除了
添加在本地屏幕的节点
让我们修正这个错误
到现在为止
我们与Firebase数据库的互动
都还是比较传统的
就是一个请求-回应模式
我们创建了一个聊天信息
我们把它发送到数据库
然后等数据库完成
在一个传统的数据库中
这也是你阅读数据的方法，对吗？
你可以请求一个聊天信息
你等待回复

English: 
to the chat node that we had,
we tell it to add a new chat
message under it, and then
we set the data that the user
entered into the chat message.
That is really all that it
takes to write to the Firebase
database.
Because if we now enter a new
chat message and we hit Submit,
the message shows up
on the two screens
that we have for
the mobile sites,
but it doesn't show up
on the web page anymore.
That, of course, makes
sense because we just
removed the code that adds
it to the local screen.
So let's fix that.
So until now, the interaction
with the Firebase database
has been fairly
traditional, Right
it's a request-response model.
We create a chat message,
we send it to the database,
and wait until the
database is done.
In a traditional
database, that's
also how you read data, right?
You would request
the chat messages,
you wait for the
response to come back,

Arabic: 
إلى عقدة "chat" التي لدينا،
ونخبرها أن تضيف رسالة محادثة جديدة
تحتها، ومن ثم نهيئ البيانات التي
أدخلها المستخدم إلى رسالة المحادثة.
هذا حقيقًة كل ما يتطلبه الأمر
للكنابة لقاعدة بيانات Firebase
لأنه إذا أدخلنا الآن رسالة محادثة
جديدة ونقرنا على تسليم،
تظهر الرسالة على الشاشتين
اللتين لدينا لمواقع الموبايل،
ولكن لا تظهر على
صفحة الويب بعد الآن.
هذا، بالطبع، منطقي لأننا
أزلنا للتو البرمجة التي
تضيفها إلى الشاشة المحلية.
لنصلح ذلك.
حتى الآن، التعامل مع
قاعدة بيانات Firebase
كان تقليديًا بشكل كبير، صحيح
إنه نموذج طلب-استجابة.
أنشأنا رسالة محادثة،
أرسلناها لقاعدة البيانات،
وانتظرنا حتى انتهت قاعدة البيانات.
في قاعدة بيانات تقليدية،
هذا كيف تقرأ البيانات، أليس كذلك؟
ستطلب رسائل المحادثة،
وتنتظر لتعود الاستجابة،

Indonesian: 
Untuk mengirimnya ke database,
ambil referensi ke node chat yang ada,
menambah pesan chat baru di bawahnya,
lalu menentukan data
yang dimasukkan pengguna
ke pesan chat itu.
Hanya itulah yang dibutuhkan
untuk menulis ke Firebase Database.
Karena jika sekarang kita memasukkan
pesan chat baru dan klik Submit,
pesan itu akan muncul pada kedua layar
yang ada untuk situs mobile,
tapi tak muncul lagi pada laman web.
Tentu itu masuk akal
karena kita baru menghapus kode
yang menambahkannya ke layar lokal.
Jadi, mari kita perbaiki.
Hingga kini, interaksi dengan
Firebase Database cukup biasa, ya?
Itu adalah model permintaan-respons.
Membuat pesan chat, kirim ke database,
dan menunggu sampai database selesai.
Pada database biasa,
itu cara membaca data, 'kan?
Anda meminta pesan chat.
Anda menunggu respons.

Portuguese: 
depois olha as mensagens do chat
e as adiciona na tela uma por uma.
Você provavelmente espera alguns segundos,
pergunta se tem alguma mensagem nova,
depois as adiciona na tela.
Espera mais alguns segundos,
e faz a mesma coisa várias vezes.
Você está fazendo uma contagem em loop
de request-response.
Nosso banco de dados
não é muito tradicional,
então quando você interage
com nosso banco de dados, é diferente.
Ao invés de pedir dados repetidamente
você pedirá ao banco de dados uma vez
se algo acontecer sob o node de chat,
me notifique.
Vamos terminar o código,
depois corrigiremos isso
enquanto vamos para o próximo recurso.
Vamos fingir que o demo roda mesmo.
Eu realmente poderia ter
um sinal de aplausos agora.

Arabic: 
ومن ثم تبحث خلال
رسائل المحادثة
وتضيفهم للشاشة واحدة تلو الأخرى.
على الأرجح أنك تنتظر بضع ثواني
تطلب إذا كان هناك
أي رسائل محادثة جديدة،
ومن ثم تضيفهم إلى الشاشة.
وتنتظر بضع ثواني أخرى،
وتقوم بنفس الأمر
وهكذا دواليك.
تقوم بانتخاب حلقة
طلب-استجابة.
قاعدة بيناتنا ليست
تقليدية أبدًا،
لذا عندما تتفاعل معها، الأمر مختلف.
بدلًا من طلب البيانات بشكل متكرر
ستسأل قاعدة 
البيانات مرًة إذا حدث شيء
تحت عقدة "chat"، أخبريني.
حسنًا، لننهي البرمجة،
ومن ثم سنصلح
هذا بينما نذهب للميزة التالية.
لنفترض أن العرض يعمل.
أحب أن أسمع تصفيقًا الآن.

Japanese: 
チャットメッセージに目を通し
それらを１つずつ画面に出します
多分数秒待って
新しいチャットメッセージがあるか
リクエストし
それらを画面に付け足します
また数秒待って同じ事をし
繰り返します
ポーリングのリクエスト・レスポンスの
ループをします
私達のデータベースはかなり非伝統的です
だから私達のデータベースと
相互作用すると 違っています
データを何度もリクエストするのではなく
データベースに１回
チャットノードの下に何かあれば
通知させます
まずコードを終わらせ
次の機能に進みながら
これを直しましょう
ではデモが実際に動くとしましょう
その標識を今使えるんだがね
[ごめんなさい]

English: 
then you look through
the chat messages
and you add them to
the screen one by one.
You probably wait
a few seconds, you
request if there are
any new chat messages,
then you add those
to the screen.
You wait another few seconds,
you do the same thing
over and over.
You are doing a polling
request-response loop.
Our database is
fairly nontraditional,
so when you interact with
our database, it's different.
Instead of requesting
data repeatedly
you're going to be asking the
database once if something
happens under the chat
node, tell me about it.
OK, let's finish the
code, and then we'll
fix this while we go
to the next feature.
So let's pretend that
the demo actually runs.
I really could use that
applause sign right now.

Indonesian: 
Lalu Anda memeriksa pesan chat
dan tambahkan ke layar satu per satu.
Mungkin Anda menunggu beberapa detik.
Anda meminta apakah ada pesan chat baru.
Anda tambahkan ke layar.
Anda menunggu beberapa detik lagi.
Anda lakukan hal sama berulang kali.
Anda membuat polling
loop permintaan-respons.
Database kami agak berbeda.
Jadi, ada perbedaan saat berinteraksi
dengan database kami.
Alih-alih meminta data berulang kali,
Anda akan meminta database satu kali.
Jika sesuatu terjadi
pada node chat, beri tahu saya.
Mari kita selesaikan kodenya,
lalu kita perbaiki
sambil beralih ke fitur berikutnya.
Anggap saja demo ini benar-benar berjalan.
Saya benar-benar butuh
tanda tepuk tangan saat ini.

Chinese: 
然后你查看聊天信息
然后你把它一个个添加到屏幕上
你可能需要等上几秒钟
你看是否有新的信息
如果有就把他们添加到屏幕中
你再等上几分钟
反复重复相同的步骤
你在做一个请求-响应循环
我们的数据库是非传统的
当你和我们的数据库互动时
它是不同的
你不需要反复请求数据
你只需要提出一次数据请求
只要那个聊天节点发生了
任何变化
就会告诉我
好了，让我们完成编码
在进入下一个功能前，我们要把它修复
让我们设想演示正在运行
我现在就可以使用那个鼓掌的表情

Spanish: 
luego buscas entre 
los mensajes de chat
y los agregas a la pantalla, uno por uno.
Probablemente 
esperes unos segundos,
solicitas si hay 
mensajes de chat nuevo,
y aumentarlos a la pantalla.
Esperas unos segundo más,
y vuelves a hacer lo mismo,
una y otra vez.
Estás creando un circuito de 
encuesta de pedido y respuesta.
Nuestra base de datos 
no es muy tradicional,
así que cuando interactúas con ella,
vas a ver diferencias.
En lugar de solicitar 
la información constantemente,
vas a preguntar a 
la base de datos, una vez
si algo sucede en el nodo 
de chat, que te lo informe.
Terminemos de codificar y de ahí
vamos a arreglar esto mientras 
pasamos a la siguiente característica.
Digamos que el demo 
en realidad se está ejecutando,
ahorita me podrían 
ayudar con el signo de aplauso...

Korean: 
메시지가 오면 읽은 다음
화면에 메시지를 하나씩 추가합니다
아마 몇 초 기다렸다가
추가할 내용이 있다면 요청한 다음
화면에 새 채팅 메시지를 추가합니다
다시 몇 초 기다렸다가
같은 작업을 진행합니다
계속 반복됩니다
'폴링 요청 반응 순환'을 하는 거죠
우리의 데이터베이스는
기존의 것과 꽤 다릅니다
우리 데이터베이스와 상호작용한다면
다르다고 느낄 겁니다
데이터를 반복해서 요청하는 대신
데이터베이스에 한 번만 요청하면 됩니다
채팅 교점 작업을 하다가
어떤 일이 생기면 말해주세요
네, 코드 작업을 끝내죠
다음 특징을 설명하는 동안
이 문제를 고치겠습니다
이 데모가 실제로 작동한다고 치죠
박수 시간으로 쓸 수 있겠어요

Spanish: 
Gracias a todos.
Ósea, seguro estoy 
tan colorado como el logo.
Hablamos de escuchar a la información
en la base de datos.
Recuerden, con una base de datos,
no pides la información,
le dices a la base de datos que quieres
escuchar los cambios.
Así que aumentemos ese código.
Tenemos la misma 
referencia al nodo de chat
y ahora le decimos que nos dé 
los últimos 10 mensajes de chat.
Y siempre que un 
nuevo mensaje de chat está disponible
dispara un pequeño evento agregado
y nos da un snapshot de ese nuevo mensaje.
Así que a partir de esa imagen,
obtenemos un mensaje 
con el nombre del usuario de posteo
el mensaje
y el mensaje que posteo.
Y de ahí llamamos 
agregar mensaje a HTML.
Recuerdan eso, 
porque parece que fue hace horas,
en realidad solo quitamos esa llamada,
hace algunas líneas.
Así que lo aumentamos 
de vuelta a la pantalla.

English: 
Thank you, everyone.
I mean, I'm probably now about
as orange as the logo is.
So we're talking about listening
for data on the database.
So remember, with a
Firebase database,
you don't request for the data,
you tell the database that you
want to listen for changes.
So let's add that code.
So we have the same
reference to the chat node,
and we now tell it to give me
the latest 10 chat messages.
And then whenever a new
chat message is available,
it fires a child added
event and gives us
a snapshot of the data
of that new message.
So from that snapshot,
we get a message
that contains the
name of the user that
posted the message and the
message that it posted.
And then we call
at message to HTML.
You remember that what feels
like hours ago to me right now,
we actually just removed
that call a few lines up.
OK, so we add it
back to the screen.
So if we would
reload the app now,

Korean: 
감사합니다, 여러분
제 얼굴이 이 로고처럼
주황색으로 변했을 것 같군요
데이터베이스의 데이터 수신을
말하고 있었죠
이걸 기억하세요
Firebase 데이터베이스를 쓰면
데이터를 요청하는 게 아니라
변화된 내용을 수신하고 싶다고
데이터베이스에 지시하면 됩니다
그럼 코드를 추가하겠습니다
채팅 교점에 같은 참조를 했고
최근 채팅 메시지 10개를
받고 싶다고 명령합니다
그리고 새 채팅 메시지가 올 때마다
child_added 이벤트가 생성돼서
새 메시지 데이터에 관한
짤막한 정보를 달라고 합니다
이 짤막한 정보에는
메시지를 보낸 사용자의 이름과
보낸 메시지가 있습니다
그리고 HTML에 메시지를 보냅니다
제겐 몇 시간 전처럼 느껴지지만
우리는 몇 줄 위에서
저 명령을 분명히 지웠습니다
좋아요, 화면으로 돌아가서 코드를 추가합니다
만약 앱을 지금 재로딩하면

Indonesian: 
Terima kasih, semuanya.
Mungkin saya sejingga logo ini sekarang.
Kita bicara soal mendengarkan
data di database.
Ingat, dengan Firebase Database,
Anda tak meminta data,
melainkan memberi tahu database
bahwa Anda ingin menyimak perubahan.
Mari kita tambahkan kode itu.
Kita punya referensi
yang sama untuk node chat.
Kini, kita menyuruhnya memberi saya
10 pesan chat terakhir.
Lalu saat ada pesan chat baru,
memicu event child_added
dan memberi kita
cuplikan data pesan baru itu.
Dari cuplikan itu, kita mendapat pesan
berisi nama pengguna
yang mengepos pesan itu
dan pesan yang diposkan.
Lalu kita memanggil addMessageToHtml.
Anda ingat yang terasa
seperti beberapa jam lalu bagi saya,
kita memindahkan panggilan itu
beberapa baris ke atas.
Kita menambahkannya kembali ke layar.

Portuguese: 
Obrigado, pessoal.
Eu provavelmente estou
tão laranja quanto o logo.
Estamos falando de listening
para dados no banco de dados.
Lembre-se, com o Firebase Database,
você não pede os dados,
você diz ao banco de dados que quer 
que escute por mudanças.
Vamos adicionar isso ao código.
Temos a mesma referência ao node de chat,
e agora mandamos nos dar
as últimas 10 mensagens de chat.
E quando uma nova
mensagem de chat está disponível,
manda um evento child_added
e nos dá um pedaço dos dados
da nova mensagem.
Desse pedaço, temos uma mensagem
que contém o nome do usuário
que postou a mensagem
e a mensagem que ele postou.
Depois chamamos addMessageToHtml.
Lembram-se que, já parece que foram
horas atrás para mim,
nós já removemos aquele call
umas linhas acima.
Então adicionamos de volta na tela.
Então se recarregarmos o app agora,

Arabic: 
شكرًا، للجميع.
أعني، على الأرجح أنا الآن
برتقالي كلون الشعار.
إذًا نتحدث عن الاستماع
للبيانات على قاعدة البيانات.
لذا تذكر، مع قاعدة بيانات Firebase،
لا تطلب البيانات،
تخبر قاعدة البيانات أنك
تود أن تستمع للتغييرات.
لنضيف تلك البرمجة.
لذا لدينا نفس المرجع لعقدة المحادثة تلك،
والآن نخبرها أن تعطيني
آخر 10 رسائل محادثة.
وبعدها كلما توفرت رسالة محادثة،
تطلق حدثًا مضافًا بابن وتعطينا
نبذة عن البيانات التي
في تلك الرسالة الجديدة.
ومن تلك النبذة، نحصل على رسالة
تحتوي اسم المستخدم الذي
نشر الرسالة والرسالة المنشورة.
ومن ثم نستدعي
AddMessageToHtml.
تذكرون أن ما أشعر كأنه ساعات مضت الآن
قمنا بإزالة ذلك الاستدعاء
قبل عدة سطور برمجية.
حسنًا، نعيد إضافتها للشاشة.
لذا إذا أعدنا تحميل التطبيق الآن،

Japanese: 
ありがとう 皆さん
私は多分 ロゴと同じ位赤面してるでしょうね
データベースでデータを
聴く話をしていますよね
Firebase データベースでは
データをリクエストしないで
データベースに変更を聴きたいと
告げるわけです
ではコードを付けましょう
チャットノードに同じ参照があります
今 最新 10 のチャットメッセージを
出すように告げます
そうして新しいチャットメッセージが
利用可能な毎回
child_added イベントを作動させ
その新しいメッセージのデータの
スナップショットを出します
そのスナップショットから
そのメッセージを投稿したユーザー名と
投稿されたメッセージが入っている
メッセージを取得します
そうして addMessageToHtml を
呼び出します
私に何時間も前に感じられたことを
今思い出してください
実際にあの呼び出しの数行を
除去しました
では 画面にそれを戻します
今アプリをリロードすれば

Chinese: 
感谢大家
我现在可能和那个标志一样，变成橙色了
我们现在要讨论在数据库监测数据
请记住，使用Firebase数据库
你不需要发数据请求
你只需要告诉数据库
你想要监控任何改变
让我们添加这个代码
我们对聊天节点使用相同的参数
现在，我让它给我最新的10条信息
每当有一条新的信息时
它激发一个子文件来添加事件
这会给我们新信息数据的截屏
通过那个截屏，我们获得一个信息
它包含了发送信息的用户名
以及它所发送的信息
然后我们把信息调用到HTML
你还记得几小时前我的感受吗
我们事实上才把那个调用命令栏删除
好了，让我们把它添加回屏幕
如果我们现在刷新应用

Arabic: 
ستظهر الرسالة مباشرًة.
سبب ذلك ينطلق الابن المضاف مباشرًة
لأي بيانات ترسلها لقاعدة البيانات.
وأيضًا، عندما تكتب رسالة جديدة،
ستطلق لتلك الرسالة الجديدة،
على كل من البيئتين المحلية
والنظام البعيد، مباشرًة.
لنرى إذا كان إحدى الموبايلات متصل.
الحمدلله، فقط تطبيق الويب معطل.
حسنًا، لدينا اثنين يعملون--
الذين قمتما بهما خلال الغداء.
وبالطبع الذي تحدثت عنه للتو
لا يعمل.
سنرى إذا كان بإمكاننا إصلاحه.
في الواقع، يجب أن نقوم بشيء
ما حيال هذا التطبيق
لأنه ممل ورتيب، أليس كذلك؟
يمكننا تبادل رسائل المحادثة.
إنه ليس بالكثير حتى الآن.
يجب أن نضيف بعض الميزات الرائعة للتطبيق
لجعله مثيرًا للاهتمام أكثر.
كات، هل لديك أفكار حول
جعل التطبيق أروع؟

Chinese: 
信息马上就会被显示
因为当你向数据库发送任何信息时
子文件会被立即激活
同时，当你输入一条信息时
子文件也会立即被激活
同时在本地和远程环境下
让我们来看看
其中一台设备是否已经被连接
谢天谢地，坏掉的仅仅是网页应用
好了，我们已经有两个功能了
一个在吃午饭的那个小时完成
还有一个就是我刚刚讲解的
他们就像什么都没发生一样
让我们来看看能不能修复它
我们真的应该对这个应用做点什么
因为它真的很无聊
对吗？
我们可以交换聊天信息
仅仅如此而已
我们应该给应用添加
更多很酷的功能
让它变得更加有趣
Kat，你有什么好主意
让这个应用变得更酷吗？

Spanish: 
Así que si volvemos 
a cargar la aplicación ahora,
el mensaje aparecería de una.
La razón para eso
es que el mensaje aumentado 
reacciona inmediatamente
para cualquier información 
que envías a la base de dato.
Y también cuando 
escribes un nuevo mensaje,
se disparará para ese nuevo mensaje,
ambos en un ambiente local
y en el sistema remoto, inmediatamente.
Veamos si alguno de los 
dispositivos móbiles está conectado.
Gracias a Dios, solo se 
dañó la aplicación web.
Ok, entonces tenemos dos que funcionan,
la que hicieron ustedes en 
una hora, durante el almuerzo.
Y la que acabo de explicarles,
que no funciona.
Ya veremos si podemos solucionar eso.
En realidad, deberíamos 
hacer algo sobre esta aplicación,
porque es bastante aburrido, ¿verdad?
Podemos intercambiar 
mensajes de chat.
Todavía no es mucho.
Necesitamos aumentar 
características atractivas a la app
para hacerla más entretenida.
Kat,
¿se te ocurre cómo 
podríamos mejorar la aplicación?

Japanese: 
メッセージはすぐに表示します
その理由は child_added が
データベースに送るデータに対し
すぐに作動したからです
また 新しいメッセージを入力すると
その新しいメッセージに対し
ローカル環境と
リモートシステムの両方で
すぐに作動します
モバイルデバイスの一方が
接続されるか見ましょう
壊れてるのは本当はウェブアプリだけですね
では２台動いている--
君達が昼食で１時間前に
やってたもの
今話したことは起こらないのかな
それが直せるか確認します
実は このアプリを何とかすべきです
どうもつまらなく味がないよね？
チャットメッセージと交換できるよ
まだあまり多くない
アプリに何か素敵な機能を付けて
それをもっと面白くすべきだ
Kat このアプリをもっと素敵にする
方法がわかる？

Indonesian: 
Jika kita muat ulang aplikasinya sekarang,
pesan itu akan langsung muncul.
Penyebabnya adalah
child_added langsung terpicu
untuk semua data
yang Anda kirim ke database.
Saat Anda menulis pesan baru,
juga akan terpicu untuk pesan baru itu,
baik pada environment lokal
maupun sistem remote, dengan segera.
Kita lihat apakah salah satu
perangkat mobile terhubung.
Syukurlah, benar-benar
hanya aplikasi web yang rusak.
Ada dua yang bekerja.
Yang kalian buat satu jam
saat makan siang.
Lalu jelas yang baru saya jelaskan tadi
tak akan bekerja.
Kita coba memperbaikinya.
Kita harus berbuat
sesuatu pada aplikasi ini
karena agak membosankan dan hambar, ya?
Kita bisa bertukar pesan chat.
Itu belum apa-apa.
Kita harus menambahkan
fitur-fitur keren pada aplikasi
untuk membuatnya lebih menarik.
Kat, kau punya ide
untuk membuat aplikasi ini lebih keren?

Korean: 
메시지가 바로 뜰겁니다
'child_added'가
데이터베이스로 보낸 데이터를
즉시 불러오기 때문입니다
그리고 새 메시지를 입력해도
지역 환경과 원격 시스템에서
그 새로운 메시지를 바로 불러옵니다
모바일 기기가 연결되는지 볼까요
다행입니다, 웹 앱이
정말 잠깐 멈췄나 봅니다
좋아요, 우린 두 가지 작업을 했는데
한 가지는 옆의 동료들이
점심시간인 1시간 동안 했고
또 하나는 제가 말하는 중에 작업한 것인데
그게 작동하지 않네요
고칠 수 있는지 볼까요
진짜로 이 앱이 움직여야 합니다
그렇지 않으면 이 강연이
지겹고 밋밋해지니까요
우린 채팅 메시지를 교환할 수 있습니다
하지만 아직 많은 게 남아있습니다
앱에 멋진 특성을 추가해서
더 재미있게 만들어야 합니다
캣 씨, 이 앱을 더 멋지게
만들 방법이 있나요?

English: 
the message would
show straight away.
The reason for that is that a
child added fires immediately
for any data that you
send to the database.
And it also, when you
type a new message,
will fire for that new message,
both on the local environment
and on the remote
system, straight away.
Let's see if one of the
mobile devices is connected.
Thank goodness, it's really
just the web app that's broken.
OK, so we have two
working-- the ones
that you guys did in
an hour over lunch.
And clearly the one that
I just talked through
is, like, not happening.
We'll see if we can fix that.
Actually, we really should
do something about this app
because it's rather
boring and bland, right?
We can exchange chat messages.
It's not really a lot yet.
We should add some cool
features to the app
to make it more exciting.
Kat, do you have any idea how
we can make this app cooler?

Portuguese: 
a mensagem mostraria logo de cara.
O motivo disso é que um child_added
procura imediatamente
por cada dado que você envia
ao banco de dados.
E também, quando você
digita uma nova mensagem,
irá procurar por essa nova mensagem,
no ambiente local
e no sistema remoto, na hora.
Vamos ver se um dos
dispositivos móveis está conectado.
Ainda bem, é só o app da Web
que está quebrado.
Então temos dois funcionando...
os que fizeram em uma hora no almoço.
E claramente o que eu acabei de fazer,
não está funcionando.
Veremos se conseguimos consertar.
Na verdade, deveríamos
fazer algo sobre este app
porque está bem simples e sem graça, né?
Podemos trocar mensagens de chat.
Não é muito ainda.
Devíamos adicionar
alguns recursos legais ao app
para fazê-lo mais emocionante.
Kat, você tem alguma ideia de como
podemos deixar o app mais legal?

English: 
KAT FANG: What about
authenticating our users?
I mean, it's fine if
I pretend to be you,
but I don't want anyone
pretending to be me.
That's just not cool.
So to do this, we might
normally use a user table, salt
and hash our passwords.
Or we might use Facebook login
and do the whole OAuth dance.
I don't know, how many of
you have done the whole OAuth
dance?
Couple hands.
You know how fun it is.
Or we can use
Firebase Auth, which
supports a bunch of
the social providers.
So we can go ahead and let
our users log in with Facebook
or Twitter or Google, and if
they're the sort of person who
just does not use any of
the social providers, very
segmented in what they
have logged into what,
we also support
email and password,
so you don't have to salt
and hash your own users.
We can also add in
custom authentication.
So if you already have a
user system such as Active

Portuguese: 
Que tal autenticar nossos usuários?
Está tudo bom se eu fingir ser você,
mas não quero ninguém tentando ser eu.
Isso não é legal.
Para fazer isso, normalmente
usamos uma user table,
salt e hash nossas senhas.
Ou podemos usar login do Facebook
e usar o OAuth dance.
Não sei quantos de você já fizeram
o OAuth dance inteiro?
Algumas pessoas.
Vocês sabem o quão divertido é.
Ou podemos usar Firebase Auth,
que oferece suporte a vários
provedores sociais.
Então podemos deixar nossos usuários
fazerem login com Facebook
ou Twitter, ou Google,
e se eles são do tipo de pessoa
que não usa nenhum destes,
tem tudo separado onde estão logados,
também oferecemos suporte
para e-mail e senha,
então você não tem que usar salt e hash
seus próprios usuários.
Podemos também adicionar
autenticação personalizada.
Se você já tem um sistema de usuários

Arabic: 
ماذا عن توثيق مستخدمينا؟
أعني، لا بأس أن
أتظاهر أنك أنت،
ولكن لا أود لأي أحد
أن يتظاهر أنه أنا.
هذا ليس مستحسنًا أبدًا.
لنقوم بذلك، من الممكن بشكل طبيعي
أن نستخدم جدول مستخدمين،
نجري عمليات SALT وhash
على كلنات المرور.
أو بإمكاننا استخدام تسجيل الدخول على
Facebook ونقوم برقصة OAuth كاملة.
لا أعلم، كم منكم قام برقصة OAuth كاملة؟
يدان.
تعلمونكم ذلك ممتع.
أو بإمكاننا استخدام توثيق Firebase
الذي يدعم مجموعة من
المزودات الاجتماعية.
لذا بإمكاننا السماح لمستخدمينا
بتسجيل الدخول باستخدام Facebook
أو Twitter أو Google،
وإذا كنت من النوع الذي
لا يستخدم أيًا من المزودات الاجتماعية،
ومتجزأ كثيرًا بما سجلوا
دخولهم على ماذا،
ندعم أيضًا الإيميل وكلمة المرور،
لذا ليس عليك استخدام عمليتي
SALT وhash على مستخدميك.
بإمكاننا أيضًا إضافة
توثيق مخصص.
لذا إذا كنت تملك نظام 
مستخدم كـActive Dictionary

Chinese: 
用户身份验证怎么样？
我是说，我可以假装成你
当我不想任何人假装成我
那就不好了
要做到这点，我们通常需要一个用户列表
来储存我们的密码
或者我们可以使用Facebook登录
然后“跳一整段OAuth”
我不知道，你们中有多少人
使用过OAuth
有几个人
你们知道它有多有趣
或者我们可以用Firebase身份验证
支持一系列的社交媒体
这样我们就可以让用户
通过Facebook，Twitter或Google登录
如果你不使用任何的社交媒体
与社会隔离
我们还支持邮箱密码登录
这样你就不必为你的用户加密了
我们还可以添加自定义身份验证
如果你已经有了一个用户系统

Korean: 
사용자 인증은 어떨까요?
제가 당신인 척한다면 괜찮지만
누가 저인 척하는 게 싫거든요
그건 멋진 게 아니죠
사용자 인증을 할 때
사용자 표와 암호화한 비밀번호를
일반적으로 이용합니다
아니면 페이스북 로그인이나
OAuth 전체 인증을 합니다
잘 몰라서 그러는데
OAth 전체 인증을 하시는 분이
얼마나 있나요?
몇 분 있군요
얼마나 재미있는지 아시죠
또는 SNS 회사 다수를 지원하는
Firebase 인증을 쓸 수 있습니다
우리는 로그인 방법에 따라
Facebook, Twitter, Google로
로그인하는 사용자와
SNS를 쓰지 않는 사용자로
이렇게 나눌 수 있습니다
우리 역시 이메일과 비밀번호를 지원해서
사용자를 암호화 할 필요가 없습니다
개인 인증도 추가할 수 있습니다

Indonesian: 
Bagaimana kalau mengautentikasi pengguna?
Tak masalah aku berpura-pura menjadi kau,
tapi aku tak mau
siapa pun pura-pura jadi aku.
Itu sangat tak keren.
Untuk melakukan ini, mungkin
biasanya kita menggunakan tabel pengguna,
dan melakukan kriptografi pada sandi.
Atau mungkin kita gunakan login Facebook
dan melakukan prosedur OAuth.
Entahlah, berapa orang
yang pernah melakukan prosedur OAuth?
Beberapa orang.
Anda tahu betapa serunya itu.
Atau kita bisa menggunakan Firebase Auth,
yang mendukung
banyak penyedia layanan sosial.
Kita bisa memungkinkan pengguna
untuk login dengan Facebook,
Twitter atau Google.
Jika mereka adalah tipe orang
yang tak memakai penyedia layanan sosial,
sangat tersegmen soal login ke mana,
kami juga mendukung email dan sandi.
Jadi, Anda tak perlu
melakukan kriptografi pada pengguna.
Kita juga bisa menambahkan
autentikasi khusus.

Spanish: 
- ¿Qué tal si hacemos algo 
con la autentificación de usuarios?
Ósea, está bien si pretendo ser tú,
pero no quiero que nadie pretenda ser yo.
Eso no esta bien.
Así que para hacer eso,
normalmente deberíamos usar una tabla,
y saltar nuestras clave.
O podríamos usar el registro de Facebook
y hacer todo el baile de OAuth.
No sé... 
¿cuánto de ustedes han usado OAuth?
Un par de manos.
Saben que es divertido.
O podemos usar
Firebase Auth,
que da soporte a un montón 
de proveedores de redes sociales.
Así que podemos permitir que nuestros 
usuarios se registren con Facebook,
o Twitter,
o Google,
y si son el tipo de persona que
simplemente no usa ninguna red social,
muy segmentados en donde se registran,
también demos soporte a mail y clave,
para no perder a tus propios usuarios.
También podemos aumentar 
una autentificación personalizada.
Así que si tienes 
usuarios como Active Directory

Japanese: 
ユーザーを認証するのはどう？
あなたの振りをするのは大丈夫だけど
誰かに私の振りをされるのはごめんだわ
それってカッコ悪いもの
これをするには 普通
ユーザー・テーブル 塩を使い
パスワードをハッシュします
または Facebook ログインを使って
OAuth ダンスをしてもいいかも
皆さんの何人が OAuth ダンスを
したことがありますか？
数人ですね
どんなに楽しいか分かってますね
Firebase 認証を使ってもいいです
それはソーシャルプロバイダを沢山
サポートしています
では Facebook とか Twitter
Google でユーザーをログインさせましょう
ソーシャルプロバイダを使わないような人なら
ログインしてきたことに区分けされ
電子メールとパスワードもサポートします
だから自分のユーザーを塩と
ハッシュする必要はないです
カスタム認証も付けられます

Indonesian: 
Jadi, jika Anda sudah memiliki
sistem pengguna seperti Active Directory,
bisa dihubungkan
dengan Firebase Authentication.
Itu memungkinkan Anda
mengautentikasi pengguna ke database.
Anda bisa menentukan
siapa yang boleh mengunggah foto
atau siapa yang boleh
menulis pesan chat atau tidak.
Jika Anda ingin menyediakan cara
agar orang bisa mencoba
aplikasi Anda sebelum mendaftar,
ada yang disebut akun anonim.
Mereka bisa menggunakan aplikasi Anda.
Itu akan otomatis membuat akun anonim.
Saat mereka mendaftar, kita akan
menghubungkan akun anonim mereka
dengan akun mereka yang sebenarnya.
Ini berarti semua pesan chat
yang mereka kirim
sebagai pengguna anonim,
begitu mereka masuk,
Anda bisa menunjukkan
riwayat semua pesan chat mereka.
Penghubungan antara pengguna anonim
dan pengguna yang mendaftar ini juga
berlaku lintas layanan jejaring sosial.

Chinese: 
比如Active Directory，你可以把它
与Firebase身份验证相关联
它就可以给你的用户
发布许可，访问数据库
你可以决定谁可以上传照片
谁可以写聊天信息
如果你想让人们
在他们注册前试用你的应用
我们有一种匿名账户
他们可以通过它来使用你的应用
它会自动生成一个匿名账户
等他们注册后
匿名账户就会与实际账户相关联
这就意味着，所有他们作为匿名用户时
发送的所有信息，当他们登录后
就可以显示
他们之前的聊天记录
如果用户用社交媒体账号登录
匿名账户也可以与之相关联

Portuguese: 
como o Active Directory, poderá juntar
com o Firebase Authentication,
e isso te permite autenticar seus usuários
no banco de dados.
Você pode dizer quem
tem permissão para enviar fotos
ou quem pode escrever
mensagens de chat ou não.
E se quiser oferecer um jeito
para que as pessoas
possam experimentar seu app
antes de se inscreverem,
temos essa coisa chamada contas anônimas.
Eles podem ir em frente e usarem seu app.
Isso irá automaticamente
criar uma conta anônima.
E quando eles se inscreverem,
iremos juntar suas contas anônimas
com a conta atual.
Isso significa que todas mensagens de chat
que eles mandaram como usuário anônimo...
uma vez que eles se inscreveram,
você será capaz de mostrá-los
o histórico de todas as mensagens de chat.
Essa junção de contas entre anônimos
e os usuários registrados funciona
em todos os provedores sociais também.

Spanish: 
puedes conectarlos 
con Firebase Authentication,
y lo que te permite hacer 
es autentificar tus usuarios
a la base de datos.
Puedes decidir a 
quién se le permite cargar fotos,
o quien puede escribir 
en los mensajes de chat.
Y si quieres proporcionar una manera
para que las personas puedan probar tu app
antes de registrarse,
tenemos algo que 
se llama cuentas anónimas.
Pueden utilizar tu aplicación.
Esto automáticamente te 
creará un usuario anónimo.
Y cuando se registren podemos enlazar
la cuenta anónima con su usuario real.
Lo que esto quiere decir es 
que todos los mensajes de chat,
que envían como usuario anónimo,
una vez que se han registrado
aparecerán en el historial
de sus mensajes de chat.
Este enlace entre cuentas 
anónimas y usuarios registrado
también funciona con 
los proveedores de redes sociales

Korean: 
여러분이 액티브 디렉터리 같은
사용자 시스템을 이미 가졌다면
Firebase 인증과 연결할 수 있어요
그럼 여러분의 사용자는 데이터베이스에서
인증할 수 있습니다
누가 사진을 올리거나
채팅 메시지를 쓰는 게 허용될까요?
만약 사람들이 로그인하기 전에
여러분의 앱을 쓰게 하려면
어떻게 해야 할까요?
그걸 익명 계정이라고 부릅니다
사용자가 앱을 사용하면
익명 계정이 자동으로 생깁니다
그리고 사용자가 로그인하면
익명 계정과 실제 계정이 연결됩니다
그 말은 익명 계정으로 보냈던
모든 채팅 메시지가 로그인 후에
사용자의 채팅 메시지 기록으로
남는다는 의미입니다
익명에서 로그인된 사용자로
연결하는 이 기능은
다른 SNS 간에도 가능합니다

Arabic: 
بإمكانك ربطه مع توثيق Firebase،
وما يسمح لك ذلك القيام به هو
توثيق مستخدميك إلى قاعدة البيانات.
بإمكانك الانطلاق وتحدد
من مسموح له بتحميل الصور
أو من مسموح له بكتابة
رسائل المحادثة أم لا.
وإذا أردت أن توفر
طريقة بحيث يجرب الناس
تطبيقك قبل الاشتراك،
لدينا هذا الشيء المسمى
حسابات مجهولة.
بإمكاننا الانطلاق واستخدام تطبيقك.
هذا سينشئ أوتوماتيكيًا
حساب مجهول.
وعندما يسجلوا دخول سننطلق
ونربط حساباتهم المجهولة
بحساباتهم الفعلية.
ما يعنيه هذا كل رسائل المحادثة
التي أرسلوها كمستخدمين مجهولين
عندما يسجلون دخول،
ستتمكن من الانطلاق وعرض
تاريخ لكل رسائل محادثاتهم لهم.
هذا الربط بين الحسابات المجهولة
والمستخدمين الذين اشتركوا يعمل بين
مزودي الوسائل الاجتماعية أيضًا

English: 
Directory, you can hook that up
with Firebase Authentication,
and what that allows you to
do is authenticate your users
to the database.
You can go ahead and say who
is allowed to upload photos
or who is allowed to write
chat messages or not.
And if you want to provide a
way so that people can try out
your app beforehand
before they sign up,
we have this thing called
anonymous accounts.
They can go ahead
and use your app.
That will automatically
create an anonymous account.
And when they sign
up, we will go ahead
and link their anonymous account
with their actual account.
What this means is all
of the chat messages
they sent as an anonymous
user-- once they've signed in,
you'll be able to go ahead and
show them the history of all
of their chat messages.
This linking of accounts
between anonymous
and the signed-up user works
across the social providers,
too.

Japanese: 
だからもう Active Directory のような
ユーザーシステムがある場合
それを Firebase 認証と接続でき
それでユーザーをデータベースに
認証してくれます
誰が写真のアップロードが許可されるかとか
チャットメッセージ書き込みの
許可・不許可を言えます
登録前に人々がアプリを
前もって試せる方法を提供したい場合
匿名のアカウントというものができます
彼らはどんどんアプリを使えます
それが自動的に匿名アカウントを作成します
そうして登録する時は
彼らの匿名アカウントと
実際のアカウントをリンクさせます
つまり 匿名ユーザーとして送った
チャットメッセージの全部が--
彼らがサインインしたら
彼らのチャットメッセージの全履歴を
彼らに表示できることになります
匿名と登録されたユーザーとの
アカウントのリンクは
ソーシャルプロバイダを渡っても機能します

Portuguese: 
Se alguém está logado no Twitter um dia,
e no próximo dia esquecem
que estão logados no Twitter,
eles tentam Facebook,
podemos juntar essas contas
e mostrar os dados
como se fossem a mesma pessoa,
porque eles são, mesmo se usarem
duas contas diferentes.
Para fazer isso, tudo que precisamos fazer
é fornecer um pouco de IU, certo?
Temos nosso back-end rodando
com Firebase Authentication.
Tudo que precisamos é de IU.
Precisamos de dois campos
para e-mail e senha, não é?
Um para e-mail, um para senha,
e um botão para enviar.
Espera, mas as pessoas
ainda não se inscreveram no nosso app
porque acabamos de fazê-lo,
então precisamos de um flow de inscrição.
E alguém vai esquecer a senha,
então precisamos de um jeito
para redefini-la.
Esqueça de senhas completamente.
Eu tenho conta no Google.
Tenho certeza que
alguns de vocês também tem,
então vamos fazer Google login
porque Firebase Authentication
oferecerá suporte a isso.
Mas talvez você não tenha conta no Google
e tenha uma no Facebook,
então vamos adicionar uma.

Indonesian: 
Jika seseorang login ke Twitter suatu hari
dan keesokannya mereka lupa mereka login
dengan Twitter dan mencoba Facebook,
kita bisa menghubungkan akun-akun ini
dan menyediakan data
seolah mereka adalah satu orang
karena memang begitu meski beda akun.
Untuk melakukan ini,
kita tinggal menyediakan sedikit UI, 'kan?
Kita punya backend
yang gunakan Firebase Authentication.
Yang kita butuhkan adalah sedikit UI.
Kita butuh dua bidang
untuk sandi email, 'kan?
Satu untuk email, satu untuk sandi,
dan satu tombol untuk memasukkannya.
Tapi mungkin mereka belum mendaftar
ke aplikasi kita karena baru dibuat.
Kita butuh tahapan mendaftar.
Seseorang mungkin lupa sandinya.
Jadi, kita butuh cara
untuk menyetel ulang sandi.
Atau, lupakan sandi.
Saya punya akun Google. Saya yakin
beberapa dari kalian juga punya.
Jadi, mari buat login Google
karena Firebase Authentication
mendukungnya.
Tapi mungkin Anda tak punya login Google.
Anda punya login Facebook.
Jadi, kita tambahkan itu.

English: 
If someone is logged in
with Twitter one day,
and the next day they
forgot that they logged in
with Twitter, they
try Facebook, we
can go ahead and link these
accounts together and provide
the data as if they were the
same person, because they
are, even if they use
two different accounts.
To do this, all we need to do
is provide a little bit of UI,
right?
We've got our backend running
with Firebase Authentication.
All we need is a
little bit of UI.
We need two fields for
email password, right?
One for email, one for password,
and one button to submit it.
Oh wait, but people
probably haven't actually
signed up for our app
because we've just made it,
so we'll need a sign up flow.
And someone's bound to
forget their password,
so we'll need a way to reset it.
Forget passwords
altogether, actually.
I have a Google account.
I'm sure some of you
have Google accounts,
so let's do Google login
because Firebase Authentication
will support that.
But maybe you don't
have a Google login
and you have a Facebook login,
so let's go ahead and add that.

Chinese: 
如果有人通过Twitter登录
后来他们忘记了曾经用Twitter登录
而是用Facebook的账户
我们会将这些账户全部连到一起
假设他们是同一个人
为他们提供数据
因为他们的确是一个人
虽然他们用了不同的账户
为了实现这一点
我们要做的是提供一个用户界面
对吗？
同时通过Firebase进行后台运行
我们现在需要在用户界面上花一些时间
我们需要两个输入框
来输入邮箱和密码
以及一个提交按钮
等一下，当人们实际上
可能没有注册我们的应用
因为我们刚刚把应用做好
我们需要一个注册流程
总是有人会忘记密码
我们需要有一个方法来重置密码
事实上，有人忘记了所有的密码
我有一个谷歌账户
我想你们中的一些人也有谷歌账户
让我们通过谷歌登录
因为Firebase身份验证支持它
但也许你没有谷歌账户
但是你有Facebook账户
我们把它也添加进来

Japanese: 
ある日誰かが Twitter でログインして
翌日 Twitter でログインしたことを忘れて
Facebook をやっても
私達はこれらのアカウントを繋げ
同一人のように データを提供できます
２つの異なるアカウントを使っても
実際同一人だからです
この為に私達がするのは
少しの UI を提供するだけです
バックエンドを Firebase 認証で
実行しているので
必要なのは少しの UI なのです
E メールパスワードの
２つのフィールドが必要です
１つは E メール用で １つはパスワード用
そしてそれを送信する１つのボタン
待って でも今作ったばかりだから
実際はアプリに登録してないでしょう
だから登録の流れが必要です
必ず誰かパスワードを忘れます
それで再設定の方法が要ります
実際パスワードをすっかり忘れなさい
私は Google アカウントを持っています
皆さんの中にも Google アカウントを
もっている人はきっといますね
では Google ログインをしましょう
Firebase 認証はそれを
サポートしていますから
ですが Google ログインが無くて
Facebook ログインがある人は
それを付けましょう

Spanish: 
Si alguien está conectado
con Twitter un día,
y al día siguiente se olvidan 
que lo hicieron con Twitter
y prueban Facebook;
podemos enlazar las cuentas
y dar la información 
como si fueran la misma persona
por que lo son, 
aunque usen dos cuentas distintas.
Para hacer esto,
todo lo que necesitamos 
es ofrecer un poco de UI,
¿sí?
Nuestro backend funciona 
con Firebase Authentification.
Solo necesitamos un poco de UI.
Necesitamos dos campos 
para mail y clave, ¿verdad?
Uno para el mail,
otro para la clave
y un botón para enviar.
¡Esperen! La gente no se ha 
registrado en nuestra app
porque la acabamos de construir,
así que necesitaremos 
un flujo de registro.
Y seguro alguien se olvida su clave,
y necesitaremos 
alguna manera de reiniciarlo.
Olvídate de 
las claves, directamente.
Tengo una cuenta de Google.
Seguro que algunos 
tienen cuentas de Google,
así que iniciemos sesión con Google
que Firebase Authentication soporta eso.
Pero tal vez no 
tienes un usuario de Google
y tienes Facebook, 
así que habilitemos ese también.

Korean: 
어느 날 누군가 Twitter로 로그인하고
다음 날 Twitter가 아니라
Facebook으로 로그인할 때
같은 사람이 맞는다면
이 계정들을 한데 연결해서
데이터를 제공합니다
계정이 다르더라도 같은 사람이니까요
사용자 인증을 하려면
우린 약간의 UI를 제공해야 합니다
그렇죠?
우린 Firebase 인증이 가능한
백엔드를 운영하고
UI만 조금 있으면 됩니다
이메일 비밀번호를 만들려면
필드가 2개 필요합니다
이메일과 비밀번호를 위한 필드와
둘을 제출하는 버튼 1개도 필요하죠
잠깐만요, 앱을 막 만들었다고 해서
사람들이 실제로 로그인하지 않을 겁니다
그래서 로그인 플로우가 필요합니다
비밀번호를 잊어버린 사용자를 위해서
재설정하는 방법도 필요합니다
우리 모두 비밀번호를 잊었다고 가정하죠
저는 Google 계정이 있고
여러분 중 몇 분도 있으리라 확신합니다
Google로 로그인하면
Firebase 인증이 지원할 것입니다
하지만 Google 로그인이 아니라
Facebook 로그인을 한다면
계속 추가해야 합니다

Arabic: 
إذا سجل أحدهم دخول
باستخدام Twitter يومًا ما،
وفي اليوم التالي نسي
أنه سجل دخول
بـTwitter وجربوا Facebook
بإمكاننا ربط هذه الحسابات سويًة وتوفير
البيانات كما لو كانوا
نفس الشخص، لأنهم كذلك،
حتى لو استخدموا حسابين مختلفين.
للقيام بذلك، كل ما نحتاج القيام به 
هو توفير القليل من واجهة المستخدم، صحيح؟
لدينا خلفيتنا تعمل مع توثيق Firebase.
كل ما نحتاجه القليل
من واجهة المستخدم.
نحتاج لحقلين للإيميل
وكلمة المرور، أليس كذلك؟
واحدة لللإيميل، وواحدة
لكلمة المرور، وزر للتسليم.
انتظر، ولكن الناس بالواقع
لم يشتركوا بتطبيقنا
لأننا صنعناه للتو،
لذا نحتاج لدفق من المشتركين.
وأحدهم سينيى كلمة مروره،
لذا سنحتاج لطريقة لإعادة تعيينها.
نسيان كلمات المرور كليًا، في الواقع.
لدي حساب Google.
متأكد من بعضكم لديه حساب Google،
لنقم بتسجيل دخول Google
لأن توثيق Firebase سيدعم ذلك.
ولكن ربما ليس لديك تسجيل دخول Google
ولديم تسجيل دخول Facebook،
لننطلق ونضيف ذلك.

Korean: 
그리고 파란 버튼과 빨간 버튼을
고르는 어제 이야기를 기억하세요?
Firebase 인증으로도 가능하니까
우리 계정들을 계속 연결해보죠
잠깐만요, Android에 연결하고
웹 앱도 만들려고 노력합니다
그래서 또 연결합니다
당연히 iOS도 잊어선 안 되니까
한 번 더 연결해야 합니다
이쯤 되면 여러분이 모든 선을
따라갈 수 있는지 모르겠어요
마치 스파게티처럼 변했어요
만약 이 모든 걸 실행한다면
총 15,000개의 선이 생겼습니다
좋아요, 이 무대에서
15,000개의 선을 실행합니다
지금 작동이 가능해요?
방금 무선 인터넷을 고쳤어요
아뇨
알았어요, 가지 마세요
Firebase UI 1.0을 오늘 출시했다고
알려드려서 기쁘니까요
이건 오픈소스 라이브러리로
우리가 방금 본 과정을 제공합니다
마치 스파게티 같죠
모든 걸 갖췄어요
맞춤 언어를 가졌으며

Spanish: 
Y, ¿quién va a recordar si 
aplastaron el botón azul
o el rojo el día anterior?
Así que vamos a enlazar nuestras cuentas
porque Firebase Authentification 
nos va a permitir hacer eso también.
¡Esperen!
Yo hice esto para Android
y tratamos de 
construir una aplicación web.
Así que tendremos
que hacerlo de nuevo.
Y no podemos 
olvidarnos de iOS,
así que tenemos que hacerlo nuevamente.
Para este punto no sé si están
haciendo seguimiento 
de todas estas líneas,
se está convirtiendo en spaghetti.
Hemos escrito como 15.000 líneas
si es que vamos a 
implementar todo nosotros.
15.000 líneas en el escenario ...
¿Funcionará esta vez?
- Acabo de solucionar 
el problema del inalámbrico.
- Bueno, no se vayan
porque me complace decirles que hoy
estamos lanzando Firebase UI 1.0
Es una biblioteca de código abierto que
cuenta con todas las funciones 
que acabo de mencionar
con todo ese spaghetti.
Usted obtiene todo.
Tiene temas personalizados y

Chinese: 
但是谁会记得前一天
他是按了蓝色按钮还是红色按钮
让我们把所有的账户相联系
因为Firebase身份验证允许我们这么做
等一下，这是我在安卓设备上的操作
我们在这里要构建一个网页应用
所以，我们需要从头来过
当然，我们也不能忘了iOS
我们需要再做一遍
到目前为止
我不知道你是否记得所有的代码
这有点像做一碗意大利面
我们编写了15000行代码
如果我们需要自己去执行所有的程序
好的，现场执行15000行代码
这一次一定能行，对吗？
我刚刚修复了无线的问题
不要
请大家不要离开
因为就在今天
我们将发布Firebase UI 1.0
它是一个开放源码库
它有我刚刚所提到的所有的功能
所有的“意大利面”
都会有
它有自定义主题

Indonesian: 
Siapa yang akan ingat
mengeklik tombol biru
atau merah pada hari sebelumnya?
Kita akan hubungkan akun-akun kita
karena Firebase Authentication juga
memungkinkan kita melakukan itu.
Tunggu, tapi aku buat ini untuk Android,
sedangkan kita coba membuat aplikasi web.
Jadi, kita harus membuatnya lagi.
Dan tentunya, jangan lupakan iOS.
Jadi, kita harus melakukannya sekali lagi.
Sampai di sini, entah Anda
masih mengikuti semua baris ini,
karena sudah jadi seperti spageti.
Kita pasti harus
menulis sekitar 15.000 baris
jika harus menerapkan semua ini sendiri.
Baik, 15.000 baris di panggung--
Pasti berhasil kali ini, 'kan?
Tidak.
Saya baru perbaiki
masalah nirkabelnya. Tidak.
Jangan pergi karena dengan senang
saya mengatakan,
hari ini, kami meluncurkan
Firebase UI 1.0.
Pustaka sumber terbuka
yang menampilkan semua aliran
yang baru saya lalui.
Semua spageti itu.
Anda mendapat semua itu.

Arabic: 
ومن سيذكر إذا
نقروا الزر الأزرق أو
الأحمر في اليوم السابق؟
لذا سننطلق ونربط حساباتنا
لأن توثيق Firebase سيسمح
لنا بالقيام بذلك أيضًا.
انتظر، لكنني رسمت ذلك لـAndroid
ونحاول بناء تطبيق ويب هنا.
لذا سيتوجب أن نقوم بهذا مجددًا.
وبالطبع أولًا لا يمكننا نسيان iOS،
لذا سيتوجب علينا القيام بذلك مرة أخرى.
وفي هذه المرحلة، لا أعلم إذا
كنت تتابع كل تلك المسارات،
إن الأمر يتحول لسباغيتي.
كتبنا ما يقارب 15,000 سطر برمجي
إذا ما قمنا بتطبيق هذا بنفسنا.
حسنًا، 15,000 سطر برمجي على المسرح--
سيعمل هذه المرة، أليس كذلك؟
أصلحت مشكلة اللاسلكي الآن.
كلا.
حسنًا، لا تغادر لأني سعيدة اليوم لأقول
أننا سنطلق واجهة مستخدم Firebase 1.0.
إنها مكتبة مفتوحة المصدر
فيها كل [غير مسموع]
ما مررت عليه--
كل تلك السباغيتي.
تملكها كلها.
فيها مظاهر مخصصة، وتعمل

Japanese: 
前日にクリックしたのが青いボタンか
赤いボタンか覚えている人はいますか？
それで 複数アカウントをリンクさせます
Facebook 認証はそれもさせてくれますから
待って だけどこれを 
Android の為に描いたの
ここでウェブアプリを構築しようとしています
だからもう一度やる必要があります
勿論 iOS を忘れる訳にはいきません
だからもう一度それをする必要があります
この時点で
皆さんがこれらの行全部に
ついて来れてるか分かりません
スパゲッティになっちゃってます
これを全部自分で実装するなら
15,000 行ほど記述しています
さて 舞台で 15,000 行--
今度は動くでしょうね？
今ワイヤレスの問題を直したよ
- いい？
- いや
帰らないで だって 今日
Firebase UI 1.0 を公開すると言えて
嬉しいんです
それはオープンソースライブラリで
今見た認証フローの全機能 --
あのスパゲッティの全部があります
その全部を取得します
カスタムテーマがあり

Portuguese: 
Quem irá lembrar se eles clicaram
no botão azul ou vermelho no dia anterior?
Então iremos juntar nossas contas
porque Firebase Authentication
nos permitirá fazer isso também.
Espere, mas eu fiz isso para Android
e estamos tentando
construir um app da Web aqui.
Então teremos que fazer de novo.
E é claro que não podemos esquecer do iOS,
então teremos que fazer mais uma vez.
E até aqui, não sei se você
tem acompanhado todas essas linhas,
está meio que virando macarrão.
Escrevemos mais ou menos 15.000 linhas
se fossemos implementar tudo nós mesmos.
Certo, 15.000 linhas no palco...
funcionará desta vez, não é?
Acabei de consertar
o problema do wireless.
Não.
Tá, bem, não vá
porque é com satisfação que digo
que hoje estamos lançando Firebase UI 1.0.
É uma biblioteca de código aberto
que possui todos os fluxos de autenticação
que acabamos de ver...
todo aquele macarrão.
Você recebe tudo aquilo.
Tem tema personalizado,

English: 
And who's going to
remember if they
clicked the blue button or the
red button the previous day?
So we'll go ahead
and link our accounts
because Firebase Authentication
will allow us to do that, too.
Oh wait, but I drew
this for Android
and we're trying to
build a web app here.
So we'll have to do it again.
And of course first
we can't forget iOS,
so we have to do
it one more time.
And at this point, I
don't know if you've
been keeping track of
all of these lines,
it's kind of turning
into spaghetti.
We've written something
like 15,000 lines
if we were to implement
all of this ourselves.
All right, 15,000
lines onstage--
it'll work this time, right?
FRANK VAN PUFFELEN: I just
fixed the wireless problem.
No.
KAT FANG: OK, well, don't leave
because I'm happy to say today
we're launching Firebase UI 1.0.
It's an open source
library which
features all of the [INAUDIBLE]
that I just went through-- all
of that spaghetti.
You get all of it.
It has customized
theming, and it works

Spanish: 
funciona para web, Android y iOS.
Así que puedes usar esto,
y tendrán todo el UIs que necesitas.
Hecho por el mismo equipo 
que construyó Firebase Authetication,
el servicio de backend,
sabes que tiene las mejores prácticas.
¿Qué les parece esto?
¿Creen que lo podemos hacer?
- Yo creo que sí.
- Excelente, volvamos al código.
Y parece que tener conexión 
a internet ayuda a tu demo.
Gracias por tenernos paciencia.
Prometo que no 
aumentamos ni una línea de código.
Solo encendimos el internet.
Así que lo primero que necesitamos es
conectar nuestro nuevo servicio,
el cuál funcionará ahora que 
nos conectamos al internet.
Esto, aquí, nos conecta 
a Firebase Authentication
y podemos configurar nuestro UI
para dar a Facebook 
y Google y el mail y contraseña,

Korean: 
웹, Android, iOS에서 작동합니다
다시 돌아가서, Firebase UI는
여러분께 필요한 모든 UI를 지원합니다
Firebase 인증과 백엔드 서비스를
개발한 팀에서 만든 UI로
최고의 노하우를 담았습니다
좋아요, 이제 작동되나요?
작동될 것 같아요?
가능합니다
그럼 코드로 돌아가죠
인터넷이 연결되서 데모를 볼 수 있겠어요
기다려주셔서 감사합니다
코드를 추가로 넣지 않겠습니다
방금 인터넷에 연결됐거든요
우리가 해야 할 첫 번째 일은
새 서비스를 연결하는 것으로
우린 방금 인터넷을 연결했습니다
이 명령어는 우리 계정과
Firebase 인증을 연결하고
UI 환경을 설정해서
Facebook과 Google
이메일 비밀번호 중에서

Chinese: 
它可以同时为网页，安卓和iOS服务
所以你可以把它拖拽进来
你会有你所需要的所有用户界面
它是由构建Firebase身份验证的同一小组的
后端服务构建的
所以说你知道它是最棒的
好了，怎么样？
你觉得我们可以做到吗？
我觉得我们可以
好的，让我们回到代码
它似乎与网络相连来帮助你的演示
感谢大家融入我们的唠唠叨叨
我保证不再加更多的代码了
我们只需要把互联网打开
好了，我们要做的第一件事是
连接我们的新服务
它现在可以用了
因为我们连接了互联网
把我们连接到了Firebase身份验证
我们也可以配置我们的用户界面
这样我们就可以提供Facebook
谷歌或密码邮箱

Arabic: 
من أجل الويب وAndroid وiOS.
لذا بإمكانك الانطلاق وإسقاطها،
وسيكون لديك كل واجهة
المستخدم التي ستحتاجها.
بناها نفس الفريق الذي
بنى توثيق Firebase،
الخدمة الخلفية، أنت تعلم
أن فيها أفضل الممارسات.
حسنًا، كيف هذا الآن؟
- أتظن أن بإمكاننا القيام بهذا؟
- أظن أن بإمكاننا.
حسنًا، لنعد للبرمجة.
يبدو أن الاتصال بالانترنت
يساعد عرضك.
شكرًا لاستحمالكم لنا.
أعدكم أننا لم نضف برمجة إضافية.
لقد شغلنا الانترنت للتو.
حسنًا، أول شيء سنحتاج القيام به
هو توصيل الخدمة الجديدة، التي
ستعمل الآت بما أننا
اتصلنا بالانترنت.
هذا هنا يصلنا بتوثيق Firebase،
وبإمكاننا أيضًا ضبط
واجهة المستخدم التي زودناها
كلمة مرور Facebook وGoogle والإيميل،

Indonesian: 
Memiliki tema yang bisa disesuaikan,
dan bekerja untuk web, Android, dan iOS.
Jadi, masukkan saja itu,
dan Anda akan mendapat
semua UI yang Anda butuhkan.
Dibuat oleh tim yang membuat
Firebase Authentication, layanan backend.
Jadi, Anda tahu
ada semua fitur terbaik di sana.
Bagaimana kalau ini?
- Apa kita bisa lakukan ini?
- Saya rasa bisa.
Mari kita kembali ke kode.
Sepertinya tersambung ke Internet
membantu demo kita.
Terima kasih sudah mau bersabar.
Saya janji kami tak tambahkan kode ekstra.
Hanya baru menyalakan Internet.
Hal pertama yang harus kita lakukan
adalah menghubungkan layanan baru,
yang akan bekerja
setelah kita terhubung ke Internet.
Ini menghubungkan kita
ke Firebase Authentication.
Kita juga bisa mengatur UI
untuk menyediakan
sandi email, Google, dan Facebook,

Portuguese: 
e funciona para web e Android e iOS.
Então você pode ir e usar isso,
e terá todas as IUs que precisa.
Foi construído pelo mesmo time
do Firebase Authentication,
o serviço back-end,
então você sabe que
tem as melhores práticas.
Certo, como isso está?
- Acha que conseguimos fazer isso?
- Acho que sim.
Certo, vamos voltar ao código.
E parece que conectar-se à internet
ajuda sua demonstração.
Obrigado por aguentarem conosco.
Prometo que não adicionamos
código extra. Só ligamos a internet.
Então a primeira coisa
que precisamos fazer
é conectar nosso novo serviço,
que funcionará agora
que nos conectamos à internet.
Isso aqui nos conecta
ao Firebase Authentication,
e também podemos configurar
nossa IU para que possamos
oferecer Facebook e Google
e e-mail/senha,

English: 
for web and Android and iOS.
So you can go ahead
and drop that in,
and you'll have all of
the UIs that you'll need.
It's built by the same team that
built Firebase Authentication,
the backend service,
so you know it
has all of the best practices.
All right, how's this?
You think we can do this?
FRANK VAN PUFFELEN:
I think we can.
KAT FANG: All right, let's
get back to the code.
And it seems that connecting to
the internet helps your demo.
Thanks for bearing with us.
I promise we've
added no extra code.
We just turned on the internet.
OK, so the first
thing we'll need to do
is connect our
new service, which
will work now that we're
connected to the internet.
This here connects us to
the Firebase Authentication,
and we can also configure
our UI so that we provide
Facebook and Google
and email password,

Japanese: 
ウェブと Android と iOS で動作します
それでそれを付けると
必要な UI 全部を持つことになります
Firebase 認証とバックエンドサービスを
構築したのと同じチームに構築されました
だからベストプラクティスの
全部があると分かります
これはどう？
私達はこれができると思う？
できると思う
では コードに戻りましょう
インターネットに接続すると
あなたのデモの助けになりそうよ
私達に我慢して頂きありがとうございます
余分なコードを加えていないと約束します
ただインターネットに繋いだだけです
まず する必要があるのは
新しいサービスに接続することです
インターネットに繋がったら
それは動作します
ここのこれで Firebase 認証に繋がります
また UI を設定できるので
Facebook と Google と E メール
パスワードを提供し

Arabic: 
سامحين للناس باختيار
أي مزود يعجبهم.
سننطلق ونهيئ واجهة المستخدم خاصتنا،
ونبدأها عندما نحمل الصفحة.
لذا إذا انطلقنا وحملنا الصفحة،
سنتمكن من تسجيل الدخول
بواسطة أي من مزودينا.
لننطلق ونبدأ ذلك.
انقر على Google هنا،
وبإمكاني السماح للتطبيق
أن يستخدم حساب Google
وتسجيل الدخول بتلك الطريقة.
لكن هذا غريب، لا يظهر اسمي،
وزر تسجيل الدخول لايعمل.
لذا نود أن ننطلق ونربطهم سويًة.
للقيام بذلك، سنتأكد أن المستخدم
سجل دخول أم لا.
للقيام بذلك، سنستخدم أسلوبًا مماثلًا
استخدمناه على قاعدة بيناتنا--
سنستخدم مستمعًا.
ولكننا هنا لا نستمع للابن
المضاف إلى قاعدة البيانات،
نستمع لحالة الإيقاف وعندما تتغير.
سنحصل على مستخدم Firebase
عندما يسجلون دخول،
وعندما يسجلون دخول،

Indonesian: 
memungkinkan orang memilih
penyedia layanan yang mereka suka.
Kita akan mengatur UI
dan memulainya saat lamannya sudah dimuat.
Jika memuat lamannya, kita bisa
masuk dengan layanan apa pun.
Mari kita lakukan itu.
Klik Google di sini,
dan saya bisa mengizinkan aplikasi
menggunakan akun Google saya
dan masuk dengan cara itu.
Tapi aneh, nama saya tak muncul,
dan tombol Logout tak berfungsi.
Kita akan menghubungkannya.
Untuk melakukan itu, kita harus periksa
pengguna kita sedang masuk atau keluar.
Untuk melakukan itu, kita akan
memakai metode serupa
dengan yang dipakai
untuk database, yaitu listener.
Tapi kita tak menyimak
class anak ditambahkan ke database.
Kita akan menyimak off state
dan kapan berubahnya.
Kita akan dapatkan
pengguna Firebase saat mereka masuk.
Jika mereka masuk, kita akan bisa

Korean: 
선호하는 방식을 고르게 합니다
그리고 UI 환경을 설정하면
페이지를 로딩할 때 UI가 작동됩니다
만약 페이지를 로딩하면
어떤 회사의 계정이라도
로그인할 수 있습니다
실제로 해볼까요
Google 로그인 버튼을 클릭해서
이 앱과 제 Google 계정을
연결하겠습니다
하지만 이건 이상하죠
제 계정은 실제 이름이 아니고
로그아웃 버튼도 실제 작동하지 않아요
그래서 이걸 작동시키려면
사용자가 로그인인지 로그아웃인지
점검해야 합니다
로그인 여부를 알기 위해서 
데이터베이스에서 사용했던
비슷한 도구를 쓰겠습니다
바로 수신기입니다
하지만 우린 데이터베이스에서
'child_added'를 수신하지 않고
해제 상태와 변화가 발생할 때 수신합니다
사용자가 로그인할 때
우린 Firebase 사용자를 인식합니다
로그인이 이뤄지면

Spanish: 
lo que permite a las personas 
escoger el proveedor que prefieran.
Ahora vamos a configurar nuestro UI,
y ejecutarlo cuando carguemos la página.
Así que si cargamos la página,
vamos a poder registrarnos con 
cualquiera de nuestros proveedores.
Hagamo eso.
Damos clic en Google aquí,
y puedo permitir a la aplicación
utilizar mi cuenta de Google 
e iniciar sesión de esa manera.
Lo extraño es que no muestra mi nombre,
y
el botón de cerrar sesión, no funciona.
Ahora tenemos que conectar esos.
Para poder hacerlo, tenemos que revisar si
el usuario está conectado o no.
Para ello, utilizaremos un método similar
al que usamos en la base de datos,
utilizaremos un oyente.
Pero no escuchamos a un 
evento aumentado a la base de datos.
Estamos escuchando el estado 
de apagado y cuándo ha cambido.
Obtendremos su usuario Firebase 
cuando se hayan conectado,
y si están conectados,

English: 
letting people choose
whatever provider they like.
We'll go ahead and
configure our UI,
and start it up when
we've loaded the page.
So if we go ahead
and load the page,
we'll be able to sign in
with any of our providers.
Let's go ahead and do that.
Click Google here, and
I can allow the app
to use my Google account
and log in that way.
But that's weird, it doesn't
actually show my name,
and the logout button
doesn't actually work.
So we'll want to go
ahead and wire those up.
In order to do that, we'll have
to check whether the user is
logged in or logged out.
To do that, we'll use a
similar method that we
used on the database--
we'll use a listener.
But here we're not listening for
a child added to the database,
we're listening for the off
state and when it has changed.
We'll get the Firebase user
when they're logged in,
and if they're
logged in, we'll be

Chinese: 
让人们决定他们喜欢的第三方
让我们来配置我们的用户界面
在加载页面的同时启动它
如果我们加载页面
我们可以用任何一个第三方登录
让我们开始吧
点击谷歌
就可以让我使用我的谷歌账户登录
但很奇怪，它没有显示我的名字
退出按钮有问题
我们需要修正它
要做到这一点，我们必须要查看
用户是登录状态还是退出状态
我们会使用在数据库中
使用过的一个类似的方法
我们会使用监听器
但在这里，我们不是监听
被添加到数据库中的子文件
我们监听离线状态
以及是在何时作出的改变
当他们登录时
我们会有一个Firebase用户列表
当他们退出时，我们可以将当前用户

Portuguese: 
deixando as pessoas escolherem
qual provedor elas gostam.
Seguiremos em frente
e configuraremos nossa IU,
e a ligaremos quando carregarmos a página.
Então se carregarmos a página,
seremos capazes de fazer login
com qualquer um dos nossos provedores.
Vamos em frente e fazer isso.
Clique em Google aqui,
e posso permitir que o app use
minha conta do Google e entrar assim.
Mas isso é estranho,
não mostra meu nome realmente,
e o botão de logout não funciona.
Então vamos conectar isso.
Para fazer isso, teremos que checar
se o usuário está logado ou não.
Para isso, usaremos um método similar
ao que usamos no nosso banco de dados...
usaremos um listener.
Mas aqui não estamos a procura
de um child_added no banco de dados,
estamos procurando um estado off 
e quando ele mudou.
Receberemos o usuário Firebase
quando eles estiverem logados,
e se eles estiverem logados,

Japanese: 
人々に好きなプロバイダを選択させます
では私達の UI を設定します
ページをロードした時
それを立ち上げます
だからページをロードすれば
プロバイダのどれとでもサインインできます
ではやってみましょう
ここの Google をクリックして
アプリを「許可」にでき
Google アカウントを使い
そんな風にログインできます
でも変　実際に私の名を表示しないし
ログアウトボタンが実は動作しません
では それを配線してみましょう
その為には ユーザーがログイン状態か
ログアウト状態か調べる必要があります
その為に データベースで使ったのと
同様のメソッドを使います--
リスナーを使います
でもここでは データベースに
child_added を聴いているのではなく
それが変わった時の
認証状態を聴いています
ログインしたら 
Firebase ユーザーを取得します
彼らがログインしてる場合

Spanish: 
podremos poner al usuario actual
como un usuario de Firebase.
Y si están desconectados, 
podremos limpiarlo.
Con este método podremos 
conocer las entradas de registro,
una vez más.
La última cosa que vamos a hacer
es permitirte cerrar sesión.
Así que vamos a aumentar un 
fragmento adicional de código,
y esto se comunicará directamente 
al servicio de Firebase Auth
y desconectará el 
usuario cuando aplasten
el botón de salida.
Así que si refrescamos la página
vamos a ver que mi nombre es Kat,
y podremos mandar un mensaje como yo.
¡Ay Frank!
Estaba tratando de prevenir este problema,
Muy bien,
pero ahora estamos dentro.
¿Qué pasa si quiero compartir una imagen?
Anoche cené esta deliciosa pizza,
me comí la media pizza solo yo.
y no es una pizza pequeña, 
es bastante grande.
y quiero compartirlo con todos mis amigas

English: 
able to set the current
user to the Firebase user.
And if they're logged out,
we'll go ahead and clear it.
And this method will go ahead
and show the login inputs
one more time.
The last thing we're
going to do is actually
allow you to log out.
So we'll add one
more snippet of code,
and this here will call directly
into the Firebase Auth service
and log out the user when
they've clicked the Log
Out button.
So if we refresh the
page, we'll actually
see that my name
is Kat, and we'll
be able to send a message as me.
Oh Frank, I was trying
to prevent this problem.
All right, but now
we've logged in.
Well, what if I want
to share an image?
I had this delicious pizza
for dinner last night.
I ate a whole half
of pizza myself.
And it's not a small pizza,
it's like a big pizza.
And I want to
share this with all

Portuguese: 
poderemos colocar o usuário atual
como usuário Firebase.
E se eles não estiverem logados,
iremos limpá-lo.
E este método nos mostrará
os login inputs mais uma vez.
A última coisa que faremos
é permitir que você saia.
Iremos adicionar mais um pedaço de código,
e ele chamará diretamente
o serviço Firebase Auth
e sair pelo usuário quando
o mesmo clicar no botão de logout.
Então se atualizarmos a página,
veremos que meu nome é Kat,
e poderemos enviar uma mensagem como eu.
Ah, Frank, estava tentando
evitar este problema.
Tá bom, mas agora entramos.
Bom, e se eu quiser
compartilhar uma imagem?
Eu comi uma pizza deliciosa
ontem no jantar.
Eu comi a metade da pizza sozinha.
E não é uma pizza pequena,
é tipo uma pizza grande.
E eu quero compartilhar isso

Indonesian: 
menentukan pengguna yang ada
saat ini menjadi pengguna Firebase.
Jika mereka keluar,
kita akan menghapusnya.
Metode ini akan menunjukkan
input login sekali lagi.
Hal terakhir yang akan kita lakukan
adalah memungkinkan Anda keluar.
Kita akan tambahkan
satu cuplikan kode lagi.
Di sini, kita akan langsung
memanggil layanan Firebase Auth
dan membuat pengguna keluar
saat mereka mengeklik tombol keluar.
Jadi, jika laman dimuat ulang,
kita bisa melihat nama saya adalah Kat,
dan kita akan bisa
mengirim pesan sebagai saya.
Frank, tadinya aku coba
mencegah masalah ini.
Baik, tapi sekarang, kita sudah masuk.
Bagaimana jika saya ingin membagi gambar?
Saya makan piza lezat semalam.
Saya memakan separuh piza itu sendirian.
Itu bukan piza kecil, itu piza besar.

Chinese: 
设置为Firebase用户
如果他们退出后
我们会把他们从列表中清除
这个方法可以再一次的显示
登录输入
我们要做的最后一件事是
让你可以退出
我们需要再添加一些代码片段
这将直接调用Firebase身份验证服务
当他们点击“退出”按钮时
用户会被退出
如果你刷新页面
我们可以看到我的名字叫做Kat
并且我们可以以我的名义发送信息
哦Frank，我正试图避免这个问题
好吧，现在我们登录了
如果
我想要分享一个图片会怎么样？
我昨天晚上吃了美味的披萨
我一个人吃了半个披萨
它不是一个小披萨
而是个大的
我想把它分享给我所有的朋友

Korean: 
Firebase 사용자 항목에
현재 사용자로 설정되고
로그아웃하면
현재 사용자 목록에서 사라집니다
그리고 이 도구는 로그인 입력을
한 번 더 보여줍니다
우리가 할 마지막 작업은
로그아웃을 하는 겁니다
코드의 짤막한 정보를 하나 더하겠습니다
이 코드는 Firebase 인증 서비스를
직접 사용해서
로그아웃 버튼을 클릭할 때
사용자를 로그아웃시킵니다
페이지를 새로 고친다면
제 실제 이름이 캣인걸 볼 수 있고
우리는 제 계정으로
메시지를 보낼 수 있습니다
프랭크 씨, 인터넷 문제를
막으려는 중이라고요
좋아요, 지금까지 로그인했고
만약 이미지를 공유하고 싶다면요?
어제 저녁으로 맛있는 피자를 먹었고
혼자서 절반을 먹었습니다
작은 피자가 아니라 이만큼 큰 피자였습니다
그리고 이걸 모든 친구들에게

Japanese: 
現行ユーザーを Firebase ユーザーに
設定できるのです
ログアウトしてる場合
それをクリアして
このメソッドはもう一度
ログイン入力を表示します
最後にやることは
実際にあなたにログアウトを
許可することです
だから もう１つコードの
スニペットを付けます
ここのこれは Firebase 認証サービスに
直接呼び出し
ログアウトボタンをクリックしたら
ユーザーをログアウトします
だからページを更新すると
私の名前 Kat がちゃんと見え
私としてのメッセージが送れるわけです
Frank 私はこの問題を
回避しようとしてたのよ
いいわ だけどログインしました
では 画像を共有したい場合は？
夕べ 夕食においしいピザを食べました
一人でピザを丸々半分食べたんです
小さいピザじゃなく大きなピザでした
これを友人達皆と共有して

Arabic: 
سنتمكن من وضع المستخدم
الحالي إلى مستخدم Firebase.
وإذا سجلوا خروج، سنزيلهم.
وهذا الأسلوب سيظهر
مدخلات تسجيل الدخول
مرة أخرى.
آخر ما سنقوم به في الواقع
هو السماح لك بتسجيل الخروج.
لذا سنضيف snippet برمجة أخرى،
وهذه ستستدعا مباشرة
في خدمة توثيق Firebase
وتسجيل خروج المستخدم عندما
ينقرون على زر تسجيل الخروج.
لذا إذا حدثنا الصفحة،
سنرى في الواقع اسمي كات،
وسنتمكن من إرسال رسالة بصفتي أنا.
فرانك، كنت أحاول أن أمنع هذه المشكلة.
حسنًا، لكن الآن سجلنا دخول.
حسنًا، ماذا لو أود أن أشارك صورة؟
تناولت هذه البيتزا اللذيذة
البارحة على العشاء.
أكلت نصف ببيتزا لوحدي.
وليست بيتزا صغيرة،
إنها كبيرة.
وأود أن أشارك هذا مع كل

Arabic: 
أصدقائي للقول، مرحبًا،
حتى أنا بإمكاني أكل نصف بيتزا.
للقيام بذلك، لا يمكنني المشاركة
على تطبيق الويب بعد.
أستطيعه أن أرسل،
رمز تعبيري صغير،
لكن عندها قد تظن
أنني أكلت قطعة فقط،
ولن ترى أنني مليئة بالخضراوات.
لمشاركة صورة فعليًا،
بإمكاننا استخدام تخزين Firebase.
هذا يسمح لنا باختيار اسم الملف
وتحميله للخادم أو السحابة،
بحيث يمكن مشاركتها
خلال تطبيقك.
بإمكانك مشاركة الصوت والفيديو أيضًا.
بإمكانك حتى إجراء نسخة
احتياطية لبيانات التطبيق.
إنها مدعومة من قبل
سحابة تخزين Google،
لذا إذا كنت تستخدم سحابة
تخزين Google مسبقًا،
ستكون متآلفًا مع الكثير من الأمور.
توفر التطوير الذي
ستحتاجه لتحميل بيتابايت من البيانات
إذا كان بإمكانك توليد هذا الكم،
ولكن لديها واجهة برمجة التطبيقات
Firebase فوقها.
هذا يعني أنك تحصل على تكامل مع
منتجات Firebase الأخرى، كالتوثيق.
بإمكانك تحديد أي مستخدم
يستطيع الرفع أم لا.

Japanese: 
「ね ピザを半分も食べれるの」と
言いたいのです
その為にはまだウェブアプリで
本当には共有できません
小さな絵文字位は送れるでしょうが
それなら私が１切れ食べたと思って
それが野菜が山盛りのピザだと
分からないでしょう
実際に画像を共有するには
Firebase ストレージを使えます
これでファイル名を選び
それをサーバーに クラウドに
アップできます
その結果それがアプリで共有されます
オーディオやビデオも共有できます
アプリデータのバックアップすらできます
それは Google Cloud Storage で
サポートされています
もう Google Cloud Storage 
を使ってる場合
これらをよく分かるでしょう
そこまで多く生成できるなら
ペタバイトのデータをアップするのに
必要となるスケーラビリティを提供します
だが その上に Firebase API の
レイヤーがあります
つまり「認証」のような Firebase 製品と
統合されています
どのユーザーがアップできるかできないか
言うことができて

Korean: 
"이거 봐, 피자 절반을 먹었어"
이렇게 말하고 싶어요
제 웹 앱으로는 아직 공유할 수 없죠
이모지 아이콘을 보낼 수 있지만
여러분은 피자 조각 1개라 생각하고
채소가 수북이 담긴 피자를
보지 못할 겁니다
이미지를 실제로 공유하려면
Firebase 저장소를 사용하세요
파일 이름을 선택해서
서버와 클라우드에 업로드하면
사진이 당신의 앱으로 공유됩니다
음성과 영상도 공유할 수 있어요
Google 클라우드 저장소에
애플리케이션 데이터 백업도 할 수 있죠
Google 클라우드 저장소를
이미 이용하고 있다면
많은 것에 익숙하실 거예요
이 저장소는 페타바이트에 달하는 데이터를
업로드할 때 필요한 확장성을 제공합니다
저장소 외에도 저장소를 이루는
Firebase API가 있습니다
이 말은 인증 기능처럼
Firebase의 다른 결과물과
통합할 수 있다는 뜻입니다
즉, 어떤 사용자가 업로드할 수 있는지

Indonesian: 
Saya ingin membaginya
dengan semua teman untuk menunjukkan
saya pun bisa memakan separuh piza.
Untuk melakukan itu, saya belum bisa
membaginya pada aplikasi web saya.
Saya bisa mengirim emoji kecil,
tapi nanti Anda pikir
saya hanya makan sepotong
dan tak bisa melihat
bahwa piza itu penuh sayuran.
Untuk berbagi gambar, kita bisa
menggunakan Firebase Storage.
Ini memungkinkan Anda memilih nama file
dan mengunggahnya ke server, ke awan,
agar dapat dibagi ke seluruh aplikasi.
Anda juga bisa membagi audio dan video.
Anda bahkan bisa
membuat cadangan data aplikasi.
Itu didukung Google Cloud Storage.
Jadi, jika pernah menggunakan
Google Cloud Storage,
Banyak hal ini tak akan asing bagi Anda.
Ini memberi skalabilitas
yang Anda butuhkan
untuk mengunggah data hingga petabyte,
jika bisa menghasilkan sebanyak itu,
tapi memiliki
lapisan API Firebase di atasnya.
Berarti Anda dapat integrasi
dengan produk Firebase lain,
seperti Authentication.
Anda bisa menentukan
pengguna mana yang bisa mengunggah.

Portuguese: 
com todos meus amigos e dizer,
olha até eu como metade de uma pizza.
Ainda não posso compartilhar
no meu app da Web.
Poderia mandar, um pequeno emoji,
mas aí você acharia que só comi uma fatia,
e não veria que estava cheia de vegetais.
Para realmente compartilhar uma imagem,
podemos usar Firebase Storage.
Isso permite que selecione
o nome do arquivo
e o envie para o servidor, para a nuvem,
para que possa ser compartilhado
por todo seu app.
Você também pode
compartilhar áudio, vídeo.
Pode ainda fazer application data backups.
É apoiado pelo Google Cloud Storage,
então se você já o usa,
estará familiarizado
com muitas dessas coisas.
Oferece a escalabilidade que você precisa
para enviar petabytes de dados
se você puder gerar tanto assim,
mas está sob camadas do Firebase API.
Isso significa que tem integração
com outros produtos Firebase,
como o Authentication.
Poderá dizer quais usuários
podem realizar envios ou não.

English: 
of my friends to say, hey, look
even I can eat a half a pizza.
To do that, I can't really
share on my web app yet.
I could send, like,
a little emoji,
but then you'd think
I just ate a slice,
and you wouldn't see that it
was heaped full of vegetables.
To actually share an image,
we can use Firebase Storage.
This allows you to
select the file name
and upload it to the
server, to the cloud,
so that it can be
shared across your app.
You can also share audio, video.
You can even perform
application data backups.
It's backed by
Google Cloud Storage,
so if you're already using
Google Cloud Storage,
you'll be familiar with
a lot of these things.
It provides the
scalability you'll
need to upload petabytes of data
if you can generate that much,
but it has the Firebase
API layered on top of it.
That means you get
integration with
the other Firebase products,
such as Authentication.
You can say which users
can upload or not.

Chinese: 
并且说：看，即使是我也可以吃半个披萨
现在我还不能在我的网页应用上分享这些
我可以点赞，发送一个表情包
但这样的话，你可能会认为我只吃了一小块
你也看不到披萨上堆满了蔬菜
要分享一个图片
我们可以使用Firebase储存
你可以选择文件名
把它上传到服务器，到云端
这样就可以在你的应用中分享了
你还可以分享音频和视频
你甚至还可以备份你的应用程序数据
它由谷歌云储存支持
如果你已经在使用谷歌云储存
我对这些事应该都很熟悉了
它为你提供了可扩展性
让你可以上传千兆字节的数据
如果你有那么多的数据的话
但它还有Firebase的应用程序界面
这就意味着
你可以和其他Firebase产品相整合
比如身份验证
你可以规定用户的上传权限

Spanish: 
para decirles cuanta pizza puedo comer.
Para esto, todavía no puedo 
compartir en mi aplicación web.
Podría enviar un pequeño emoji,
pero pensarías que solo comí una mitad,
y no verías que estaba 
repleta de vegetales.
Para compartir una imagen 
podemos usar Firebase Storage
Esto te permite 
seleccionar el nombre del archivo
y cargarlo en el servidor,
a la nube,
para que lo puedas 
compartir entre tus aplicaciones.
También lo puedes compartir audio, video.
Hasta pueden realizar copias de 
seguridad de la información de tu app.
Está respaldado por
Google Cloud Storage,
así que si ya usas 
Google Cloud Storage,
te será conocido muchas de estas cosas.
Te da escalabilidad que necesitarás,
para cargar petabytes de información
si puedes generar esa cantidad
pero, tiene el API de Firebase 
como capa encima del mismo.
Lo que quiere decir que obtienes integración
con el resto de Firebase
como Authentication.
Puedes decidir qué 
usuarios pueden cargar o no.

English: 
You can even go ahead
and say users are only
allowed to upload files
of 5 megabytes or less.
We'll also help you deal with
a couple of annoying edge cases
if you're on mobile.
And if you go into
intermittent connectivity
and things drop off, and
then you get connected again,
we'll go ahead and continue the
upload so that your files can
be shared across your app.
Let's see what it takes to
add this to our application.
Again, the first thing
we're going to do
is connect to the service.
Here, we're connecting
to Firebase Storage,
and we'll be using
a parallel structure
that we used for the database.
We'll be using the chat folder.
Here, what we've done before
is when someone selects a file,
we'll go ahead and
show a local preview.
We'll get rid of
that and actually
upload it to Firebase Storage.
So we use the filename that the
file actually has, and we just

Portuguese: 
Você pode até dizer que os usuários
só podem fazer upload de arquivos
com até 5 megabytes.
Também o ajudaremos a lidar
com alguns casos chatos de edge
se estiver no modo móvel.
E se entrar em conectividade intermitente
e as coisas caírem,
depois você é conectado de novo,
iremos continuar o envio
para que seus arquivos
possam ser compartilhados pelo seu app.
Vamos ver o que é preciso para
adicionarmos isso ao nosso aplicativo.
De novo, a primeira coisa que faremos
é nos conectarmos ao serviço.
Aqui, iremos conectar ao Firebase Storage,
e usaremos uma estrutura paralela
a que usamos para o banco de dados.
Usaremos a pasta do chat.
Aqui, o que fizemos antes foi
quando alguém seleciona um arquivo,
iremos mostrar uma prévia local.
Iremos nos livrar disso
e realmente o enviar
para o Firebase Storage.
Então usamos o nome real do arquivo

Spanish: 
Incluso puedes decir que los usuarios
solo pueden cargar archivos 
de 5 megabytes o menos.
También te ayudaremos con 
un par de casos molestos
si es que estás desde un móbil.
Y si vas a conectividad intermitente,
y las cosas se caen,
y luego te conectas nuevamente,
seguiremos con la carga
para que tus archivos
se puedan compartir entre tu aplicación.
Veamos que necesitamos 
para aumentar esto a tu aplicación.
De nuevo, 
lo primero que vamos a hacer
es conectarnos al servicio.
Estamos conectándonos a Firebase Storage,
y estaremos utilizando 
una estructura paralela
que usamos para la base de datos.
Usaremos el folder de chat.
Aquí, lo que hemos hecho antes es
que cuando alguien 
seleccione un archivo,
les mostraremos 
una vista previa local.
Dejaremos esto,
y lo cargaremos a Firebase Storage.
Utilizaremos el nombre de archivo
que tiene el archivo,

Chinese: 
你甚至可以规定
用户只可以上传比5兆字节小的文件
我们还会帮你处理一些烦人的特殊情况
如果你使用手机
信号不是很好
你被迫下线，又重新上线
我们会继续上传你的文件
这样文件就可以在应用中分享了
让我们看看怎样把这个功能
加入我们的应用
我们要做的第一件事是
连接到服务器
我们需要连接到Firebase储存
我们将使用平行结构
来运行我们的数据库
我们要使用聊天文件夹
我们之前做的是
当有人选择一个文件夹时
我们可以显示本地预览
我们无需再做这些
而把它上传到Firebase储存
我们使用文件本身的文件名

Korean: 
사용자가 5MB나 그 이하만
파일을 업로드할 수 있는지
설정이 가능합니다
모바일에 접속하시면
저희가 번거로운 경계 조건 두어개를
처리하는 걸 도와줄 것입니다
만약 연결이 불안정해서
끊어졌다가 연결되길 반복하면
업로딩을 계속 진행해서
앱으로 파일을 공유합니다
이걸 우리 애플리케이션에 추가하려면
뭐가 필요한지 보겠습니다
다시 와서, 우리가 먼저 할 일은
서비스에 연결하는 겁니다
지금 Firebase 저장소에 연결됐는데
우리가 데이터베이스에서 사용하는
병렬 구조를 사용할 거예요
채팅 폴더를 사용해보죠
미리 작업한 내용이 보이는데
누군가 파일을 선택하면
부분 프리뷰를 보여줍니다
저 부분을 삭제하고
Firebase 저장소에
실제로 업로드하겠습니다
파일이 실제로 가진 파일명을 이용해서

Japanese: 
アップできるのは MB 以下のファイルだけと
ユーザーに言うことすらできます
また モバイルモードの場合
イライラするエッジケースへの
対処も支援します
接続が断続的になって
落ちたり繋がったりする場合でも
私達はアップロードを続けるので
ファイルはアプリで共有できます
これを私達のアプリに付けるのに
どれだけかかるか見ましょう
再度 最初にすることは
サービスに接続です
ここで Firebase ストレージに接続して
データベース用に使った
並列構造を使用します
chat フォルダーを使います
ここで前にやったのは
誰かがファイルを選択する時
ローカルのプレビューを表示します
それを除去して
実際に Firebase ストレージに
それをアップします
だから実際のファイル名を使い

Arabic: 
بإمكانك حتى أن تقول أن المستخدمين
مسموح لهم رفع الملفات بحجم
خمسة ميغابايت أو أقل فقط.
سنساعدك على التعامل مع
بعض الحالات الحدية المزعجة
إذا كنت على الموبايل.
وإذا دخلت باتصال متقطع
واتقطعت الأمور، ومن
ثم عاد الاتصال مرة أخرى،
سنكمل التحميل بحيث يمكن لملفاتك
أن تشارك على تطبيقك.
لنرى ما الذي يتطلبه الأمر
لإضافة ذلك على تطبيقنا.
مرى أخرى، أول ما سنقوم به
هو الاتصال بالخادم.
هنا، نتصل بتخزين Firebase،
وسنستخدم تركيبًا موازيًا
استخدمناه لقاعدة البيانات.
سنستخدم مجلد المحادثة.
هنا، ما قمنا به سابقًا
أنه عندما يختار أحدٌ ما ملفًا،
سنعرض معاينة محلية.
سنتخلص من ذلك
ونحمل إلى تخزين Firebase فعليًا.

Indonesian: 
Anda bahkan bisa menentukan
pengguna hanya boleh
mengunggah file
sebesar hingga lima megabyte.
Kami juga akan bantu tangani
beberapa kasus tepi menyebalkan
pada perangkat seluler.
Jika koneksi Anda terputus-putus
dan semua terhenti,
lalu koneksi tersambung lagi,
proses pengunggahan akan dilanjutkan
agar file Anda bisa dibagi
ke seluruh aplikasi.
Mari kita lihat apa yang dibutuhkan
untuk menambahkan ini ke aplikasi.
Sekali lagi, hal pertama yang akan
kita lakukan adalah menyambung ke layanan.
Di sini, kita terhubung
ke Firebase Storage,
dan akan menggunakan struktur paralel
yang kita gunakan untuk database.
Kita akan menggunakan folder chat.
Di sini, yang sudah kami lakukan
adalah saat seseorang memilih file,
kita akan menunjukkan pratinjau lokal.
Kita singkirkan itu
dan unggah ke Firebase Storage.

Arabic: 
لذا نستخدم اسم الملف الذي
يملكه الملف، ونضع الملف وحسب.
سترى هنا أنه أعدنا
إلى مهمة رفع،
وبمهمة الرفع هذه
بإمكاننا ملاحقة تقدم-- ربما حتى
عرض شريط تقدم.
في هذه الحالة، سنستمع
عندما يكتمل رفع الملف.
عندما يكتمل رفع الملف،
سنحصل على URL التنزيل.
هذا الـURL عام.
هذا يعني أنه بإمكاني مشاركته معك.
ستتمكن من الحصول على الصورة.
ولكن إذا لم يكن لديك، حتى لو
كنت تعلم اسم ملفي،
لن تتمكن من الوصول إليه.
لا يمكن حزره.
سنستخدم URL التنزيل بعرض
معاينة للصورة، التي بعدها،
عندما ننقر على زر تسليم
سنتمكن من أخذها وإرسالها
إلى قاعدة البيانات.
وهذه خدعة رائعة لمشاركة الصور.
حال ما يرفع أحدهم، نضعه في قاعدة البيانات
وسنتمكن من رؤيتها
عبر الأجهزة الأخرى.

Japanese: 
そのファイルを「置く」だけです
uploadTask が返されるのが
ここに見えます
この uploadTask で
進行状況を追跡することができます--
プログレスバーすら表示されたりします
この場合 私達はただ進んで
ファイルのアップロートが完了する時を
聴くだけです
ファイルのアップロートが完了すると
downloadURL を取得します
この URL は公開 URL です
つまり それを皆さんと共有できます
皆さんはその画像を得ることができます
だがそれが無い人の場合
たとえ私のファイルの名前を知っていても
それにアクセスできません
それは推測不能です
この downloadURL を
画像のプレビュー表示に使います
そうして 「送信」ボタンを押すと
それを拾ってデータベースに送れます
それが画像共有の素敵で巧妙なトリックです
アップされるとすぐ
それをデータベースに入れ
他のデバイスで
それを見ることができます

Spanish: 
y solo pondremos el archivo.
Verás que nos devuelve una tarea de carga
y con estas tarea de carga, 
podemos rastrear el proceso ...
incluso mostrar una barra del progreso.
En este caso, solo vamos
a escuchar cuando la carga 
del archivo se ha completado.
Cuando el archivo ha completado la carga,
obtendremos el URL de descarga.
Está URL es pública.
Lo que quiere decir que 
la puedo compartir contigo.
Y puedes recibir la imagen.
Pero si no lo tienes, aunque
sepas el nombre de mi archivo,
no tendrás acceso.
Es imposible.
Usaremos esta URL de descarga para mostrar
una vista previa de la imagen, 
que cuando, aplastemos el botón enviar
podremos recogerla 
y enviarla a la base de datos.
Y esto es tan solo un truco 
genial para compartir imágenes.
Tan pronto una se carga,
la ponemos en la base de datos,
y podremos verla a través 
de otros dispositivos.

English: 
put the file.
You'll see here that we get
returned an upload task,
and with this
upload task, we can
go ahead and track the
progress-- maybe even
show a progress bar.
In this case, we're just
going to go ahead and listen
for when the file has
completed the upload.
When the file has
completed the upload,
we'll get the download URL.
This URL is a public URL.
That means I can
share it with you.
You'll be able to get the image.
But if you don't
have it, even if you
know what the name
of my file is,
you won't be able to access it.
It's unguessable.
We'll use this
download URL to show
a preview of the image, which
then, when we press the Submit
button, we'll be able to pick
up and send to the database.
And that's just a cool, neat
trick for sharing images.
As soon as one uploads, we
put it into the database
and we'll be able to see it
across the other devices.

Indonesian: 
Jadi, kita menggunakan nama file
yang sebenarnya, dan letakkan file.
Anda lihat di sini, kita punya uploadTask.
Dengan uploadTask ini,
kita bisa melacak progresnya,
bahkan mungkin menunjukkan bilah kemajuan.
Dalam hal ini, kita hanya akan menyimak
kapan file itu selesai diunggah.
Saat file sudah selesai diunggah,
kita akan mendapat URL untuk mengunduhnya.
URL ini adalah URL publik.
Berarti, bisa saya bagikan dengan Anda.
Anda akan bisa mendapat gambar itu.
Tapi jika Anda tak punya URL itu,
meski tahu nama file saya,
Anda takkan bisa mengaksesnya.
Tak bisa ditebak.
Kita akan menggunakan URL unduh ini
untuk menunjukkan pratinjau gambar.
Saat tombol Submit ditekan,
kita bisa mengambil
dan mengirim ke database.
Itu trik keren untuk berbagi gambar.
Begitu seseorang mengunggah,
kita memasukkannya ke database.
Kita bisa melihatnya di perangkat lainnya.

Chinese: 
我们只需要将文件存进去
在这里你可以看到
我们返回了一个上传任务
对这个上传任务
我们可以追踪进程
甚至显示一个进程条
在这个例子中，我们只需要监控
文件什么时候完成上传
当文件完成上传后
我们就有了一个下载链接
这是一个公共的下载链接
这就意味着我可以与你分享
你就可以收到图像了
如果你没有收到链接
即使你知道我文件的文件名
你也没有办法访问它
这真的是猜不透
我们将使用这个下载链接
来显示一个图片预览，然后点击“提交”按钮
我们就可以选择它，把它上传到数据库
这真是一个很酷，很方便的分享图片的技巧
只要有人上传它
我们就会把它放到数据库中
我们就可以在不同的设备上访问它

Korean: 
파일을 올립니다
여기를 보시면 업로드 테스크로 돌아와서
이 업로드 테스크의
진행 표시줄을 보여주면서
그 과정을 추적합니다
이 경우 파일의 업로드가
끝날 때를 알려줍니다
파일의 업로드가 끝나면
URL을 다운로드 할 것입니다
이 URL은 공공 URL로
전 이미지를 여러분과 공유하고
여러분은 이미지를 받을 수 있죠
하지만 URL을 모른다면
심지어 제 파일명만 몰라도
그 파일에 접근할 수 없습니다
무슨 파일인지 알 수 없거든요
다운로드한 URL을 사용해서
이미지의 프리뷰를 보여드릴 텐데
우리가 제출 버튼을 누르면
이미지를 가져와서
데이터베이스로 보낼 수 있습니다
이미지를 공유하기에 멋지고 좋은 방법이죠
누군가 업로드하자마자
우리는 데이터베이스로 넣어서
다른 기기에서 볼 수 있습니다

Portuguese: 
e só colocamos o arquivo.
Verá aqui que recebemos retorno
como um uploadTask,
e com esse uploadTask,
podemos rastrear o progresso...
talvez até mostrar uma barra de progresso.
Nesse caso, vamos em frente e escutaremos
para quando o arquivo completar o envio.
Quando o envio estiver completo
receberemos downloadURL.
Esta URL é uma URL pública.
Significa que posso compartilhar com você.
Você poderá receber a imagem.
Mas se você não a tiver,
mesmo se souber o nome do meu arquivo,
você não poderá acessá-lo.
Não pode ser adivinhado.
Usaremos essa downloadURL
para mostrar uma prévia da imagem,
o que depois, ao pressionarmos Submit,
podemos pegá-la 
e enviar ao banco de dados.
E esse é um truque legal,
de compartilhar imagens.
Assim que uma é enviada,
a colocamos no banco de dados
e podemos vê-la pelos outros dispositivos.

Spanish: 
¿En realidad quieres compartirla?
Aplastamos enviar,
Muy bien, aquí vamos.
Perfecto, ahora tenemos 
a nuestros unicornios
por todas partes vomitando arcoiris.
Perfecto.
Así que tenemos nuestra aplicación web.
Lo único que necesitamos 
es compartirla con la gente.
Vamos a desplegarlo a la web.
Esto es posible 
gracias a Firebase Hosting.
Firebase Hosting es 
un servicio gratuito de hosting
para archivos estáticos.
Viene con SSL,
así que si alguna vez han instalado SSL,
saben que es un lío.
Es gratuito.
La gente sabrá que se
conectan a tu página web.
Otra cosa que obtienen gratis es un CDN.
Los usuarios, sin importar dónde están,
tendrán acceso a tus archivos rápidamente.

Indonesian: 
Mau benar-benar membaginya,
menekan tombol Submit?
Terima kasih.
Ya, itu dia.
Sekarang, unicorn kita ada
di mana-mana, mengeluarkan pelangi.
Sempurna.
Jadi, kita punya aplikasi web.
Kita tinggal membaginya
dengan orang-orang.
Mari kita pindahkan ke web.
Kita bisa melakukan ini
dengan Firebase Hosting.
Firebase Hosting adalah
layanan hosting gratis untuk file statis.
Dilengkapi dengan SSL.
Jadi, jika belum pernah mengatur SSL,
Anda akan tahu itu agak rumit.
Anda akan mendapatkannya dengan gratis.
Orang akan tahu mereka terhubung
ke situs web Anda.
Satu hal lagi yang Anda dapat
dengan gratis adalah CDN.
Jadi, pengguna Anda,
di mana pun mereka berada,
akan bisa mengakses
file Anda dengan cepat.

Chinese: 
如果你想要分享它，点击“提交”按钮
就是这样
好了，现在到处都是
在吐彩虹的独角兽了
完美！
我们有了网页应用
我们要做的事是把它分享给大家
让我们把它发布到网页上
我们可以使用Firebase托管
Firebase托管是一个免费对静态文件
托管的服务
它自带SSL，如果你以前设置过SSL
你会知道它有一点麻烦
你免费的拥有它
人们会知道
他们被连接到了你的网站
你还会获得一个免费的CDN
无论你的用户在哪里
都可以快速的访问你的文件

Portuguese: 
Você quer mesmo compartilhar,
pressione o botão de Submit.
Sim, lá vamos nós.
Agora temos nossos unicórnios
em todo lugar vomitando arco-íris.
Perfeito.
Então temos nosso app da Web.
A única coisa que precisamos fazer
é compartilhar com as pessoas.
Vamos implantá-lo na Web.
Podemos fazer isso com o Firebase hosting.
Firebase hosting é um serviço gratuito
de hospedagem para arquivos estáticos.
Vem com SSL, então se você
já montou SSL antes,
saberá que é um pouco complicado.
Você o terá de graça.
As pessoas poderão saber
que estão se conectando ao seu website.
Mais uma coisa que você ganha é um CDN.
Então seus usuários,
onde quer que estejam,
poderão acessar seus arquivos rapidamente.

English: 
You want to actually share
it, press the Submit button.
Yeah, there we go.
All right, so now
we got our unicorns
everywhere barfing rainbows.
Perfect.
So we have our web app.
The only thing we need to
do is share it with people.
Let's deploy it to the web.
We can do this with
Firebase hosting.
Firebase hosting is a
free hosting service
for static files.
It comes with SSL, so if
you've ever set up SSL before,
you'll know it's a
little bit of a hassle.
You get it for free.
People will be able
to know that they're
connecting to your website.
One more thing you
get for free is a CDN.
So your users,
wherever they are,
will be able to access
your files quickly.

Arabic: 
سترغب أن تشاركها،
اضغط على زر تسليم.
أجل، ها أنت ذا.
حسنًا، الآن نحصل على
وحيد قرننا الخرافي
ينشر قوس قزح في كل مكان.
رائع.
لدينا تطبيق الويب خاصتنا.
الأمر الوحيد الذي نحتاجه
القيام به هو مشاركته مع الناس.
لننشره على الويب.
بإمكاننا القيام بذلك على
استضافة Firebase.
استضافة Firebase هي
خدمة استضافة مجانية
للملفات الثابتة.
تأتي مع SSL، لذا إذا
استخدمت SSl سابقًا،
ستعلم أنها صراع.
تحصل عليها محانًا.
سيتمكن الناس من أنهم
يتصلون بموقع الويب.
ما تحصل عليه مجانًا أيضًا
هو شبكة توصيل المحتوى.
بحيث مستخدميك،
أينما كانوا،
سيتمكنون من الوصول لملفاتك بسرعة.

Japanese: 
実際に共有をやって
「送信」ボタンを押してみるの？
ええ 出ました
はい ユニコ―ンが出て
虹をいっぱい吐き出してます
完璧
だから 自分のウェブアプリがあります
やる必要がある唯一のことは
それを人と共有することです
それをウェブにデプロイしましょう
これは Firebase ホスティングで可能です
Firebase ホスティングは静的ファイル用の
無料のホスティングサービスです
SSL が付属しているので
以前に SSL を設定したことがあるなら
ちょっと厄介だと知ってるでしょう
あなたはそれを無料で得ます
人々は それらがあなたのウェブサイトに
接続すると知ることができます
もう１つ無料なのは CDN です
だから ユーザーはどこにいても
あなたのファイルに素早くアクセスできます

Korean: 
정말 공유하고 싶으면 제출 버튼을 눌러요
자, 됐어요
좋아요, 이제 우리는 무지개를
아무 데나 토하는 유니콘을 가졌어요
완벽해요
우리는 웹 앱을 가졌고
유일하게 필요한 건
웹 앱을 공유하는 것뿐입니다
웹 앱을 웹에 배포하죠
Firebase 호스팅으로
웹 앱을 배포할 수 있어요
Firebase 호스팅은 정적 자원을 위한
무료 호스팅 서비스입니다
이건 SSL을 포함하고 있고
예전에 SSL을 설치했다면
약간 귀찮은 상황이란 걸 아실 거예요
여러분은 이걸 무료로 얻었고
사람들은 당신의 웹사이트에
자신이 연결됐다는 걸 알 수 있겠죠
또 하나 무료인 건 CDN입니다
그래서 사용자는 어디서든
여러분 파일에 빨리 접근할 수 있을 겁니다

Chinese: 
我们只需要使用Firebase配置
然后文件就被放到了网上
这就是构建一个多平台应用所需要的一切
不需要花很多的时间
Thomas坚持说要用45分钟
但我们已经完成了，对吗？
是吗？
我觉得是呀
Thomas，我不知道
哎，算了
好吧
大家好，我是Thomas
我负责这个组的后端开发
作为一个后端开发者
当我的组员们开始使用Firebase后
我的工作量变少了
我在这里要讲一些原因
为什么你仍然需要一些后端代码
即使是你构建了一个Firebase应用
主要有三个原因
首先，你可能会需要共享的业务逻辑

Arabic: 
للقيام بذلك، كل ما نحتاج
القيام به هو نشر Firebase،
ومن ثم إنها على الويب.
هذا كل ما في الأمر لبناء
تطبيق عبر المنصات.
ولم نأخذ الكثير من الوقت.
ولكن أصر توماس على
أن يكون لدينا 45 دقيقة،
ولكننا انتهينا، أليس كذلك؟
أجل؟
أظن ذلك.
توماس، لا أعلم.
حسنًا، لا بأس.
حسنًا.
أنا توماس.
أنا مطور الخلفية المحلية
ضمن هذه المجموعة.
وكمطور خلفية، إنه صحيح
أنه لدي عمل أقل للقيام به
عندما يستخدم فريقي Firebase.
ولكنني هنا اليوم للحديث
عن بعض الأسباب لمَ
ربما تظل ترغب بإضافة
برمجة خلفية حتى
عند بناء تطبيق Firebase.
يوجد ثلاثة أسباب رئيسية.
أولًا، ربما ترغب أن يكون
لديك منطق عمل تشاركي--

English: 
To do that, all we need
to do is Firebase deploy,
and then it's on the web.
So that's all it takes to build
a cross-platform application.
And we've only
taken-- not that long.
But Thomas here insisted that
we have a 45-minute slot,
but we're done right?
Yeah?
FRANK VAN PUFFELEN: I think so.
KAT FANG: Thomas, I don't know.
OK, fine.
THOMAS BOULDIN: OK.
Hi, I'm Thomas.
I'm the local backend
dev amongst this group.
And as a backend
developer, it's true
that I have less work to do
when my team uses Firebase.
But I'm here today to talk
about some reasons why
you might still want to
add backend code even
when you build a Firebase app.
There's three primary reasons.
First of all, you might want
to have shared business logic--

Portuguese: 
Para fazer isso, tudo que precisamos fazer
é o Firebase deploy, e depois está na web.
É tudo o que se precisa para construir
um aplicativo cross-platform.
E só demoramos... nem tanto assim.
Mas Thomas insistiu que tivéssemos
um tempo de 45 minutos,
mas já terminamos, certo?
Não é?
Acho que sim.
Thomas, não sei.
Tá bom.
Certo.
Oi, sou o Thomas.
Sou o desenvolvedor local
de back-end deste grupo.
E como um desenvolvedor back-end,
é verdade que tenho menos trabalho a fazer
quando minha equipe usa Firebase.
Mas estou aqui hoje para falar
sobre algumas razões
do porquê você ainda pode querer
adicionar código back-end,
mesmo quando constrói um app Firebase.
Existem três razões principais.
Primeiro, você talvez queira
ter uma lógica de negócios compartilhada,

Korean: 
Firebase로 배포하기만 하면
파일이 웹에 올라갈 것입니다
교차 플랫폼 애플리케이션을
만들려면 필요한 걸 알아봤습니다
그렇게 오래 하진 않았지만
토마스 씨가 우리 강연 시간이
45분이라고 했으니까
이제 마쳐야겠죠?
맞죠?
저도 그렇게 생각해요
토마스 씨, 잘 모르겠어요
네, 좋아요
알았어요
안녕하세요, 토마스입니다
저는 Firebase의
지역 백엔드 개발자입니다
그리고 전 백엔드 개발자라서
우리 팀이 Firebase를 사용할 때
할 일이 적은 게 사실이에요
하지만 오늘 전 여기서
심지어 Firebase 앱의 개발자라도
백엔드 코드를 왜 여전히
추가하고 싶은지 말할 거예요
주요 이유는 3가지입니다
첫째, 공유 비즈니스 로직을 원합니다

Indonesian: 
Untuk melakukan itu,
kita tinggal gunakan firebase deploy,
dan file akan ada di web.
Hanya itulah yang dibutuhkan
untuk membuat aplikasi lintas platform.
Kita hanya memakan waktu-- Tak selama itu.
Tapi Thomas bersikeras
bahwa kita punya waktu 45 menit.
Tapi kita sudah selesai, 'kan? Ya?
Sepertinya begitu.
Thomas, entahlah.
Baiklah.
Baik.
Saya Thomas. Saya pengembang
backend lokal di grup ini.
Sebagai pengembang backend, memang benar
tugas saya lebih sedikit
saat tim saya menggunakan Firebase.
Saya hadir untuk bicarakan
alasan Anda mungkin masih ingin
menambahkan kode backend
meski sedang membuat aplikasi Firebase.
Ada tiga alasan utama.
Pertama, mungkin sebaiknya
Anda punya logika bisnis bersama.
Sesuatu yang akan mengubah
dan otomatis diterapkan

Spanish: 
Para ello, todo lo que 
necesitamos es Firebase Deploy
y listo, está en la web.
Eso es todo lo que se necesita
para construir una 
aplicación multi-plataforma.
Y no nos hemos demorado tanto.
Pero Thomas insiste que 
tenemos un espacio de 45 minutos,
pero lo hemos hecho bien ¿sí?
¿Verdad?
- Creo que sí
- Thomas, no sé...
Está bien.
- Ok.
Hola, yo soy Thomas.
El desarrollador de 
backend local en este grupo.
Y como desarrollador 
del backend, es cierto
que tengo menos trabajo que hacer
cuando mi equipo usa Firebase.
Pero hoy estoy aquí para 
darles razones por las que
quisieran aumentar código de backend,
a pesar de haber hecho 
su aplicación con Firebase.
Hay tres razones principales-
Primero,
podrían querer tener 
lógica de negocio compartida,

Japanese: 
その為に必要なのは
Firebase デプロイだけで
するとウェブに載ります
クロスプラットフォームのアプリ構築に
必要なのはこれだけです
そうしてかかった時間は-- 
そんなに長くありません
だけど Thomas は４５分の
時間枠だと主張しました
でも 正しくやりましたよね？
でしょ？
そう思うよ
Thomas どう？
OK いいわ
はい
やあ Thomas です
私はこのグループの
ローカルバックエンド開発者です
バックエンド開発者の私は
チームが Firebase を使う時
確かにやる仕事が少ないです
だが 今日ここで
Firebase アプリを構築する時
なぜ皆さんがやはり
バックエンドコードを付けたがるか
お話します
主な理由は３つあります
第１に 共有ビジネス論理を持ちたい場合--

Arabic: 
شيء سيغير ويطبق أوتوماتيكيًا
لجميع زبائنك، بغض النظر
عن نسخة التطبيق التي يستخدمونها.
ثانيًا، ربما ترغب بالحصول
على برمجة موثوقة.
ربما ترغب أن تقوم بشيء
لا يستطيع زبائنك
ولا يجب عليهم القيام بهم بأنفسهم.
وثالثًا، ربما ترغب بالتكامل
مع الخدمات الأخرى
لتمكين ميزات رائعة جديدة لتطبيقك.
الأن، في Google لدينا
منصة Google السحابية.
والتي تتكامل بشكل رائع مع Firebase،
وتدعم بعض التطبيقات المذهلة
كـSnapchat و Spotify.
ولدينا عدد من الطرق التي
تمكنك من استضافة برمجة خلفية.
تتراوح من أمور تسمح لك
بالحصول على تحكم دقيق ببنيتك التحتية
لأمور بسيطة للغاية وتزيل
كل حاجات البنية التحتية منك،
كمحرك تطبيقات Google،
والذي سنستخدمه اليوم.
اليوم سنبني تطبيقًا
باستخدام البيئة المرنة
لمحرك التطبيقات.
بهذا، بإمكاننا أن نطوّر
محليًا تطبيق عقدة،
نختبره، ونتأكد أننا نحبه،
وعندما نجهز،

Japanese: 
つまり 顧客がどのバージョンの
アプリを使おうと関係なく
変化して顧客全員に自動的に
適用されるものです
第２に 何か信頼できるコードが欲しい場合
クライアントが自分ではできないし
できないようにすべきな場合です
第3に 他のサービスと統合し
アプリにスゴイ素敵な機能を可能にしたい場合
さて Google には 
Google Cloud Platform があります
それは Firebase とうまく統合し
Snapchat や Spotify のような
素晴らしいアプリを強化します
私達は皆さんがバックエンドコードを
ホストできる様々な方法を有しています
インフラの詳細な
コントロールができるものから
非常に単純で
全てのインフラの必要性を取り除いて
くれるものまであり
例えば Google App Engine で
それを今日私達は使います
今日私達は App Engine の 
flexible environment を使います
これで ローカルでノードアプリを開発し
テストし 気に入るようにでき

Chinese: 
你改变了一些设置后
想让它自动的应用到你所有的客户端
无论他们在使用那个版本的应用
第二，你可能会想要一些可信代码
你可能会进行一些操作
你的用户不应该，也不能做的操作
第三，你可能会想要与其他的服务整合
让你的应用有一些很棒的新功能
在谷歌，我们现在有了谷歌云平台
它与Firebase 整合的很好
它被许多很棒的应用
如Snapchat和Spotify所使用
运行后台代码有很多的方法
这些方法中
有的让你很好的控制基础框架
有的很简单
省去你对有关于基础框架的需求
比如Google App Engine
我们今天用的也是它
今天我们将使用App Engine
来构建一个灵活的环境
你可以在本地开发一个节点应用
测试它，确保我们喜欢它，
当我们准备好了以后

Spanish: 
algo que puede cambiar 
y automáticamente se aplicará
a todos sus clientes,
sin importar la versión de la 
aplicación que estén utilizando.
Segundo,
pueden necesitar un poco 
de codificación de confianza
Puede ser que quieran hacer algo
que sus clientes no pueden 
y no deberían poder por sí solos.
Y tercero, puede que quieran 
integrarlo con otros servicios
para habilitar nuevas e increíbles 
características a tu aplicación.
Ahora, en Google 
teníamos Google Cloud Platform
que se integra súper bien con Firebase,
y soporta aplicaciones increíbles
como Snapchat y Spotify.
Y tenemos una serie de maneras 
para hospedar código de backed.
Desde cosas que les permitirán tener
un control detallado 
de su infraestructura
a cosas tan sencillas que
quita la necesidad de infraestructura
como Google App Engine,
que utilizaremos hoy.
Hoy vamos a construir una aplicación
utilizando los ambientes 
flexibles de App Engine.
Con esto,
localmente podemos desarrollar 
una aplicación de nodo
probarlo,
asegurarnos que nos gusta

Portuguese: 
algo que mudará e será 
automaticamente aplicado
para todos seus clientes,
independente da versão do app
que estiverem usando.
Segundo, talvez queira ter
um pouco de código confiável.
Talvez queira fazer algo
que seus clientes não possam
e não devem ser capazes
de fazerem sozinhos.
E terceiro, talvez queira
integrar com outros serviços
para permitir novos recursos legais
para o seu app.
Agora, no Google tínhamos
o Google Cloud Platform.
Ele integra muito bem com Firebase,
e está por trás de ótimos apps
como Snapchat e Spotify.
E nós temos várias maneiras
de hospedar código back-end.
Eles vão de coisas que te deixarão
ter excelente controle
de sua infraestrutura
até coisas que são muito simples
e levam tudo que a infraestrutura
precisa de você, como o Google App Engine,
que é o que usaremos hoje.
Hoje construiremos um app usando
o Flexible Environments do App Engine.
Com isso, podemos desenvolver localmente
um aplicativo node,
testá-lo, ter certeza de que gostamos,
e quando estivermos prontos,

Korean: 
공유 비지니스 로직은
고객이 쓰는 앱의 버전과 상관없이
상관없이 변화를 불러오고
모든 고객에게 자동으로
적용될 수 있는 것입니다
둘째, 신뢰할 수 있는 코드를 원합니다
여러분은 고객이 할 수 없고
해서는 안 되는 어떤 것을
하길 원할지도 모릅니다
셋째, 앱의 멋진 새 특징을 구현하는
다른 서비스와의 통합을 원합니다
Google 클라우드 플랫폼은
Firebase와 잘 연동되고
스냅챗과 스포티파이 같은
멋진 앱을 작동시킵니다
백엔드 코드를 관리할 수 있는
다양한 방법이 있습니다
인프라의 아주 미세한 제어부터
아주 간단한 제어까지
그 방법은 다양합니다
Google App Engine처럼
여러분이 필요한 모든 인프라를
우린 오늘 사용할 것입니다
오늘 App Engine의
유연한 환경을 이용해서
앱을 개발할 것입니다
App Engine의 유연한 환경 덕분에
노드 애플리케이션을 현지에서 개발하고
테스트해서 좋은 반응이 나올지 확인하고

Indonesian: 
pada semua pelanggan,
terlepas dari versi aplikasi
yang mereka gunakan
Kedua, sebaiknya
Anda punya kode tepercaya.
Anda mungkin ingin melakukan sesuatu
yang tak bisa dilakukan klien
dan tak boleh mereka lakukan sendiri.
Ketiga, Anda mungkin ingin
mengintegrasikan dengan layanan lain
untuk mengaktifkan fitur baru
yang keren untuk aplikasi Anda.
Di Google, ada Google Cloud Platform.
Ini terintegrasi dengan baik
dengan Firebase
dan menggerakkan beberapa aplikasi keren,
seperti Snapchat dan Spotify.
Kami punya berbagai cara
untuk menyediakan host untuk kode backend.
Mulai dari hal-hal
yang memungkinkan Anda memiliki
kontrol yang sangat mendetail
tentang infrastruktur
sampai yang sangat sederhana
dan mengambil alih
semua kebutuhan infrastruktur
dari Anda, seperti Google App Engine,
yang kita akan gunakan hari ini.
Hari ini, kita akan buat aplikasi
dengan menggunakan
App Engine Flexible Environments.
Dengan ini, kita bisa secara lokal
mengembangkan aplikasi node,
mengujinya, pastikan kita menyukainya,

English: 
something that will change
and be automatically applied
to all of your
customers, regardless
of which version of
the app they're using.
Second, you might want to
have some trusted code.
You might want to do something
that your clients can't
and should not be
able to do themselves.
And third, you might want to
integrate with other services
to enable awesome new
features for your app.
Now, at Google we had the
Google Cloud Platform.
It integrates great
with Firebase,
and it powers some amazing
apps like Snapchat and Spotify.
And we have a variety of ways
that you can host backend code.
They range from
things that will let
you have very fine-grain
control of your infrastructure
to things that are very
simple and take away
all infrastructure needs from
you, like Google App Engine,
which is what we'll use today.
Today we're going to build
an app using App Engine's
flexible environments.
With this, we can locally
develop a node application,
test it, make sure we like
it, and when we're ready,

Spanish: 
y cuando estemos listos, 
llevarlo a producción.
App Engine Flex se encargará
de todas las necesidades 
de infraestructura.
Aplicará parches de 
seguridad automáticamente,
rotará nuestras máquinas semanalmente,
y si queremos
puede auto escalar 
nuestra aplicación por demanda.
Así que
la verdadera pregunta es,
¿cómo utilizar el backend
para mejorar esta impresionante aplicación
que nuestros colegas han hecho?
Así que si son como yo, 
han usado el internet antes.
Y si lo han hecho,
pueden conocer el fenómeno de que la gente
no siempre es cortés.
Así que vamos a aumentar 
una capa moderadora a nuestra aplicación,
y mantener las cosas positivas.
En una aplicación real,
moderación es un tema muy complejo.
Quieres asegurarte 
que marcas algo para revisión.
Puede haber 
intervención humana.
Es jugar al gato y al ratón.
Disculpas a nuestros presentadores.
Pero por la simplicidad de este demo,

Portuguese: 
enviá-lo para produção.
App Engine Flex cuidará
da infraestrutura por nós.
Aplicará patches de segurança
automaticamente,
alternará as máquinas semanalmente,
e se quisermos,
pode auto-dimensionar seu aplicativo
sob demanda.
Então, a verdadeira pergunta é
como podemos usar back-end
para melhorar o espetacular app
que nossos colegas escreveram?
Se você for que nem eu,
deve ter usado a internet antes.
E se já usou a internet,
talvez esteja familiar com o fenômeno
em que as pessoas não são sempre educadas.
Então iremos adicionar uma camada
de moderação ao nosso app
e tentar manter as coisas positivas.
Agora, em um aplicativo real,
moderação é um assunto muito complexo.
Você quer se assegurar que haja 
sinalização e revisão.
Talvez tenha intervenção humana.
É um jogo de gato e rato.
Sem trocadilhos aos nossos apresentadores.
Mas para simplificar
esta demonstração,

Chinese: 
就可以运行了
App Engine Flex会处理
我们所有的基础框架需求
它会自动安装安全修补程式
如果需要的话
它会每周自动旋转机器
它会根据需求，自动调整应用大小
问题是，
我们要如何使用后端
来改善这个我和同事共同开发的伟大应用？
如果你跟我一样，使用过互联网
如果你使用过互联网
你也许对一个现象很熟悉
人们不总是有礼貌的
因此我们要为我们的应用添加一些限制
让一切保持良好
在真的应用里
限制是一个很复杂的话题
你要确保审查一些内容
你可能需要人为干预
它是一个猫和老鼠的游戏
对我们的演讲者没有别的意思
为了简单演示

Japanese: 
用意ができたら それを実稼働に
デプロイします
App Engine Flex はインフラの必要性を
全部引き受けてくれます
自動的にセキュリティパッチを
適用します
毎週マシンを回転させます
そして望めば
アプリを要求に応じて
自動スケールできます
だから 本当の問題は
どうバックエンドを使って
同僚が書いたすごいアプリを改良できるかです
だから皆さんが私のようなら
インターネットを使ったでしょう
インターネットを使ったことがあれば
人々が必ずしも礼儀正しくない現象に
精通しているでしょう
だからアプリに「承認待ち」の
レイヤーを追加して
公正に保とうとします
さて 本当のアプリでは
「承認待ち」は非常に複雑な問題です
レビューの為にフラグを立てる
必要があります
人間の介入があるでしょう
猫とマウスのゲームです
ダジャレを言ってるんじゃありませんが
このデモを簡単にする為に

Indonesian: 
dan ketika kita siap,
mengirimkannya ke produksi.
App Engine Flex akan mengurus
semua kebutuhan infrastruktur untuk kita.
Menerapkan patch keamanan secara otomatis,
memutar mesin setiap minggu,
dan jika kita mau,
dapat menghitung skala otomatis
aplikasi kita sesuai permintaan.
Pertanyaan sesungguhnya adalah
bagaimana cara menggunakan backend
untuk meningkatkan aplikasi spektakuler
yang dibuat para kolega kami ini?
Jika seperti saya, Anda mungkin
pernah menggunakan Internet.
Jika Anda pernah menggunakan Internet,
Anda mungkin tak asing dengan fenomena
bahwa orang tidak selalu sopan.
Jadi, kita akan menambahkan
lapisan moderasi ke aplikasi
dan mencoba menjaga semua tetap bersih.
Dalam aplikasi nyata, moderasi
adalah subjek yang sangat rumit.
Pastikan Anda menandai
sesuatu untuk ditinjau.
Mungkin ada intervensi manusia.
Ini permainan kejar-mengejar.
Ini bukan permainan kata
untuk presenter kami.
Tapi untuk kesederhanaan demo ini,

English: 
deploy it to production.
App Engine Flex will take
care of all the infrastructure
needs for us.
It will apply security
patches automatically,
it will rotate out machines
weekly, and if we want,
it can autoscale our
application on demand.
So the real question
is how can we
use a backend to improve
the spectacular app
our colleagues have written?
So if you're like me, you may
have used the internet before.
And if you've ever
used the internet,
you may be familiar
with a phenomenon
where people are
not always polite.
So we're going to add a layer
of moderation to our app
and try to keep things
on the up and up.
Now, in a real
application, moderation
is a very complex subject.
You want to make sure you
flag something for review.
You might have
human intervention.
It's a cat and mouse game.
No pun intended
to our presenters.
But for the simplicity
of this demo,

Korean: 
앱이 완성되면 배포할 수 있습니다
App Engine의 유연성은
모든 인프라를 대체할 것입니다
보안 패치를 자동으로 적용하고
기계를 매주 교대로 돌리며
원한다면 애플리케이션의 규모를
필요한 만큼 조절할 수 있습니다
여기서 드는 진짜 의문은
동료들이 만든 멋진 앱을 개선할 때
백엔드를 어떻게 사용할 수 있을까요?
여러분은 저처럼 인터넷을
사용한 적이 있을 겁니다
그리고 인터넷 사용 경험이 있다면
사람들이 항상 정중하지는 않다는
현상에 익숙할 것입니다
앱에 조정 레이어를 추가하고
잘 관리하려고 할 것입니다
실제 애플리케이션에서 조정하는 건
아주 복잡한 문제입니다
검토하려고 어떤 부분에
표시를 확실히 하길 원하고
사람이 개입할 때도 있습니다
고양이와 쥐의 싸움 같죠
캣 씨, 당신 이름으로
말장난하는 거 아니에요
하지만 이 데모를 간단히 하려고

Arabic: 
ننشره للإنتاج.
محرك التطبيقات Flex سيهتم
بكل احتياجاتنا للبئية التحتية.
سيطبق بقع الأمان أوتوماتيكيًا،
ستتدور آلاتنا أسبوعيًا،
وإذا أردنا،
بإمكانه تقييس
تطبيقنا حسب الطلب.
لذا السؤال الحقيقي
كيف بإمكاننا
استخدام الخلفية لتحسين
التطبيق الرائع
الذي كتبه زملائي؟
إذا كنت مثلي، ربما
استخدمت الانترنت من قبل.
وإذا لم تستخدم الانترنت من قبل،
من الممكن أنك متآلف
مع ظاهرة
حيث الناس ليسوا لطيفين دومًا.
لذا سنضيف طبقة
اعتدال إلى تطبيقنا
ونحاول أن نبقي الأمور صريحة.
الآن، في تطبيق حقيقي، الاعتدال
أمر معقد للغاية.
يجب أن تتأكد أن
تعلم شيئًا للمراجعة.
ربما لديك تدخل بشري.
إنها لعبة قط وفأرة.
لا شيء مقصود لمقدمينا،
ولكن لسهولة هذا التوضيح،

Spanish: 
vamos a aumentar una 
nueva marca a nuestro mensaje.
Le llamaré "marcado".
Si es verdad, 
el mensaje ha sido rechazado.
Es inapropiado.
Si es falso, el mensaje se aprueba.
Y Kat nos ha ayudado un poco con el demo.
Ha aumentado 
nuevas UI a nuestra aplicación.
Cuando un mensaje
se marca, será tachado.
Cuando se aprueba, estará en verde.
Esto nos ayudará a visualizar 
qué está pasando en el backend.
Entonces,
¿cómo vamos a empezar?
Recogeremos una serie 
de frases censuradas,
que nos parecen polémicas.
Pero, ¿dónde vamos a tener esta lista?
Podríamos ponerla donde el cliente,
pero cambiará en el tiempo 
y puede que no esté sincronizada.
Sería genital si todos
jugaran con las mismas reglas.
Teóricamente podríamos ponerlo 
dentro de Firebase Security Rules,
que son reglas muy poderosas,
pero esto empieza a 
limitar sus habilidades.
Así que mejor vamos a 
crear un cliente confiable.

English: 
we're going to add a
new flag to our message.
It'll be called flagged.
If it's true, the
message has been banned.
It's inappropriate.
If it's false, the
message has been approved.
And Kat has helped us
out with our demo a bit.
She's added some new
UI to our applications.
When a message is flagged,
it will be stricken out.
When it's approved,
it will be lit green.
This will just kind of
help us visualize what's
happening in the backend.
So how are we going
to get started?
Well, we're going to pick
a series of band phrases
that we consider
to be inflammatory.
But where would we
actually hold this list?
We could put it on
the client, but it's
going to change over time
and it might be out of sync.
It would be great if everyone
had to play by the same rules.
We could theoretically put it
inside the Firebase security
rules which are
very, very powerful,
but this starts to stretch
the limits of their abilities.
So instead, we're going to
create a trusted client.

Portuguese: 
iremos adicionar uma nova sinalização
em nossa mensagem.
Será chamada de flagged.
Se for verdadeiro, a mensagem é banida.
É inapropriada.
Se for falso, a mensagem é aprovada.
E Kat nos ajudou com isso um pouco.
Ela adicionou algumas novas
IUs em nossas aplicações.
Quando uma mensagem é sinalizada,
a mesma será riscada.
Quando for aprovada,
será iluminada em verde.
Isso nos ajudará a visualizar
o que está acontecendo no back-end.
Então como começaremos?
Bem, iremos escolher uma série de frases
que consideramos provocativas.
Mas onde guardaríamos esta lista?
Poderíamos colocar no cliente,
mas irá mudar com o tempo
e pode não estar sincronizada.
Seria ótimo se todos tivessem
que aderir às mesmas regras.
Podemos, em teoria, colocar dentro
das regras de segurança do Firebase
que são muito, muito poderosas,
mas isso começa a abusar dos limites
das suas habilidades.
Então ao invés disso,
criaremos um cliente confiável.

Arabic: 
سنضيف علم جديد لرسالتنا.
ستسمى معلّمة.
إذا كان محققًا، مُنعت الرسالة.
إنها غير ملائمة.
إذا كانت معلمة، الرسالة
تم قبولها.
وساعدتنا كات في توضيحنا قليلًا.
أضافت القليل من واجهة المستخدم لتطبيقنا.
عندما تكون الرسالة معلّمة،
سيشخط عليها.
عندما تقبل،
ستضاء بالأخضر.
هذا سيساعدنا في تصوير
مايحدث في الخلفية.
إذًا كيف سنبدأ؟
حسنًا، سنختار سلسلة
من الجمل المحظورة
والتي نعتبرها شغبية.
ولكن أين سنحتفظ
بهذه القائمة؟
يمكن أن نضعها على الزبون،
لكنها ستتغير مع الوقت
وربما تقفد التزامن.
من الجيد إذا كان لدى
الجميع نفس القواعد.
بإمكاننا نظريًا أن نضعها 
داخل أمان Firebase
القواعد القوية جدًا جدًا،
ولكن يبدأ هذا بتمديد
حدود قدراتها.
لذا بدلًا من ذلك، سنبني
زبونًا موثوقًا.

Korean: 
메시지에 새 표시를 추가할 겁니다
이걸 'flagged'라고 부르죠
값이 true라면 메시지는 금지됩니다
적절하지 않으니까요
값이 false라면 메시지가 승인되죠
그리고 캣 씨가 데모를 조금 고쳤는데
우리 애플리케이션에 새 UI를 추가했습니다
메시지에 표시하면
그 메시지는 줄이 그어집니다
승인이 되면 녹색으로 빛납니다
백엔드에서 어떤 일이 일어나는지
눈으로 보여주는 장치입니다
그럼 어떻게 시작할까요?
우리에게 강한 분노를 유발하는
일련의 구절들을 고를 겁니다
하지만 이 목록을 어디에 수용할까요?
목록을 클라이언트에 넣을 수 있지만
시간이 지나면서 목록이 바뀌며
동기화가 안 될 것입니다
모두가 같은 규칙에 따라 움직인다면 좋겠죠
우리는 이론적으로 이 목록을
Firebase 보안 규칙 안에
넣을 수 있고, 이건 엄청나게 강력하지만
이 규칙도 목록을
점점 수용하기 힘들어집니다
그래서 대신에 믿을 수 있는
클라이언트를 만들 겁니다

Chinese: 
我们将要给信息添加一个新的标记
把它叫做被标记
如果标记为真，信息被禁用
它是不合适的
如果标记为假，信息被通过
Kat在这里会帮助我们演示
她在应用中添加了一些新的用户界面
当信息被标记，就会被销毁
但它被通过，就会呈现绿色
这可以帮助我们视觉化
后端都发生了什么
我们要怎样开始呢？
我们要先挑选一系列的词汇
将它们视为不良词汇
可我们要把这个清单放到哪里呢？
我们可以把它放在客户端
但它会改变，会失去同步性
如果大家可以使用相同的规则就好了
理论上，我们可以把它
放到Firebase的安全规则中
它非常的强大
但这延伸了这些词汇的作用
所以，我们要创建一个可信任客户

Japanese: 
メッセージに新しいフラグを付けます
flagged というものです
「真」なら そのメッセージは禁止されます
それは不適切です
「偽」なら メッセージは承認されます
Kat がデモを少し手伝って
アプリに新しい UI を付けました
メッセージにフラグが付くと
削除されます
承認されると 緑に光ります
これで バックエンドで起こってることを
視覚化できます
ではどのように始めるか？
扇動的と思われる一連の条項を選びます
だがこのリストをどこに入れておこうか？
クライアント上に置けますが
それだと経時的に変わっていき
同期しなくなります
誰でも同じルールが
適用されたら良いんですがね
理論的には Firebase セキュリティ
ルール内に入れられます
それはとても強力ですからね
でも これはその力の限界まで
伸び始めます
だから そうしないで
信頼性のある顧客を作ります

Indonesian: 
kita akan menambahkan
penanda baru pada pesan kami.
Ini akan disebut flagged.
Jika true, pesan dilarang.
Berarti tidak pantas.
Jika false, pesan disetujui.
Kat membantu kami dengan demo kami.
Dia menambahkan
beberapa UI baru ke aplikasi.
Ketika pesan ditandai, maka akan dicoret.
Saat disetujui, akan disorot warna hijau.
Ini akan membantu kita
memvisualisasikan yang terjadi di backend.
Jadi, bagaimana kita akan memulai?
Kita akan memilih
serangkaian frasa terlarang
yang dianggap provokatif.
Tapi di mana kita akan
menyimpan daftar ini?
Kita bisa meletakkannya di klien,
tapi akan berubah seiring waktu
dan mungkin tidak sinkron.
Pasti bagus jika semua orang harus
mengikuti aturan yang sama.
Secara teori, kita bisa memasukkannya
ke aturan keamanan Firebase
yang sangat ampuh.
Tapi ini mulai melampaui
batas kemampuan mereka.
Jadi, alih-alih, kita akan
membuat klien tepercaya.

Portuguese: 
Agora, quando criamos
um back-end com o Firebase,
não usaremos o tradicional
modelo de três camadas
onde temos que criar um servidor
que fica entre seu serviço back-end
e lida com todos os pedidos
só porque você quer adicionar
um pouco de personalização.
Ao invés disso, com Firebase,
iremos criar somente outro cliente.
Seremos capazes de reutilizar
todas as ferramentas
que meus colegas usam como
desenvolvedores de clientes,
mas com mais força como
desenvolvedores back-end.
Então vamos começar.
Hoje iremos usar, como eu disse,
Flexible Environments do App Engine.
E até rodando um demo,
gosto de escrever código testável.
Então vamos criar um arquivo
nomeado moderator.js.
E esse arquivo irá conter
algumas utilidades
para nos ajudar a decidir
se iremos banir um texto.
Começaremos criando uma lista fixa.
Afinal de contas, isto é uma demonstração.

Japanese: 
Firebase でバックエンドを作る時
伝統的な３層モデルを使いません
それだと バックエンドサービスの間に位置し
個々のリクエストを処理する
サーバーを作らねばなりませんね
しかもその理由はカスタムの挙動を
ほんの僅か追加したいだけです
そうしないで Firebase では
別の顧客を作ります
同僚が クライアント開発者として使う
ツールを全部再利用します
しかしバックエンド開発者として
それに余分の力を加えます
では始めましょう
さて今日は さっき言ったように
App Engine flexible environments を
使います
デモを実行している時でも
テストできるコードを書きたいので
moderator.js というファイルを作ります
そのファイルにいくつか
ユーティリティを含み
テキストが禁止されるか
判断するのに役立たせます
まず決め打ちのコードを作成します
これは結局デモです

Arabic: 
الآن، عندما نبني
خلفية باستخدام Firebase،
لن نستخدم النموذج
ثلاثي الدواليب التقليدي
حيث يجب أن ننشأ خادم
يتواجد بين خدمة الخلفية خاصتك
والتعامل مع كل طلب
فقط لأنك تود إضافة القليل
من السلوك المخصص.
بدلًا من ذلك، مع Firebase
سننشأ زبونًا آخر.
سنتمكن من إعادة استخدام كل الأدوات
التي استخدمها زميلاي
كمطوري زبائن،
ولكن باستخدام قوة إضافية
كمطور خلفية.
لنبدأ.
الآن اليوم، سنستخدم،
كما قلت،
البيئات المرنة لمحرك التطبيقات.
وحتى عند تشغيل عرض، أفضل
أن اكتب برمجة قابلة للاختبار.
إذًا سننشئ ملفًا اسمه moderator.js.
وذلك الملف سيحمل بعض الخدمات
لمساعدتنا بتقرير فيما إذا
كان النص محظورًا أم لا.
سنبدأ ببناء قائمة ترميز ثابت.
هذا عرض، بعد كل شيء.

Chinese: 
当我们使用Firebase创建后端时
我们不再使用传统的三层模型
创建一个服务器
它可以作用于你的后端服务器
处理每个请求
因为你想要添加一些
小的用户习惯
然而，通过Firebase
我们只需要创建一个新的用户
我们可以再次使用
作为用户开发者
使用的所有工具
但作为后端开发者
会有一些额外的权限
让我们开始吧
今天，我们将要使用
App Engine flexible环境
即使只是做一个演示，我还是
想要输入一些可测试的代码
因此，我们将创建一个叫做moderator.js的文件
这个文件会使用一些工具
来帮助我们决定，哪些文字要被禁用
我们从创建一个硬码列表开始
这只是一个演示嘛

Indonesian: 
Saat kita membuat backend dengan Firebase,
kita tak akan menggunakan
model tiga tingkat biasa
yang mengharuskan kita buat server
yang terletak di antara layanan backend
dan menangani setiap permintaan
hanya karena Anda ingin
menambahkan sedikit perilaku khusus.
Alih-alih, dengan Firebase,
kita akan membuat klien lain saja.
Kita akan dapat
menggunakan kembali semua alat
yang digunakan para kolega saya
sebagai pengembang klien,
tapi dengan kekuatan ekstra
sebagai pengembang backend.
Mari memulai.
Hari ini, kita akan menggunakan,
seperti saya katakan,
App Engine Flexible Environment.
Bahkan saat menjalankan demo,
saya suka menulis kode yang bisa diuji.
Kita akan membuat file
yang disebut moderator.js.
File itu akan berisi beberapa utilitas
untuk membantu menentukan
apakah teks terlarang.
Kita mulai dengan buat daftar hardcoded.
Lagi pula, ini demo.

Spanish: 
Y podemos crear un backend con Firebase,
no vamos a utilizar el 
modelo tradicional de tres llantas,
donde hay que crear un servidor
entre el servicio de backed
que maneja cada requerimiento
solo porque quieres agregar un 
poco de comportamiento personalizado.
Al contrario, con Firebase,
vamos a crear solo otro cliente.
Vamos a poder reutilizar 
todas las herramientas
que mis colegas utilizan 
como desarrolladores de cliente,
pero con algo extra de poder
como desarrolladores del backend.
Empecemos.
Hoy utilizaremos
ambientes flexibles de App Engine.
E incluso al ejecutar un demo,
me gusta escribir código evaluable.
Así que vamos a crear un archivo 
que se llame moderator.js.
y este archivo tendrá algunas utilidades
que nos ayuden a decidir 
si un texto está prohibido.
Empecemos creando 
una lista de código duro.
Después de todo, esto es un demo.

English: 
Now, when we create a
backend with Firebase,
we're not going to use the
traditional three-tiered model
where we have to
create a server that
sits between your
backend service
and handles every
single request just
because you want to add
some little sliver of custom
behavior.
Instead, with
Firebase, we're going
to create just another client.
We're going to be able
to reuse all the tools
that my colleagues use
as client developers,
but with some extra power
as backend developers.
So let's get started.
Now today, we're going
to use, like I said,
App Engine flexible
environments.
And even when running a demo,
I like to write testable code.
So we're going to create a
file called moderator.js.
And that file will
hold some utilities
for helping us decide
whether text is banned.
We'll start by just
creating a hardcoded list.
This is a demo, after all.

Korean: 
우리가 Firebase로 백엔드를 제공하면
전통적인 3단계 모델을 쓰지 않습니다
여러분이 고객 행동 조각을
약간 추가하고 싶으므로
여러분의 백엔드 서비스 사이에
서버를 만들어야 했고
모든 요청을 일일이 다루던
그 모델이죠
대신에 Firebase를 쓴다면
우린 또 다른 클라이언트를 만들 겁니다
우리는 제 동료들이
클라이언트 개발자로서 사용했던
모든 도구를 재사용할 수 있지만
백엔드 개발자로서도
기능 몇 가지를 사용할 수 있어요
그럼 시작할까요
이제 오늘, 아까 말한 대로
App Engine의 유연한 환경을
사용할 것입니다
심지어 데모를 작동하는 중에도
전 테스트용 코드를 짜는 걸 좋아하죠
그럼 moderator.js라고
부르는 파일을 만들겠습니다
이 파일은 우리가 어떤 문자를
금지할지 결정할 때 도와주는
유틸리티를 지속할 겁니다
하드 코딩 목록을 만드는 것으로 시작할까요
결국 이건 데모니까요

Portuguese: 
Depois criaremos uma função útil
que recebe um texto, o analisa,
e decide se tem uma frase banida, ou não.
Este é um grande nível de granularidade
por adicionar unidades de teste
porque não tem nenhuma
dependência externa na rede.
Podemos pegar esses pequenos
blocos de construção e somá-los.
E iremos criar mais uma função
que usamos para decidir
se uma mensagem de chat deve ser banida
por qualquer motivo que seja.
Então ótimo, agora temos nosso utilitário.
Podemos começar a moderar
nosso app Firebase.
Mas como eu disse, temos que ter
um cliente confiável,
então como iremos fazer isso?
Bem, você pode autenticar
como uma conta de serviço,
e vejo muitos desenvolvedores fazendo isso
baixando arquivos de certificados
e os incluindo na fonte do código
ou os enviando com seu aplicativo.
Isso é meio complicado,
e não é realmente necessário.
Hoje iremos usar
o Google Application Default Credentials.

Korean: 
그리고 어떤 메시지를 받는
효용 함수를 만들겠습니다
이 효용 함수를 조금 조작해서
금지된 구절과 맞는지 결정하도록 하겠습니다
이건 단위 테스트를 추가하기 위한
대단한 수준의 제어입니다
네트워크에 대한 외부 의존성이 없거든요
우린 이 작은 구성 요소를
측정해서 합산할 수 있습니다
그리고 함수를 하나 더 만들어서
채팅 메시지가 금지되는 이유를
결정하는 데 쓸 것입니다
좋아요, 우린 편리한 유틸리티를 가졌습니다
Firebase 앱의 조정을 시작할 수 있죠
하지만 아까 말했던 것처럼
믿을 수 있는 클라이언트가 필요합니다
그럼 어떻게 해야 될까요?
여러분은 서비스 계정으로 인증할 수 있어요
그리고 전 많은 개발자들이
인증 파일을 다운로드하고
그 파일을 소스 코드에 포함시키거나
애플리케이션에 보내서
서비스 계정으로 인증하는 걸 봤습니다
약간 복잡하고 실제로 불필요하죠
오늘 우린 Google 애플리케이션
기본값 크리덴셜을
사용할 겁니다

English: 
And then we're going to
create a utility function that
accepts some text,
massages it a bit,
and decides whether or not
we've matched a banned phrase.
Now, this is a great
level of granularity
for adding some unit
testing because it
has no external
dependencies in the network.
We can take these small
building blocks and add them up.
And we're going to
create one more function
that we use to decide
whether a chat message is
banned for any reason at all.
So great, now we have
our handy utility.
We can start moderating
our Firebase app.
But like I said, we need
to have a trusted client,
so how are we going to do that?
Well, you can authenticate
as a service account,
and I see many
developers doing this
by downloading certificate
files and including it
in their source code or shipping
it with their application.
This is kind of complicated,
and it's not actually necessary.
Today we're going to use
Google Application Default
Credentials.

Indonesian: 
Lalu kita akan membuat fungsi utilitas
yang menerima beberapa teks,
memanipulasinya sedikit,
dan memutuskan apakah cocok
dengan frasa terlarang.
Ini tingkat perincian yang bagus
untuk menambahkan beberapa unit penguji
karena tak ada
dependensi eksternal dalam jaringan.
Kita bisa mengambil unsur dasar ini
dan menyatukannya.
Kita akan membuat satu fungsi lagi
yang berfungsi memutuskan
apakah sebuah pesan chat dilarang
karena suatu alasan.
Bagus, sekarang ada utilitas
yang siap digunakan.
Kita bisa mulai
memoderasi aplikasi Firebase.
Tapi seperti saya katakan,
kita perlu memiliki klien tepercaya.
Jadi, bagaimana kita akan lakukan itu?
Anda dapat mengautentikasi
sebagai akun layanan.
Saya lihat banyak pengembang melakukan ini
dengan mengunduh
file sertifikat dan menyertakannya
dalam kode sumber mereka
atau mengirimnya bersama aplikasi.
Ini agak rumit,
dan tak benar-benar diperlukan.
Hari ini, kita akan menggunakan
Google Application Default Credentials.

Spanish: 
Luego crearemos una 
función de utilidad que
acepte mensajes de texto,
y decida si las frases 
prohibidas coinciden.
Esto es un gran nivel de detalle
para aumentar algunas 
evaluaciones de unidades
porque no tiene 
dependencias externas en la red.
Tomemos pequeños bloques 
de construcción y agregarlos.
Y vamos a crear una función más.
que usamos para decidir 
si un mensaje de chat
está censurado por cualquier razón.
Ahora tenemos nuestra práctica utilidad.
Podemos empezar a moderar 
nuestra aplicación Firebase.
Como he dicho, 
necesitamos tener un cliente confiable,
¿cómo lo vamos a hacer?
Puedes autentificarlo como 
una cuenta de servicio,
y muchos desarrolladores lo están haciendo
descargando un archivo de 
certificados e incluyéndolo
en su código fuente 
o enviándolo con su aplicación.
Es algo complicado 
y realmente no es necesario.
Hoy vamos a usar,
Google Application
Default Credentials

Arabic: 
وبعدها سننشئ تابع خدمات
يقبل بعض النص،
يتلاعب بها قليلًا،
ونقرر فيما إذا وجدنا
عبارة محظورة أما لا.
الآن، هذا مستوى رائع
من التقسيمات
لإضافة وحدة اختبار لأنها
لاتملك اعتمادات
خارجية في الشبكة.
بإمكاننا أخذ كتل البناء
الصغيرة وتركيبها فوق بعضها.
وسننشئ تابع آخر
نستخدمه لتقرير
فيما إذا رسالة محادثة
محظورة أم لا لأي سبب كان.
لدينا الآن خدمتنا المفيدة.
بإمكاننا البدء باعتدال
تطبيق Firebase خاصتنا.
ولكن كما قلت، نحتاج
أن يكون لدينا زبون موثوق،
إذًا كيف سنقوم بذلك؟
حسنًا، بإمكانك توثيق
حساب خدمة،
وأرى الكثير من المطورين يقومون بذلك
عن طريق تنزيل ملفات
شهادة وتضمينها
في برمجتهم أو
نقلها مع تطبيقهم.
هذا معقد، وليس ضروريًا.
اليوم سنستخدم بيانات اعتماد
تطبيق Google الافتراضية.

Japanese: 
次にユーティリティの関数を作成し
テキストを受け入れ 少し揉んで
禁止条項に合致するかどうか判断します
これは ユニット テストを追加する
高レベルの粒度です
ネットワークに外部依存が全然ないからです
これらの小さな構築ブロックをとって
それらを追加していけます
もう１つ関数を作って
チャットメッセージに禁止される
理由があるかどうかの判断に使います
これで便利なユーティリティができました
Firebase アプリで「承認待ち」を
始められます
ですが 言ったように
信頼性のある顧客が必要です
ではそれをどうやるのか？
サービスアカウントとして
認証できます
多くの開発者がやってるのは
証明書ファイルをダウンロードして
それをソースコードに入れるとか
アプリに同梱していますね
これは複雑で
実際は必要ありません
今日 私達は Google Application 
Default Credentials を使います

Chinese: 
然后，我们要创建一个效用函数
来接受一些文本，审核它
并决定它是否与被禁用的词汇一样
要添加一些单元测试
这已经非常细致了
因为在网络上没有外部的参量
我们可以把这些小的模块叠加起来
我们还将创建一个函数
用来决定一条聊天信息
是否由于任何原因被禁用
非常棒，现在我们有了工具
就可以开始限制我们的Firebase应用了
就像我说的，我们需要一个可信任的用户
怎样才能实现呢？
你可以验证一个服务器账号
我看到很多开发者都这么做
下载一个证书文件
把它添加到资源代码中
或者用应用传送它
这有一点复杂，且不必要
今天，我们将使用
Google Application Default Credentials
（谷歌应用程序默认凭证）

Chinese: 
谷歌应用程序默认凭证
是谷歌确保你后端安全的最好产品
因为，每一个服务器，每一个在谷歌的后端服务器
都有一个服务器账户
应用程序默认凭证
可以为服务器账户
自动发现证据
而不需要在谷歌后端云
有这些凭证的备份
这就意味着你的代码更简单，更安全
你不会一不小心就泄漏了这些凭证
我们在这里做本地开发
这台笔记本电脑，不是谷歌云的一部分
但没有关系，因为你还可以
让这个SDK与本地安装的凭证一起工作
现在，但我们使用应用程序默认凭证
每一个谷歌SDK，包括最新发布的Firebase Admin SDK
都会自动配置
我们可以在开发环境中使用开发凭证
在生产环境中使用生产凭证

Indonesian: 
Google Application Default Credentials
adalah cara terbaik Google
untuk mengamankan backend Anda
karena setiap layanan,
setiap layanan backend
dalam Google berjalan
sebagai akun layanan.
Aplikasi Default Credentials
bisa secara otomatis
menemukan kredensial
untuk akun layanan
tanpa menyertakan kredensial itu
pada mesin dalam awan backend Google.
Ini berarti kode Anda sederhana
dan jauh lebih aman.
Anda tak membocorkan
kredensial ini tanpa sengaja.
Tapi kita melakukan
pengembangan lokal di sini.
Terakhir saya periksa, laptop ini
bukan bagian dari Google Cloud.
Tapi tak masalah,
karena Anda juga dapat
membuat SDK ini bekerja
dengan kredensial yang diinstal lokal.
Sekarang, saat kita menggunakan
Application Default Credentials,
setiap SDK Google, termasuk
SDK Firebase Admin yang baru dirilis,
akan dapat diatur secara otomatis.
Kita bisa gunakan development credentials
pada development environment,
production credentials
pada producion environment.

Korean: 
Google 애플리케이션 기본값 크리덴셜은
여러분의 백엔드를 확보할
Google 최고의 역작입니다
왜냐하면 Google의 모든 서비스
특히 모든 백엔드 서비스가
서비스 계정으로서 운영됩니다
그리고 애플리케이션 디폴트 크리덴셜은
Google 백엔드 클라우드 속 기계의
이 크리덴셜을 실제로 포함하지 않고
서비스 계정의 크리덴셜을
자동으로 찾을 수 있습니다
이 말은 여러분의 코드가
더 간단해지고 더 안전해져서
크리덴셜을 실수로
유출하지 않는다는 뜻입니다
하지만 우린 여기서 지역 개발을 하고 있고
제가 아까 점검한 이 노트북은
Google 클라우드의 일부가 아닙니다
하지만 괜찮아요
우린 현지에 설치된 크리덴셜로
동일한 SDK 작업도
할 수 있으니까요
그리고 이제 애플리케이션
기본값 크리덴셜을 사용하면
새로 출시된 Firebase 관리 SDK를
포함하는 모든 Google SDK가
자동으로 환경을 설정할 것입니다
우리는 개발 환경에 개발 크리덴셜을
제품 환경에 제품 크리덴션을

Japanese: 
Google Application　
Default Credentials は
皆さんのバックエンドを保護する
Google のベストプラクティスです
Google 内のあらゆるサービス
あらゆるバックエンドサービスは
サービスアカウントとして実行されるからです
そして Application Default Credentials は
自動的にサービスアカウントの
資格情報を発見でき
マシン上のこれらの資格情報を
Google のバックエンドクラウド内に
含みません
つまり 皆さんのコードはより簡単に
ずっと安全になる訳です
うっかりこれらの資格情報を
漏らしません
ですが ここではローカルの
開発をやっていて
このラップトップは確認したのですが
Google Cloud に入っていません
でもそれは大丈夫です
皆さんもローカルに
インストールされた視覚情報で
これらの同じ SDK を機能させられますから
さて Application Default
Credentials を使う時
あらゆる Google SDK は
新しくリリースされた Firebase 
Admin SDK もそうですが自動設定できます
開発環境では「開発資格情報」を

English: 
Google Application
Default Credentials
are Google's best practice
for securing your backend up
because every service,
every backend service
inside of Google, runs
as a service account.
And Application
Default Credentials
are able to automatically
discover credentials
for the service account
without actually including
those credentials on the machine
inside Google's backend cloud.
This means that your code is
simpler and it's much safer.
You don't accidentally
leak these credentials.
But we're doing local
development here,
and this laptop last I checked
wasn't part of Google Cloud.
But that's OK,
because you can also
make these same SDKs work with
locally installed credentials,
as well.
And now when we use Application
Default Credentials,
every Google SDK, including the
newly released Firebase Admin
SDK, will be able
to autoconfigure.
We'll be able to use development
credentials on a development
environment, production
credentials on a production

Spanish: 
Google Application
Default Credentials
son las mejores prácticas de 
Google para asegurar tu backend
porque cada servicio,
cada servicio de 
backend dentro de Google,
funciona como una cuenta de servicio.
Y Application
Default Credentials
puede automáticamente descubrir 
credenciales para la cuenta de servicio
sin necesariamente 
incluir estas credenciales,
en la máquina, 
dentro de la nube de backend de Google.
Esto quiere decir que tu código 
es más simple y más seguro.
No se filtran 
accidentalmente estas credenciales.
Pero estamos haciendo desarrollo local
y la última vez que revisé esta laptop, 
no era parte de Google Cloud.
Pero eso está bien,
por que también pueden
hacer que los mismos 
SDKs funcionen con
credenciales locales 
que han sido instaladas
Ahora cuando usemos 
Application Default Credentials
todos los SDKs de Google,
incluyendo el nuevo Firebase Admin SDK
se autoconfigurarán.
Podremos utilizar el 
desarrollo de credenciales
en un ambiente de desarrollo,
y credenciales de producción

Portuguese: 
Google Application Default Credentials
é a melhor forma para proteger
seu back-end do Google
porque todo serviço,
todo serviço back-end dentro do Google,
roda como uma conta de serviço.
E o Application Default Credentials
é capaz de descobrir credenciais
automaticamente
para a conta de serviço
sem incluir essas credenciais na máquina
dentro da nuvem de back-end do Google.
Isso significa que o código
é mais simples e seguro.
Você não vaza
essas credenciais sem querer.
Mas estamos fazendo
desenvolvimento local aqui,
e este laptop não fazia parte
do Google Cloud da última vez que chequei.
Mas está tudo bem,
porque você também pode fazer
esses mesmos SDKs funcionarem
com credenciais instaladas localmente.
E agora quando usamos
Application Default Credentials,
todo Google SDK, inclusive
o recém lançado Firebase Admin SDK,
será capaz de se autoconfigurar.
Seremos capazes de usar
development credentials
em um ambiente de desenvolvimento,

Arabic: 
بيانات اعتماد تطبيق Google الافتراضية
هي أفضل ممارسات Google
لتأمين خلفيتك
لأن كل خدمة، كل خدمة خلفية
داخل Google، تعمل
كخدمة حساب.
وبيانات اعتماد تطبيق الافتراضية
قادرة على اكتشاف
بيانات الاعتماد أوتوماتيكيًا
لخدمة الحساب بدون تضمين
بيانات الاعتماد تلك على الآلة
داخل سحابة Google الخلفية.
هذا يعني أن برمجتك
أبسط وأكثر أمنًا.
لا تسرب بيانات الاعتماد
هذه بالخطأ.
ولكننا نقوم بتطوير
محلي هنا،
وآخر مرة تأكدت هذا اللابتوب
لم يكن جزءًا من سحابة Google.
ولكن لا بأس، لأنه بإمكانك أيضًا
أن تجعل نفس هذه الـSDKs تعمل
مع بيانات اعتماد مثبتة محليًا كذلك.
والآن عندما نستخدم بيانات 
اعتماد التطبيق الافتراضية،
كل Google SDK، متضمنة
Firebase Admin SDK
المطلقة حديثًا، ستتمكن من
ضبط تلقائي.
سنتمكن من استخدام تطوير
بيانات الاعتماد على
بيئة تطوير، بيانات اعتماد إنتاج على

Arabic: 
بيئة إنتاج.
لن نخلطهم، لن نسربهم بالخطأ.
لنعد إذًا إلى index.js خاصتنا
وننشأ زبون Firebase موثوق.
سنهيأ الـFirebase Admin SDK.
ولاخظ أننا أعددنا
firebaseconfig.credential
لـ firebase.credent
ial.applicationdefaultcredentials
هذا كل ما كان علينا القيام به.
سيكتشف أتوماتيكيًا حساب الخدمة هذا.
التالي، سننشأ بحثًا.
سنحاول أن نجد كل
الرسائل غير المعتدلة.
سنحصل على مرجع
لنفس عقدة المحادثة
حيث تطبيقاتنا للزبائن
رفعت رسائلها.
السطران التاليان يرشحان نتائجنا.
يقولون أننا نهتم فقط بالنتائج
حيث حقل التعليم غير موضوع بعد.
الآن سنضيف مستمع ابن مضاف.
هنا يحدث السحر.
سنلاحظ كل الرسائل الجديدة
كانت معلمة كغير موضوع.

Japanese: 
実稼働環境では「実稼働資格情報」を
使うことができます
私達はそれらを混ぜません
それらをうっかり漏らしません
では index.js に戻って
実際に信頼性のある
Firebase 顧客を作りましょう
Firebase 管理者 SDK を初期化します
注目してほしいんですが
firebaseconfig.credential を
firebase.credential.applicationDfault 
資格情報 に設定しています
やらねばならないのはこれだけです
それは自動的にサービスアカウントを
発見します
次にクエリを作成します
内容未確認のメッセージを
すべて検出しようとします
顧客アプリがメッセージをアップした
同じチャットノードに参照を入れます
次の２行は結果をフィルターします
flagged のフィールドが
まだ設定されていない場所で
大事なのは結果だけと書きます
今度は child_added リスナーを付けます
ここが魔法の起こる所です
新しいメッセージはすべて
未設定のフラグが付いたと気付きます

Indonesian: 
Tak akan sampai tertukar,
tak akan bocor tanpa sengaja.
Mari kita kembali ke index.js
dan membuat klien Firebase tepercaya.
Kita akan menginisialisasi
SDK Firebase Admin.
Perhatikan kami sudah mengatur
firebaseconfig.credential
menjadi firebase.credential.
applicationdefaultcredentials.
Itu saja.
Itu akan secara otomatis
menemukan akun layanan ini.
Selanjutnya, kita akan membuat kueri.
Kita akan mencoba menemukan
semua pesan yang tak dimoderasi.
Kita akan mendapatkan referensi
untuk node chat yang sama
tempat aplikasi klien mengunggah
pesan mereka.
Dua baris berikutnya menyaring hasilnya.
Mereka bilang kami hanya peduli pada hasil
di mana bidang flagged belum ditetapkan.
Sekarang, kita tambahkan
listener child_added.
Di sinilah keajaiban terjadi.
Kita akan melihat semua pesan baru
ditandai belum ditentukan.

Chinese: 
我们不会把它们混淆，不会意外泄漏
让我们回到index.js
并创建一个可以信赖的Firebase客户端
我们将初始化Firebase Admin SDK
请注意
我们将firebaseconfig.credential设置到
firebase.credential.
applicationdefaultcredentials
这就是我们要做的一切
它会自动发现服务器账户
接下来，我们要创建一个查询
我们要试着找到所有的非限制信息
我们要为相同的聊天节点创建一个参量
在我们用户上传信息的地方
接下来的两行，筛选了我们的结果
筛选出标记栏
没有被设置的信息
现在，我们添加了一个有子文件的监控器
马上就会有魔法出现
我们会注意到
所有的新信息都没有被标记

English: 
environment.
We won't get them mixed up, we
won't leak them accidentally.
So let's jump back
to our index.js
and actually create a
trusted Firebase client.
We're going to initialize
the Firebase Admin SDK.
And notice that we've set
firebaseconfig.credential
to firebase.credent
ial.applicationd
efaultcredentials.
That's all we had to do.
It will automatically
discover this service account.
Next, we're going
to create a query.
We're going to try to find
all unmoderated messages.
So we're going to get a
reference to the same chat node
where our client apps have
uploaded their messages.
The next two lines
filter our results.
They say that we only care about
results where the flagged field
is not yet set.
Now we'll add a
child added listener.
This is where the magic happens.
We're going to notice
all new messages were
flagged as not set.

Spanish: 
en un ambiente de producción.
No las vamos a mezclar,
no las vamos a filtrar accidentalmente.
Así que volvamos a nuestro index.js
y creemos un cliente
confiable de Firebase.
Iniciaremos el SDK de Firebase Admin
Miren que hemos instalado 
firebaseconfig.credential
a firebase.credential.
applicationdefaultcredentials.
Eso es todo lo que 
teníamos que hacer.
Automáticamente descubre 
esta cuenta de servicios.
Luego, vamos a crear un requerimiento.
Vamos a encontrar
todos los mensajes 
que no han sido moderados.
Para tener una referencia 
del mismo nodo de chat
donde las aplicaciones
de nuestros clientes
han cargado sus mensajes.
Las próximas dos lineas 
filtran los resultados.
Dicen que solo nos importan los resultados,
que no se han marcado todavía.
Así que aumentaremos un oyente pequeño
Aquí es donde sucede la magia.
Veremos que todos los mensajes
fueron marcados como no establecidos.

Portuguese: 
production credentials
em um ambiente de produção.
Não vamos confundi-los,
nem os vazaremos acidentalmente.
Vamos voltar ao nosso index.js
e criar um cliente confiável Firebase.
Vamos inicializar o Firebase Admin SDK.
Perceba que colocamos
firebaseconfig.credential
para firebase.credential.application
defaultcredentials.
Tudo o que precisávamos.
Descobrirá automaticamente
esta conta de serviço.
Depois, criaremos uma consulta.
Vamos tentar achar todas
as mensagens não moderadas.
Vamos colocar uma referência
para o mesmo node de chat
onde os apps do nosso cliente
enviaram suas menagens.
As duas próximas linhas
filtram nossos resultados.
Dizem que só nos importamos com resultados
onde o campo sinalizado
ainda não está definido.
Agora adicionaremos um
child_added listener.
É aqui que a mágica acontece.
Iremos notar que todas novas mensagens
estão sinalizadas como não definidas.

Korean: 
사용할 수 있을 겁니다
두 크리덴셜이 섞이지 않고
실수로 누출되지도 않을 것입니다
그럼 index.js로 돌아가서
믿을 수 있는 Firebase
클라이언트를 실제로 만들어 볼게요
우리는 Firebase 관리 SDK의
초기 내용을 설정하고
firebaseconfig 크리덴셜에
firebase.credential.
applicationdefault 크리덴셜이
설정된 걸 볼 수 있습니다
이제 필요한 작업을 끝냈습니다
이 코드가 자동으로
서비스 계정을 찾을 겁니다
다음은 쿼리를 만들겠습니다
우린 조정하지 않은 모든 메시지를 찾아서
클라이언트 앱이 메시지를 업로드하는
동일한 채팅 교점을 참조할 것입니다
다음 두 줄은 이 결과 중에서
이 명령어들은 참조한 필드가
아직 설정되지 않은 결과만
찾으라고 명령합니다
이제 child_added 수신기를
추가할 거예요
여기서 마법같은 일이 벌어집니다
모든 새 메시지가 설정되지 않도록
표시됐다는 걸 알아차렸습니다

Chinese: 
我们将使用我们测试好的工具
来决定这条信息是否该被禁用
并将这个标记信息返还给数据库
让我们开始运行我们的后端
因为它看起来非常的繁琐
JavaScript是非常糟糕的语言
你阅读过JavaScript吗？好的部分？
这是一个简短的故事
一些人听说过
就像你可以看到的一样
我们已经限制了我们的信息
因为添加了子文件的事件
会填充所有的现有内容
太棒了
现在我们成功的限制了我们的应用
我们需要确保没有人发表污言秽语
哦，我们比计划要提前了
剧透了

Portuguese: 
Iremos usar nosso utilitário já testado,
que decide se esta mensagem
deve ser banida,
e enviar o campo sinalizado
de volta para o banco de dados.
Então vamos rodar nosso back-end
porque parece que esses dois
tem sido um pouco trolls.
JavaScript é uma linguagem horrível.
Já leu JavaScript... as partes boas?
É meio que uma história curta.
Algumas pessoas entenderam.
E como podem ver,
já moderamos todas nossas mensagens
porque o handler de evento child_added
irá preencher com todo
o conteúdo existente.
Ótimo, agora que moderamos
nosso app com sucesso,
nos asseguramos 
de que as pessoas não podem ser trolls.
Ah, nos adiantamos no nosso demo.
Spoiler.

Spanish: 
Usaremos nuestra 
utilidad, bien evaluada
que decide si un 
mensaje debe ser prohibido
y poner ese campo marcado
dentro de la base de datos.
Así que ejecutemos nuestra aplicación
porque parece
o backend...
porque parece que estos dos 
han tenido un poco de troll.
JavaScript es un lenguaje espantoso.
¿Han leído las partes 
buenas de JavaScript?
Es un cuento corto.
Algunas personas me entendieron.
Como pueden ver, ya hemos
moderado todos nuestros mensajes
porque el pequeño evento administrador
remplazará todo el contenido existente.
Ahora hemos moderado 
nuestra aplicación exitosamente,
nos hemos asegurado
que no haya manera que existan trolls.
Nos hemos adelantado en nuestro demo.
Spoiler

Arabic: 
سنستخدم خدمتنا المجربة جيدًا
التي تقرر فيما إذا هذه الرسالة
يجب أن تحظر، وتعيد وضع
ذلك الحقل المعلّم إلى قاعدة البيانات.
لنبدأ ونشغل خلفيتنا
لأنه يبدو أن هذين الاثنين متصيدين.
إن جافاسكريبت لغة فظيعة.
هل قرأتم جافاسكريبت--
الأجزاء الجيدة؟
إنها كقصة قصيرة.
بعض الناس فهموها.
وكما ترون، قمنا باعتدال
كل رسائلنا لأن معالج أحداث
الابن المضاف أعادة تعبئة
كل المحتويات الموجودة.
رائع جدًا، الآن قمنا
بتعديل تطبيقنا بنجاح،
تأكدنا أنه لامجال أن يصبح الناس متصيدين.
استبقنا الأمور في عرضنا.
حرق.

Korean: 
이 메시지의 금지 여부를 결정하고
표시된 필드를 데이터베이스로
다시 보내야 하는지 설정하는
테스트가 잘 된 유틸리티를 쓸 계획입니다
우리 백엔드를 운영해볼까요
이 두 명이 나쁜 메시지를
보내는 것 같거든요
자바스크립트는 끔찍한 언어입니다
'자바스크립트 핵심 가이드'라는
책을 읽은 적이 있나요?
꽤 얇은 책이에요
몇 분은 이해했어요
그리고 보다시피 우리는 이미
우리의 모든 메시지를 조정했는데
child_added 이벤트 핸들러가
존재하는 모든 콘텐츠를
다시 메우기 때문입니다
훌륭해요, 이제 앱을 성공적으로 조정했고
사람들이 나쁜 메시지를 보낼
방법이 없다는 걸 확인했습니다
오, 데모의 다음 부분을 미리 했어요
스포일러예요

Japanese: 
よくテストしたユーティリティを使い
このメッセージが禁止されるべきか決め
そのフラグ付きのフィールドを
データベースに戻します
では早速バックエンドを実行しましょう
これらの２つは少し
荒らしだったように思われますから
JavaScript は大変な言語です
JavaScript の-- 良い部分を
読んだことがありますか？
これは短編小説のようなものですね
理解した人もいました
ご覧のようにメッセージを全て
もう確認しています
child_added のイベントハンドラが
既存コンテンツを全て埋め戻しますから
これでアプリの「承認待ち」処理が成功し
人々が荒らしになれないようにしました
あ デモで順序をすっ飛ばしちゃった
ネタバレ注意

Indonesian: 
Kami akan menggunakan utilitas teruji
yang memutuskan
apakah pesan ini harus dilarang,
dan mengatur bidang flagged itu
kembali ke database.
Mari jalankan backend
karena tampaknya,
yang dua ini menjadi troll.
JavaScript adalah bahasa yang buruk.
Apa Anda pernah membaca
bagian yang baik dari JavaScript?
Hanya sedikit sekali.
Ada yang mengerti maksud saya.
Seperti yang Anda lihat, kami sudah
memoderasi semua pesan
karena child added event handler
akan mengisi kembali
dengan semua konten yang ada.
Bagus, sekarang kami berhasil
memoderasi aplikasi.
Kami sudah memastikan
tak ada yang bisa menjadi troll.
Kami malah mendahului demonya.
Bocoran.

English: 
We're going to use our
well-tested utility that
decides whether this message
should be banned, and set
that flagged field
back to the database.
So let's go ahead
and run our backend
because it seems these two
have been a bit of a troll.
JavaScript is a
horrible language.
Have you read JavaScript--
the good parts?
It's kind of a short story.
Some people got that.
And as you can
see, we've already
moderated all of our
messages because the child
added event handler will
backfill with all existing
content.
So great, now we've
successfully moderated our app,
we've made sure that there's
no way people can be trolls.
Oh, we've gotten ahead
of ourselves in our demo.
Spoiler.

Arabic: 
ها نحن الآن-- لا يمكن أن يصبح أحد متصيد.
لكن، بالطبع، لدي
زملاء أذكياء
ليسوا فقط متصيدين،
لكنهم متصيدون أذكياء،
ووجدوا طريقة للالتفاف حول النظام.
وبالطبع، إذا تظاهرنا أننا
لم نستبق الأمور في هذا العرض،
لا يمكن لأحد إيجاد المحتويات
داخل هذه الصور، أليس كذلك؟
لدينا قوة السحابة خلفنا.
بإمكاننا القيام بتحليل
الصور لإيجاد
إذا كان هناك أي محتوى
غير ملائم يجب أن نحظره كذلك.
إذًا هذه حالة أخرى
لاستخدام خلفية
لأنه نعم، نظريًا بإمكاننا
تطبيق تحليل الصور على الزبون،
ولكن يوجد بعض المشاكل.
أولًا، سبب قيامنا بهذا الاعتدال
من طرف الخادم أننا لا نثق
بهؤلاء الأشخاص لاعتدال سلوكهم.
ثانيًا، يجب أن نتأكد
أنه لا يمكنهم التلاعب بالنتائج.
يجب أن نتأكد أن هذه تتغير أوتوماتيكيًا--
إذا أضفنا، على سبيل المثال،
ترشيح صور،
الجميع سيتعرض لترشيح الصور.
وثالثًا، إذا قمنا بمعالجة الصورة

Chinese: 
没有人能散布污言秽语
当然，我有一些很聪明的同事
他们不仅仅会说脏话
还会说聪明的脏话
他们可以避过系统
当然，在这个演示中，
我们假装这种情形不会发生
没有人可以发现这幅画里面的内容，对吗？
在我们的背后，有云端支持着我们
我们还可以做图片分析
来发现有没有需要我们禁用的不恰当内容
这是另一个需要使用后端的例子
因为理论上来说
我们可以在客户端上运行图片分析
这会导致一些问题
我们做这个服务器端限制的原因是
我们不信任大家
来限制他们自己的行为
第二点，我们想要确保
他们不能干预结果
我们要确保这些会自动改变
如果我们添加一个图片筛选器
每一个人的图片都会被筛选
第三点，如果我们在本地客户端处理图片

English: 
There we go-- no
one can be trolls.
But, of course, I have
some clever colleagues
who are not only trolls,
but clever trolls,
and they found a way
around our system.
And, of course, if we pretend we
hadn't seen ahead in this demo,
nobody could ever find content
inside these images, right?
We have the power of
the cloud behind us.
We can also do image
analysis to find out
if there's any inappropriate
content we should ban there,
as well.
So this is another case
for using a backend
because yes,
theoretically we could
run image processing
on the client,
but there's a couple
of problems with that.
One, the whole reason
we're doing this moderation
server-side is we don't trust
these people to moderate
their own behavior.
Second of all, we
want to make sure
that they can't tamper
with the results.
We want to make sure that
these change automatically--
that if we add, for
example, image filtering,
everyone is now subjected
to image filtering.
And third, if we were
to do image processing

Indonesian: 
Itu dia. Tak ada yang bisa menjadi troll.
Tapi, tentu saja, saya punya
beberapa kolega pintar
yang tidak hanya troll,
tapi juga troll pintar.
Mereka menemukan cara
mengelabui sistem kami.
Tentu jika kita pura-pura
tak menduganya dalam demo ini,
tak seorang pun bisa menemukan
konten dalam gambar-gambar ini, 'kan?
Kami didukung kekuatan awan.
Kita juga bisa menganalisis
gambar untuk mengetahui
apakah ada konten tak pantas
yang harus dilarang juga di sana.
Ini kasus lain untuk penggunaan backend
karena ya, secara teori, kita bisa
menjalankan pengolahan gambar pada klien,
tapi ada beberapa masalah dengan itu.
Pertama, penyebab kami melakukan
moderasi ini di sisi server
adalah kami tak percaya mereka
memoderasi perilaku sendiri.
Kedua, kami ingin memastikan
mereka tak dapat mengganggu hasilnya.
Kami ingin memastikan
ini berubah secara otomatis
jika kita tambahkan,
misalnya, penyaring gambar,
semua orang kini mengalami
penyaringan gambar.
Ketiga, jika kami melakukan
pengolahan gambar pada klien lokal,

Japanese: 
はい-- 誰も荒らしになれません
でも 私には数人賢い同僚がいて
単に荒らしなだけでなく 賢い荒らしです
彼らはシステムを回避する方法を発見しました
勿論 このデモで先を見なかった振りをすれば
誰もこれらの画像内のコンテンツを
見つけられないのですがね
私達の背後にはクラウドの力があり
画像分析もできて
そこで禁止すべき不適切な内容があるか
見つけられます
だから これはバックエンドを使う
別のケースです
勿論 理論的には
クライアント上の画像処理を
実行できますからね
ですがそれにはいくつか問題があります
１つはこの「承認待ち」をサーバー側で
している理由が
これらの人々が自分の挙動を
承認処理するのを信頼しないからです
２つ目は 確実に彼らが結果を
変更できなくしたいのです
確認したいのは
これらの変更が自動的に--
例えば 画像フィルタリングを加えると
誰もが画像フィルタリングの対象になります
第３に私達が ローカルクライアント上で
画像処理をするとすれば

Korean: 
가볼까요, 아무도 나쁜 말을 하지 않죠
하지만 당연히 어떤 영리한 동료는
나쁜 말을 그냥 하는 게 아니라
시스템 속에서 교묘하게 할
방법을 찾았습니다
그리고 당연히, 미리 본 걸 모른 척하려면
아무도 아직 이미지 안의
콘텐츠를 찾지 못했어요, 맞죠?
우리는 클라우드의 관리자로서
금지해야 할 부적절한 콘텐츠가 있다면
이미지 분석으로 찾을 수 있습니다
백엔드를 쓰는 경우가 또 있습니다
왜냐하면 네, 이론적으로 우리는
클라이언트에서
이미지 프로세싱을 할 수 있지만
여기엔 문제가 두 가지 있습니다
첫째, 우리가 서버 쪽을 조정하는 이유는
사람들이 행동을 조정할 거라고
믿지 않기 때문입니다
둘째, 사람들이 결과를 마음대로
조작할 수 없기를 바라기 때문입니다
우리는 뭔가 추가한다면
자동으로 적용되기를 바랍니다
예를 들어 이미지 필터링이 있어요
지금은 모두가 이미지 필터링의 대상이죠
셋째, 지역 클라이언트에서
이미지 프로세싱을 한다면

Portuguese: 
Aqui vamos nós...
ninguém pode ser um troll.
Mas, é claro, eu tenho
uns colegas espertos,
que são não só trolls,
mas trolls espertos,
e eles acharam um jeito
de burlar o sistema.
Claro, se fingirmos que não pensamos
à frente nesse demo,
ninguém poderia encontrar conteúdo
dentro dessas imagens, certo?
Temos o poder da nuvem nos apoiando.
Podemos também fazer análise de imagens
para descobrir se tem algum
conteúdo impróprio
que também deveríamos banir.
Então este é outro caso
para usarmos back-end
porque sim, teoricamente poderíamos rodar
processamento de imagens no cliente,
mas tem dois problemas nisso.
Um, o motivo pelo qual estamos fazendo
essa moderação no lado do servidor
é que não confiamos nessas pessoas
para moderarem
seus próprios comportamentos.
Dois, queremos ter certeza
de que não possam mudar os resultados.
Queremos ter certeza que
mudem automaticamente...
que adicionando, por exemplo,
filtragem de imagens,
todos estarão agora sujeitos
à filtragem de imagens.
E terceiro, se fôssemos fazer
processamento de imagens

Spanish: 
nadie puede ser troll.
Evidentemente tengo 
algunos inteligentes colegas
que no solo son trolls, 
sino que son inteligentes,
y han encontrado la manera al sistema.
Y evidentemente,
si pretendíamos que no 
nos hemos adelantado al demo
nadie podría encontrar 
contenido dentro de estas imágenes.
Tenemos el poder de la nube apoyándonos.
También podemos analizar las imágenes
para descubrir si 
hay contenido inapropiado
que deberíamos prohibir.
Este es otro caso para usar el backend
porque teoricamente podríamos
ejecutar un procesamiento 
de imágenes en el cliente,
pero hay un par de problemas con eso.
Uno,
la razón por la que
hacemos este servicio de moderación
es que no confiamos que estas personas
moderen su propio comportamiento.
En segundo lugar,
queremos asegurarnos que
no pueden manipular los resultados.
Quereos asegurarnos que 
cambian automáticamente
que si aumentamos, por ejemplo,
filtración de imágenes
todo el mundo esta sujeto al mismo.
Y tercero,
si hiciéramos procesamiento 
de imágenes en el cliente local,

Korean: 
배터리 소모량이 많아질 겁니다
클라우드에 존재하는 서비스를 사용하면
이 대단한 특징을 쉽게 얻을 뿐만 아니라
사용자에게 더 친절한 서비스를
제공할 수 있습니다
그리고 Google 클라우드 비전 API를
사용할 것입니다
보세요, Google은
Google 포토의 이점을 잘 활용하고
우리가 개발자일 때도 유용합니다
그럼 moderator.js로 돌아가서
Google 클라우드와 비전에
새 의존성을 추가할 수 있습니다
여기 있는 사선은
Google 클라우드 교점이기 때문이죠
SDK는 정말 모듈식이라서
원하는 만큼 많이 또는 적게
쓸 수 있습니다
require 명령 뒤에 추가의 괄호도 보이시죠
이건 초기치 설정 요청입니다
우리는 애플리케이션 기본값 크리덴셜을
가진 환경에서 작동하고 있으니까요
우린 어떤 것도 제공하지 않습니다
이 환경은 인증을 위한
앱 기본값 크리덴셜을 얻어서
Google 클라우드에서
항상 설정되는 환경 변수에

English: 
on the local client, it
might drain a lot of battery.
So by using existing
services in the cloud,
we can not only get this
great feature very easily,
but we're kinder to our users.
And today we're going to use
the Google Cloud Vision APIs.
See, Google has taken much of
the magic behind Google Photos
and made it available
to us as developers.
So when we go back
to our moderator.js,
we can add a new dependency
on Google Cloud/Vision.
This slash here is because
the Google Cloud node
SKD is very modular-- you can
use as much or as little of it
as you like.
You also notice the extra parens
after the require statement.
This is the initialization call.
Because we're running
on an environment that
has Application
Default Credentials,
we are not providing anything.
This will get the App
Default Credentials
for its authentication, and
it will pick its project
based on an environment
variable that will always

Indonesian: 
mungkin akan menguras baterai.
Jadi, dengan menggunakan
layanan yang ada di awan,
kita tak hanya mendapat
fitur hebat ini dengan mudah,
tapi juga lebih baik hati
pada pengguna kami.
Hari ini, kami akan menggunakan
API Google Cloud Vision.
Google telah mengambil
banyak keajaiban di balik Google Photos
dan membuatnya tersedia
bagi para pengembang.
Jadi, saat kembali ke moderator.js,
dependency baru bisa ditambahkan
pada google-cloud/vision.
Ada garis miring di sini karena SDK
node Google Cloud sangat modular.
Kita bisa menggunakan sebanyak
atau sesedikit yang kita mau.
Anda juga lihat tanda kurung tambahan
setelah pernyataan require.
Ini adalah inilitalization call.
Karena kita menjalankan
pada environment
yang memiliki
Application Default Credentials,
kita tak menyediakan apa-apa.
Ini akan mendapat App Default Credentials
untuk autentikasi,
dan akan memilih project

Arabic: 
على الزبون المحلي،
من الممكن أن تستنفذ البطارية.
لذا باستخدام خدمات موجودة في السحابة،
لا يمكننا الحصول على هذه الميزة
الرائعة بسهولة كبيرة،
ولكننا ألطف مع مستخدمينا.
واليوم سنستخدم واجهات برمجة التطبيقات
المرئية السحابية لـGoogle.
أخذت Google الكثير من السحر
خلف صور Google
وجعلته متوفرًا لنا كمطورين.
لذا عندما نعود لـmoderator.js
يمكننا إضافة اعتمادية جديدة
على سحابة/مرئية Google.
هذا الشطب هنا لأن
عقدة سحابة Google SDK
وحداتية كثيرًا-- بإمكانك
استخدام بقدر ما تشاء.
تلاحظ أيضًا الأقواس الإضافية
بعد العبارة المطلوبة.
هذه خلية تهيئة.
لأننا نعمل على بيئة
لديها بيانات اعتماد التطبيق الافتراضية،
لا نقدم أي شيء.
هذا سيحصل على بيانات
اعتماد التطبيق الافتراضية
لتوثيقها، وستختار مشروعها
بناءًا على متغيرات البيئة التي

Chinese: 
它可能会消耗大量的电池
通过使用云端的现有服务
我们不仅可以容易的使用这个功能
我们还对用户非常贴心
今天，我们将会使用Google Cloud Vision API
谷歌对于谷歌照片用了大量的魔法
并让开发者可以使用
让我们回到moderator.js
我们可以在Google Cloud/Vision添加一个新的相关量
这里的斜线是因为谷歌云
节点的SKD，非常的模块化
你可以随心所欲的使用它
你还注意到请求句后面多余的括弧
这是一个初始化调用
因为我们运行的环境
有应用程序默认凭证
我们不提供任何信息
这会获取应用程序默认凭证
来验证身份，并且它会选择项目
根据环境变量

Spanish: 
utilizaríamos muchísima bateria.
Al utilizar servicios 
existentes en la nube,
lo único que obtenemos 
son grandes beneficios fácilmente
y además somos 
amables con nuestros usuarios.
Hoy vamos a usar los 
APIs de Google Cloud Vision.
Google ha aprovechado mucho 
de la magia detrás de Google Photos
y lo ha hecho accesible 
para nosotros como desarrolladores.
Así que cuando 
volvamos a nuestro moderator.js
podemos aumentar una nueva
dependencia en Google Cloud/Vision.
La barra inclinada está porque 
el nodo SDK de Google Cloud
es muy modular, puedes usar 
cuanto quieras del mismo
También han visto 
el paréntesis extra
luego de la frase
de requerimiento.
Esta es la llamada de inicialización.
Como estamos ejecutando en un ambiente 
que tiene Application Default Credentials,
no estamos proporcionando nada.
Esto dará App Default Credentials
para su autentificación 
y tomará este proyecto
basándose en un entorno variable

Japanese: 
バッテリーを大量に消耗することもあります
だから クラウド内の
既存サービスを使うことで
この素晴らしい機能を
とても簡単に得られるだけでなく
ユーザーにより親切になれます
今日は Google Cloud Vision API を使います
Google は Google フォトの背後で
多くの魔法をとり
開発者である私達にそれを
利用可能にしました
だから moderator.js に戻ると
新しい依存関係を
Google Cloud/Vision 上に付けられます
ここのこの / の理由は Google Cloud ノード
SDK が非常にモジュール化されてるからです
皆さんは好きなようにそれを
沢山又は少し使うことができます
また require 文の後に
余分なカッコがありますよね
これは初期化呼び出しです
Application Default Credentials のある
環境で実行しているので
私達は何も提供しないのです
これが その認証に
アプリのデフォルト資格情報を取得して
常に Google Cloud に置かれている
環境変数に基づいて

Portuguese: 
no cliente local, 
talvez consuma muita bateria.
Então usando serviços
já existentes na nuvem,
podemos não só ganhar
esse recurso muito facilmente,
mas somos mais gentis com nossos usuários.
E hoje usaremos 
os APIs Google Cloud Vision.
O Google pegou muito da mágica
por trás do Google Photos
e a tornou disponível para nós
como desenvolvedores.
Então quando voltamos
ao nosso moderator.js,
podemos adicionar uma nova dependência
no Google Cloud/Vision.
Essa barra aqui é porque
o Google Cloud node SDK
é muito modular...
você pode usar o quanto quiser.
Também note os parênteses extras
após a declaração require.
Esta é a chamada de inicialização.
Porque estamos rodando em um ambiente
que tem Application Default Credentials,
não estamos fornecendo nada.
Isso irá obter o App Default Credentials
para a sua autenticação,
e pegará seus projetos

Korean: 
기초한 프로젝트를 고를 겁니다
제가 말한 대로 우리는
잘 작동되는 코드를 가졌어요
이 코드는 개발 프로젝트와
제품 프로젝트에서 쉽게 작동됩니다
다음은 새 효용 함수를 더하겠습니다
이 함수는 이미지 속의
금지된 콘텐츠를 찾을 겁니다
먼저 vision.detectText를
요청합니다
이 함수는 배열된 결과
두 가지로 돌아올 것입니다
첫 번째는 이미지에서
발견되는 모든 텍스트의 배열이며
둘째는 콘텐츠가 발견되는 곳입니다
우리는 상당히 간단한 것만 필요하므로
모든 문자를 확보해서 서로 부딪치게 하고
예전에 썼던 유틸리티로 전달할 것입니다
지금 우리가 할 일은
최종 함수를 업데이트해서
교점을 참조해야 합니다
그래서 참조된 교점은
텍스트나 이미지 콘텐츠에서
위반 상황을 발견할 것입니다
그럼 백엔드를 재시작해서
나쁜 메시지를 쓰는 사람을

English: 
be set in Google Cloud.
Now it means we have
code that, like I said,
will run very well.
It can run easily on
our development project
and our production project.
Next, let's add in a
new utility function.
This function will detect
banned content inside images.
First we call a
vision.detect text.
This function will return
an array with two results.
The first is an array
of all the text that
has been found in the
image, and the second
is where that content was found.
Since we have some
fairly simple needs,
we'll just take
all of that text,
smash it together, and then
pass it on to the utility
we wrote earlier.
Now all we need to do is
update our final function,
should flag node.
So it will detect
either a violation
in text or in image contents.
So let's restart our backend
and see if we've successfully
blocked these trolls.

Portuguese: 
baseados em um ambiente variável
que sempre estará no Google Cloud.
Agora significa que temos código
que, como disse, rodará bem.
Rodará facilmente em nosso
projeto de desenvolvimento
e em nosso projeto de produção.
Em seguida, vamos adicionar
uma nova função utilitária.
Esta função detectará
conteúdo proibido dentro das imagens.
Primeiro chamaremos vision.detectText.
Esta função retornará um array
com dois resultados.
O primeiro é um array de todos os textos
que foram encontrados na imagem,
o segundo é onde
o conteúdo foi encontrado.
Como temos necessidades bem simples,
pegaremos todo aquele texto,
o colocamos juntos, depois o passamos
para o utilitário que escrevemos antes.
Agora tudo que precisamos fazer
é atualizarmos nossa função final,
shouldFlagNode.
Então detectaremos uma violação em texto
ou em conteúdo de imagem.

Japanese: 
プロジェクトを選びます
つまり とてもよく実行される
コードができたことになります
それは開発プロジェクトでも
実稼働プロジェクトでも
簡単に実行されます
次に 新しいユーティリティ関数を
付けましょう
この関数は画像内の
禁止されたコンテンツを検出します
まず vision.detectText を呼び出します
この関数は２つの結果のある
配列を返します
最初のは画像に見つかった
テキスト全部の配列で
２番目はそのコンテンツが見つかった場所です
私達のニーズは非常に単純なので
そのテキストすべてを受け取り
一緒くたにして 次に前に書いた
ユーティリティに渡します
あとやる必要があるのは
最後の関数 shouldFlagNode を
更新するだけです
すると テキスト内または
画像コンテンツ内に違反を検出します
ではバックエンドを再起動して

Spanish: 
que siempre estará 
en Google Cloud.
Quiere decir que tenemos código que,
como dije, se ejecutará muy bien.
Se ejecutará fácilmente en
nuestro proyecto de desarrollo
y en nuestro 
proyecto de producción.
A continuación,
aumentemos una 
función de utilidad.
Esta función detectará 
contenido prohibido en las imágenes.
Primero llamamos a vision.detect.text.
Esta función nos dará 
una serie con dos resultados.
La primera,
es una serie de todo el texto 
que se ha encontrado en la imagen
y la segunda
es donde se ha encontrado el contenido.
Como tenemos necesidades simples,
tomaremos todo este texto
lo pondremos junto
y lo pasaremos a la 
utilidad que escribimos antes.
Ahora todo lo que debemos hacer es
actualizar nuestra función final,
marcar el nodo.
Así detectará una violación en el texto
o en el contenido de las imágenes.
Reiniciemos nuestro backend y veamos si

Indonesian: 
berdasarkan variabel environment
yang akan selalu diatur di Google Cloud.
Berarti kita punya kode
yang akan berjalan sangat baik.
Dapat berjalan dengan mudah
pada development project
dan production project.
Selanjutnya, mari tambahkan
fungsi utilitas baru.
Fungsi ini akan mendeteksi
konten terlarang dalam gambar.
Pertama, tulis vision.detectText.
Fungsi ini akan mengembalikan
array dengan dua hasil.
Pertama adalah array dari semua teks
yang telah ditemukan dalam gambar.
Kedua, adalah tempat konten ditemukan.
Karena kebutuhan kami sederhana,
kami akan mengambil semua teks itu,
menyatukannya,
lalu meneruskannya ke utilitas
yang kami tulis sebelumnya.
Sekarang tinggal memperbarui
fungsi akhir, shouldFlagNode.
Jadi, akan mendeteksi pelanggaran
baik dalam teks atau dalam konten gambar.
Mari mulai ulang backend
dan lihat apakah kita berhasil

Arabic: 
يتم تحديدها في سحابة Google.
الآن يعني لدينا
برمجة كما قلت،
ستعمل بشكل جيد.
بإمكانها العمل بسهولة على
مشروع تطويرنا
وعلى مشروع إنتاجنا.
التالي، لنضيف تابع خدمة جديد.
سيكشف هذا التابع المحتويات
المحظورة داخل الصور.
أولًا نستدعي vision.detectText.
يعيد هذا التابع مصفوفة بنتيجتين.
الأولى مصفوفة لكل النص الذي
وجد في الصورة، والثانية
حيث وجدت تلك المحتويات.
بما أن لدينا احتياجات بسيطة،
سنأخذ كل ذلك النص،
نضعه مع بعضه، ومن ثم
نمرره على الخدمة التي كتبناها سابقًا.
الآن كل مانحتاجه هو تعديل
تابعنا النهائي،
يجب أن يعلّم عقدة.
بحيث سيكشف إما خرق
في محتويات نص أو صورة.
لنعد تشغيل خلفيتنا
ونرى إذا نجحنا
بحظر المتصيدين.

Chinese: 
然后发送到谷歌云
这意味着我们有了
可以很好运行的节点
它可以在我们开发项目和生产项目上
很好的运行
接下来，让我们添加一个新的效用函数
这个函数可以检测到图片中被禁用的内容
首先，我们要调用vision.detect文本
这个函数会返回一个数组，有两个结果
它首先是一个数组
包含了图像中的所有文本
其次，它包含了这些内容的来源
由于我们的需求很简单
我们只需要使用所有的文本
把它们放在一起
发送给我们之前编写的效用函数
现在，我们只需要更新最后的函数
设置标记节点
这样我们就可以检测到
在文本和图片中的禁用内容了
让我们重启后端
看看我们有没有成功的拦住这些污言秽语

Japanese: 
無事に荒らしをブロックしたか見てみましょう
すると今度は突然
画像にフラグが付きます
さっき言ったように
実際のアプリでは
不快なコンテンツを除去しますが
ここではデモの為に
それをぼかしてるだけです
荒らしを２つやっつけましたが
私の傲慢さが自分に使われて
ちょっと恥ずかしかったです
Kat が対処方法を見つけてくれました
だから 次の段階で
人間の手を加えようと思います
不快なメッセージを付ける時はいつも
通知されるようにしたいです
そうすると私はアプリに戻るのを知って
これらの会話を落ち着かせ始められます
そこで これに Firebase Cloud 
Messaging を使います
準備として Kat がブラウザに
もう１つ機能を付けてくれています
そのウェブアプリバージョンを使う誰もが
管理者の振りをします
新しくリリースされたブラウザ用 Firebase 
Cloud Messaging API を使って

Korean: 
성공적으로 막았는지 보세요
그러면 이제 갑자기
이미지가 참조 설정됩니다
우리가 전에 말한 것처럼
진짜 애플리케이션에서
모욕적인 콘텐츠를 없앨 것입니다
여기선 데모이기 때문에
그냥 흐릿하게 처리합니다
이렇게 나쁜 메시지를 쓰는
사람을 두 번 막았지만
전 약간 당황했습니다
제가 자만하는 동안
캣 씨가 제2의 해결책을 찾았거든요
그럼 다음 단계를 위해서
인간적인 접촉을 더하려고 합니다
저는 모욕적인 메시지가 올라올 때마다
그에 대한 알림을 받아서
애플리케이션으로 다시 들어와서
그 대화를 진정시키고 싶습니다
그래서 Firebase 클라우드 메시징을
이 작업에 사용하겠습니다
이걸 준비하려고 캣 씨가
브라우저에 다른 특징을 추가했습니다
모든 사람이 쓰는 웹 앱의 버전이
관리자 버전이라고 가정하겠습니다
그리고 브라우저용으로 새로 출시된
Firebase 클라우드 메시징 API로
푸쉬 알림을 받을 수 있는

Spanish: 
hemos bloqueado a los trolls exitosamente.
y ahora marca la imagen.
Como he dicho, en una aplicación real
podrías quitar el contenido ofensivo.
Aquí por el bien del demo, 
solo lo estamos difuminando.
Así que vencimos a los trolls dos veces,
pero estaba un poco avergonzado
cuando mi arrogancia se uso contra mi, 
y Kat encontró una solución alternativa.
Así que en nuestro próximo paso,
vamos a aumentar el toque humano.
Prefiero asegurarme de
que me notifiquen cada vez que
aumentan un mensaje ofensivo
para saber que debo 
volver a la aplicación
para calmar las cosas en la conversación.
Así que usaremos 
Firebase Cloud Messaging para ello.
En preparación,
Kat ha aumentado una
nueva característica al navegador.
Fingiremos que todo quien usa 
esta versión de la aplicación web
es un administrador.
Y vamos a usar la nueva aplicación 
de Firebase Cloud Messaging API
para navegadores.

Indonesian: 
memblokir troll ini.
Tiba-tiba, gambar ini ditandai.
Seperti kami katakan,
dalam aplikasi sungguhan,
kita mungkin menghapus
konten yang menyinggung.
Di sini, demi demo, kita kaburkan saja.
Jadi, kita mengalahkan troll itu
dua kali, tapi saya agak malu
saat arogansi saya digunakan melawan
saya, dan Kat bisa mengakalinya.
Untuk langkah selanjutnya, kami akan
mencoba menambahkan sentuhan manusia.
Saya ingin memastikan saya diberi tahu
setiap ada pesan menyinggung
agar saya tahu harus kembali ke aplikasi
dan mulai menenangkan percakapan ini.
Kami akan menggunakan
Firebase Cloud Messaging untuk ini.
Dalam persiapan, Kat telah
menambahkan fitur lain ke browser.
Kami akan berpura-pura
semua orang yang menggunakan
versi aplikasi web adalah admin.
Kita akan menggunakan API Firebase
Cloud Messaging yang baru untuk browser

Chinese: 
只一瞬间，它就把图像设置为标记
就像我们之前所提到的那样
在一个真实的应用中
你会删除违规内容
在这里，为了演示效果
我只是将它模糊化
这样我们就成功拦截了两次污言秽语
但是我有一些尴尬
我的自大给我带来了麻烦
Kat找到了解决方案
下一个步骤
就是要添一点人情味进去
我宁愿确保，我可以收到通知
但有人发表污言秽语的时候
这样我就可以回到应用
让大家的对话恢复理智
我们在这里要使用Firebase云信息
作为准备，Kat添加了另一个功能到浏览器
我们假装所有使用这个网页应用的人
都是管理员
我们将使用最新发布的Firebase Cloud Messaging API

Portuguese: 
Vamos reiniciar nosso back-end
e ver se bloqueamos os trolls com sucesso.
Agora de repente,
coloca a imagem como sinalizada.
Como mencionamos antes,
em um aplicativo real,
talvez tenha que remover
conteúdo ofensivo.
Aqui, por causa da demonstração,
iremos só borrá-lo.
Derrotamos os trolls duas vezes,
mas estava com um pouco de vergonha
quando minha arrogância
foi usada contra mim, e Kat achou um meio.
Então para nosso próximo passo,
iremos tentar adicionar um toque humano.
Eu teria certeza de que seria notificado
caso adicionem uma mensagem ofensiva
para que possa voltar ao aplicativo
e começar a acalmar essas conversas.
Usaremos Firebase Cloud
Messaging para isso.
Em preparação, Kat adicionou
outro recurso ao navegador.
Iremos fingir que todo mundo
que usa a versão do app da Web
é um administrador.
E usaremos o recém lançado
Firebase Cloud Messaging API
para navegadores

Arabic: 
والآن فجأة، تحدد الصورة بأنها معلّمة.
كما ذكرنا سابقًا، في تطبيق حقيقي،
من الممكن أن تزيل المحتويات المسيئة.
هنا، بما أنه عرض، سنشوه الصورة.
إذًا هزمنا النتصيدين مرتين،
ولكنني خجلت عندما
استخدمت غطرستي ضدي،
ووجدت كات حلًا.
لذا لخطوتنا التالية،
سنحاول إضافة لمسة بشرية.
أود أن أتأكد أنه سيتم
تنبيهي عندما
يضيفون رسالة مسيئة
بحيث أعرف أن أعود
إلى التطبيق وابدأ بتهدئة هذه المحادثات.
لذا سنستخدم تراسل Firebase
السحابي لهذا.
في التحضير، أضافت كات
ميزة أخرى إلى المتصفح،
سنتظاهر أن جميع من يستخدم
نسخة تطبيق الويب هو مشرف.
وسنستخدم واجهة برمجة التطبيقات
Firebase السحابية

English: 
So now all of a sudden, it
sets the image as flagged.
Like we've mentioned before,
in a real application,
you might remove
offensive content.
Here, for the sake of a
demo, we're just blurring it.
So we defeated the
trolls twice, but I
was a little bit
embarrassed when
my arrogance was used against
me, and Kat found a workaround.
So for our next
step, we're going
to try to add a human touch.
I would rather make sure
that I am notified whenever
they add an offensive message
so I know to come back
into the application
and start calming down
these conversations.
So we're going to use Firebase
Cloud Messaging for this.
In preparation, Kat has added
another feature to the browser.
We're going to pretend that
everyone who uses the web app
version is an admin.
And we're going to use the
newly released Firebase Cloud

Portuguese: 
para ter uma identificação de instalação
onde podemos receber notificações de push.
Salvaremos ao node dos administradores
no banco de dados,
e agora podemos ir
para nosso código back-end
para enviar uma mensagem
a qualquer administrador
sempre que conteúdo ofensivo
for encontrado.
Então primeiro, vamos criar
uma função utilitária.
Esta função enviará uma mensagem
para todos os administradores.
Primeiro, usamos o database value listener
para pegar todos os tokens registrados
dentro do node do administrador.
Depois, usaremos o REST API
para enviar nossa mensagem.
O Firebase Cloud Messaging
ainda não tem um remetente
de API para JavaScript... Só de cliente.
Mas o REST API é muito simples.
A maior dificuldade aqui
é que temos que adicionar
uma chave de servidor.
Você pode obtê-la nas configurações
do Firebase Cloud Messaging
no seu console Firebase.
Vá em General, Firebase Cloud Messaging,
e a encontrará ali.
Mas como o nome diz,
esta é uma chave de servidor.

Chinese: 
来获取安装ID
然后，我们就可以收到推送通知了
我们将把它保存在数据库中的管理员节点
现在我们就可以使用后端代码
来发送信息给任何一个管理员
每当发现有攻击性的内容时
所以首先要创建一个效用函数
这个函数会把信息发送给所有的管理员
我们使用数据库值监听器
来监控所有在管理员节点的注册令牌
然后，我们使用REST API来发送我们的信息
Firebase云信息暂时还没有
针对JavaScript的发送者API
它只有一个客户端API
但是REST API非常的简单
最大的困难在于
我们需要添加一个服务器密钥
我们可以在Firebase云信息设置中获取它
在你的Firebase控制台中
来到“General”，“Firebase Cloud Messaging”
你就可以找到它
它的名字暗示它是一个服务器密钥

Arabic: 
المطلقة حديثًا للمتصفحات للحصول
على هوية تثبيت حيث
بإمكاننا استقبال إشعار دفع.
سنحفظها في عقدة المشرف في قاعدة البيانات،
والآن بإمكاننا الذهاب إلى عقدة خلفيتنا
لإرسال رسالة لأي مشرف
كلما وجدت محتويات مسيئة.
أولًا، لننشئ تابع خدمة.
سيرسل هذا التابع رسالة لكل المشرفين.
أولًا، نستخدم قيمة مستمع قاعدة البيانات
لجلب كل كل الرموز المسجلة
داخل عقدة المشرف.
التالي، سنستخدم واجهة برمجة 
التطبيقات RESTالتطبيقات لإرسال رسائلنا.
لا يملك تراسل Firebase السحابي
واجهة برمجة التطبيقات المرسلة لجافاسكريبت
-- فقط واجهة برمجة التطبيقات للزبون بعد.
لكن واجهة برمجة التطبيقات
REST بسيطة للغاية.
أكبر صعوبة هنا
أنه يجب أن نضيف مفتاح خادم.
بإمكانك إيجاد هذا في إعدادات
تراسل Firebase السحابي
في وحدة تحكم Firebase.
لذا نذهب إلى General،
Firebase Cloud Messaging،
وستجدها هناك.
كما يوحي الاسم، هذا مفتاح خادم.

Spanish: 
Para tener una ID 
de instalación donde
puedo recibir notificaciones.
Lo guardaremos en el nodo de 
administrador en la base de datos,
y volvemos a nuestro código de backend,
para enviar un mensaje 
a cualquier administrador
cada vez que 
encontremos contenido ofensivo.
Primero creemos una función de utilidad
Esta función enviará un 
mensaje a todos los administradores.
Usemos la base de datos con valor oyente
para coger todas las fichas registradas
dentro del nodo de administrador.
Luego usaremos el API REST 
para enviar nuestro mensaje.
Firebase Cloud Messaging no tiene todavía
un API de remitente para JavaScript
solo un API de cliente.
Pero el API de REST es muy simple.
Lo más difícil es que
debemos aumentar una llave de servidor.
Esto lo obtienes en las propiedades 
de Firebase Cloud Messaging
en la consola de Firebase.
Así que ve a General, 
en Firebase Cloud Messaging
y lo encontrarás ahí.
Como el nombre lo indica,
esta es una llave de servidor.

Korean: 
설치 ID를 받을 것입니다
설치 ID를 데이터베이스의
관리자 교점에 저장하면
모욕적인 콘텐츠가 발견될 때마다
관리자들에게 메시지를 보낼 수 있는
백엔드 코드로 갈 수 있습니다
그럼 첫 번째로 효용 함수를 만들겠습니다
이 함수는 메시지를
모든 관리자에게 보냅니다
일단 관리자 교점 속에 등록된
모든 토큰을 가지고 올 수 있는
데이터베이스값 수신기를 씁니다
다음은 우리 메시지를 보내는
REST API를 사용하겠습니다
Firebase 클라우드 메시징은
자바스크립트용 발송자 API가 아직 없고
클라이언트 API만 있습니다
하지만 REST API는 아주 간단합니다
여기서 가장 어려운 점은
서버 키를 추가해야 한다는 거죠
여러분은 Firebase 콘솔 속의
Firebase 클라우드 메시징 설정에서
서버 키를 추가할 수 있습니다
제너럴 클래스 아래로 간 다음
Firebase 클라우드 메시징에서
서버 키를 찾을 것입니다
이름에서 알 수 있지만 이게 서버 키입니다

English: 
Messaging API for browsers to
get an installation ID where we
can receive push notifications.
We'll save it to the admin's
node in the database,
and now we can go
to our backend code
to send a message
to any administrator
whenever offensive
content is found.
So first, let's create
a utility function.
This function will send
a message to all admins.
First, we use the
database value listener
to fetch all registered tokens
inside the admin's node.
Next, we're going to use the
REST API to send our message.
Firebase Cloud
Messaging doesn't yet
have a sender API for
JavaScript-- only a client API.
But the REST API is very simple.
The biggest difficulty
here is that we
have to add a server key.
You can get this in the Firebase
Cloud Messaging settings
in your Firebase console.
So go under General,
Firebase Cloud Messaging,
and you'll find it there.
As the name implies, though,
this is a server key.

Japanese: 
プッシュ通知を受け取れる
インストール ID を取得します
それをデータベースの
管理者のノードに保存します
これでもう バックエンドコードに行って
どの管理者にも
不快なコンテンツが見つかるといつも
メッセージを送れます
ではまず ユーティリティ関数を作りましょう
この関数は全管理者にメッセージを送ります
まずデータベースの値リスナーを使い
管理者ノード内に登録されたトークンを
全てフェッチします
次に REST API を使って
メッセージを送ります
Firebase Cloud Messaging にはまだ
JavaScript 用の送信者 API がありません--
クライアント API だけです
だが REST API はとても簡単です
ここで１番難しいのは
サーバーキーを付けねばならないことです
これは Firebase コンソールの
Firebase クラウドメッセージング設定で
取得できます
「全般」の下に行くと
Firebase クラウドメッセージング
そこにあります
だが名前の通り
これはサーバーキーです

Indonesian: 
guna mendapat ID instalasi
tempat menerima notifikasi push.
Kita akan menyimpannya
ke node admin dalam database.
Kini, kita bisa beralih ke kode backend
untuk mengirim pesan
ke administrator mana pun
setiap ada konten menyinggung.
Pertama, mari buat fungsi utilitas.
Fungsi ini akan mengirim
pesan ke semua admin.
Pertama, kita menggunakan
listener database value
untuk mengambil semua token terdaftar
dalam nodus admins.
Berikutnya, kita akan menggunakan
API REST untuk mengirim pesan.
Firebase Cloud Messaging belum
memiliki API pengirim untuk JavaScript,
hanya API klien.
Tapi API REST sangat sederhana.
Kesulitan terbesar sini adalah
kita harus menambahkan server key.
Anda bisa mendapatkan ini
dalam pengaturan Firebase Cloud Messaging
di konsol Firebase.
Ke General>Firebase Cloud Messaging.
Anda akan menemukannya di sana.
Tapi seperti namanya,
ini adalah server kunci.

Japanese: 
それをクライアントに渡すべきではありません
もしそうしたら彼らは望む
どんなプッシュ通知も送れます
私達は これら２つが少しの力で
することをもう見ましたね
これが持てたら もう１回
child_added リスナーを変えてみましょう
そのメッセージにフラグが付いてるか
確認し
もし付いていたら
メッセージを送ります
ではバックエンドをもう１度再起動します
ブラウザ用 Firebase クラウド
メッセージングで
私のお気に入りの機能の１つは
ブラウザが無い時ですら動くことです
では このブラウザのウィンドウを閉じて
もう１度 Puff に荒らさせてみます
よく分かっています
Puff はホントは良いやつです
こんなに何度もそれらを
犠牲にならせてくれて
拍手をお願いします
ありがとうございます
デモがうまく行く場合に
もう１回拍手をとっておきます

Spanish: 
No deberías dársela a tus cliente.
Si lo haces,
podrán enviar las notificaciones 
de inserción que deseen
Ya hemos visto lo que estos dos
hacen con un poco de poder.
Una vez que tenemos esto, 
cambiemos nuestro pequeño oyente agregado
una vez más.
Vamos a revisar si
el mensaje ha sido marcado,
y si está,
enviaremos el mensaje.
Reiniciémos nuestro backend una vez mas
y veremos que 
una de mis características favoritas
de Firebase Cloud 
Messaging para el navegador
es que funciona aún
cuando no está el navegador.
Así que cerremos está ventana
y permitamos que
Puff nos trollee una vez más.
Ya lo se.
Puff es un buen jugador.
Así que un aplauso 
por permitirme lanzarlo
bajo el camión tantas veces.
Guardemos una ronda de aplausos 
para cuando funcione el demo.

English: 
You should not give it
away to your clients.
If you do, they'll be able to
send whatever push notification
they want to.
We've already seen
what these two
do with a little bit of power.
So once we have this, let's go
change our child added listener
one more time.
We're going to
check whether or not
the message has been
flagged, and if it has,
we'll send the message.
So let's restart our
backend one more time,
and we'll notice that one
of my favorite features
about Firebase Cloud
Messaging for the browser
is that it works even
when the browser is gone.
So let's go ahead and
close this browser window,
and we'll let Puff
troll us one more time.
I'm sure, I know.
Puff is really good sport.
Let's give a round of applause
for letting me throw them
under the bus so many times.
Thanks.
We'll save one more round of
applause if the demo works.

Arabic: 
لا يجب أن تعطيه لزبائنك.
إذا قمت بذلك، سيتمكنون من إرسال
أي إشعارات دفع يرغبون بها.
رأينا ما يمكن لهذين
القيام به بقليل من القوة.
عندما نحصل على هذا، لنغير
مستمع ابننا المضاف مرة أخرى.
سنتأكد فيما إذا علّمت
الرسالة أم لا، وإذا علّمت
سنرسل الرسالة.
لنعيد تشغيل خلفيتنا مرة أخرى،
وسنلاحظ أن أحد أكثر ميزاتي المفضلة
حول تراسل Firebase السحابي للمتصفح
هي أنها تعمل حتى عندما يختفي المتصفح.
لنغلق نافذة المتصفح هذه،
وسندع Puff يتصيدنا مرة أخرى.
أنا متأكد، أنا أعلم.
Puff رياضة جيدة جدًا.
لنصفق للسماح لي برميهم
تحت الباص لمرات عديدة.
شكرًا.
سنوفر تصفيقًا آخر إذا عمل العرض.

Portuguese: 
Não deve oferecê-la a seus clientes.
E se o fizer, serão capazes de enviar
qualquer notificação de push que quiserem.
Já vimos o que esses dois fazem
com um pouco de poder.
Quando tivermos isso, vamos mudar
nosso child_added listener mais uma vez.
Vamos checar se a mensagem
foi marcada ou não,
e se sim, enviaremos a mensagem.
Então vamos recomeçar
nosso back-end mais uma vez,
e notaremos que um dos meus
recursos favoritos
do Firebase Cloud Messaging
para o navegador
é que funciona mesmo quando
não temos navegador.
Então vamos fechar
esta janela de navegador,
e vamos deixar Puff nos trollar
mais uma vez.
Sim, eu sei.
Puff é um cara bacana.
Uma salva de palmas por me deixarem
sacrificá-los tantas vezes.
Obrigado.
Vamos guardar mais uma salva de palmas
para se o demo funcionar.

Chinese: 
你不能把它泄漏给你的客户
如果你泄漏了，他们可以发送任何
推送通知
我们已经知道了这两个工具的功能
有些强大
我们有了这个之后，让我们再一次改变
有子文件的监听器
我们将检测
信息是否被标记
如果有标记，我们将发送信息
再一次重启我们的后端
请注意，我最喜欢的一个
Firebase云信息的一个功能是
即使我们关闭浏览器，它也一样可以运行
所以让我们关闭浏览器
让我们再发一些污言秽语
我很确信
吹嘘是一种很好的运动
让我们给予热烈的掌声
让我对他们进行那么多次的人身攻击
谢谢大家
如果演示成功的话，请大家再次鼓掌

Indonesian: 
Jangan memberikannya ke klien Anda.
Jika diberikan, mereka bisa mengirim
notifikasi push apa pun yang mereka ingin.
Kami pernah melihat aksi keduanya
dengan sedikit kekuasaan.
Setelah dapat ini, mari ubah
listener child_added sekali lagi.
Kita akan memeriksa
apakah pesan sudah ditandai.
Jika sudah, kita akan mengirim pesan itu.
Mari start ulang backend sekali lagi.
Kita akan melihat
salah satu fitur favorit saya
dari Firebase Cloud Messaging
untuk browser
adalah ia bekerja
bahkan saat browser tak ada.
Mari tutup jendela browser ini.
Kita biarkan Puff
mengganggu kita sekali lagi.
Saya yakin, saya tahu.
Puff benar-benar sportif.
Mari tepuk tangan karena membiarkan saya
mengkhianati mereka berkali-kali.
Kita simpan satu tepuk tangan lagi
jika demo ini berhasil.

Korean: 
여러분의 클라이언트로
서버 키를 그냥 보내면 안 됩니다
그렇게 한다면 클라이언트는
자신이 원하는 모든 푸쉬 알림을
보낼 수 있을 겁니다
이 두 명이 적은 권한으로
어떤 일을 이미 했는지 보셨잖아요
그럼 서버 키를 가지고 왔으니
child_added 수신기를
한 번 더 바꿔볼까요
우리는 메시지가 참조 됐는지 아닌지
점검한 다음, 참조됐다면
메시지를 보낼 겁니다
백엔드를 한 번 더 재시작할게요
브라우저용 Firebase
클라우드 메시징에서
제가 좋아하는 특성 중 하나는
브라우저가 꺼졌을 때도 작동한다는 겁니다
그럼 이 브라우저 윈도우를 끄고
퍼프 씨에게 나쁜 메시지를
한 번 더 보내라고 할게요
전 확실히 알고 있어요
퍼프 씨는 정말 좋은 지원자예요
이 두 사람이 컴퓨터를
계속 조작하느라 수고하는데
박수 좀 쳐주시겠어요?
감사합니다
데모가 움직일 때를 대비해서
박수 한 번은 아끼도록 하죠

Arabic: 
هل تودون صورة؟
أجل، لنضف صورة.
هذا أسهل.
تحذير، تم تعليم رسالتك.
لذا أقدر زميلاي
للسماح لي باللعب والتظاهر
بأني المستخدم الشرير الذي
يحاول إعاقة تطبيقي.
ولكن في زمن قصير، أضفنا
العديد من الميزات لتطبيقنا.
والعظيم أننا تمكنا من القيام بهذا
وتأمين خلفية بدون إدارة البنية التحتية.
لأننا الآن بما أن لدينا
تطبيق نحبه،
من السهل استمرار التحرك.
هل بإمكاننا الانتقال لشرائح العرض؟
هل بإمكاننا الانتقال لشرائح العرض؟
لدينا تطبيق نحبه، وهذا كل
ما تحتاجه للإنتاج.
لدينا ملف بسطرين app.yaml
السطر الأول يقول أننا ننشئ عقدة نطبيق.

Indonesian: 
Anda ingin gambar?
Ya, mari tambahkan gambar.
Itu lebih mudah.
Peringatan, pesan Anda telah ditandai.
Saya hargai para kolega saya
karena membiarkan saya
ikut main dan berpura-pura
menjadi pengguna jahat yang berusaha
menggagalkan aplikasi saya.
Tapi dalam waktu singkat, kita sudah
menambahkan banyak fitur hebat
ke aplikasi kita.
Hebatnya, kita bisa melakukan semua ini
dan menambahkan backend aman
tanpa mengatur infrastruktur.
Karena kini kita punya
aplikasi yang kita mau.
sangat mudah untuk melanjutkan.
Bisa ganti slide ini?
Bisa ganti slide ini?
Kita punya aplikasi yang kita mau.
Hanya ini yang dibutuhkan
untuk beralih ke production.
Kita punya file app.yaml dua baris.
Baris pertama mengatakan
kita membuat aplikasi node.

Chinese: 
你需要一个图片吗？
对的，让我们添加一个图片
这更简单
好啦
警告，你的信息被标记
我真的非常感谢我的同事
让我可以使用这个应用
并假装是一个邪恶的用户
来破坏我的应用
我们没花多久，就为我们的应用
添加了很多很棒的功能
这真的很棒，我们可以做到这些
不用管理基础框架
就可以确保后端的安全
因为我们现在有个喜欢的应用
想要继续到下一步很容易
我们可以回到幻灯片吗？
我们可以回到幻灯片吗？
我们有了一个喜欢的应用
这样就可以用于生产了
我们有两行app.yaml 代码
第一行让我创建一个节点应用

Korean: 
이미지로 하시려고요?
네, 이미지를 추가하죠
그게 더 쉬워요
펑
조심해요, 여러분 메시지가 참조됐어요
제 동료들에게 감사합니다
제 발표를 함께 하고
제 애플리케이션을 방해하는
나쁜 사용자인척 해줘서요
하지만 그리 길지 않은 시간에
우린 애플리케이션에 좋은 특성을
많이 추가했습니다
그리고 대단한 점은
이 모든 작업이 가능했고
인프라를 운영하지 않고
안전한 백엔드를 추가했다는 겁니다
왜냐하면, 마음에 드는 앱으로 바뀌어서
다음 단계로 넘어가기 아주 쉬워졌거든요
슬라이드로 돌아갈 수 있어요?
슬라이드로 갈 수 있나요?
그럼 우리 마음에 드는 앱을 완성했으니
제품을 선보일 차례이군요
두 줄로 된 app.yaml 파일이 있죠
첫째 줄은 노드 앱을 만들었다는 뜻이고

English: 
Do you want an image?
KAT FANG: Yeah,
let's add an image.
That's easier.
THOMAS BOULDIN: Boom.
Warning, your message
has been flagged.
So I really appreciate
my colleagues
letting me play
along and pretend
to be the evil users trying
to thwart my application.
But in not very long, we've
added a lot of great features
to our application.
And what's great is we've
been able to do all of this
and add a secure backend
without managing infrastructure.
Because now that we have
an app that we like,
it's very easy to
continue moving on.
Can we switch back to slides?
Can we switch to slides?
So we have an app we
like, and this is all
it takes to go to production.
We had a two-line app.yaml file.
The first line says that
we're creating a node app.

Spanish: 
¿Quieres una imagen?
- Sí, aumentemos una.
Es más fácil.
- ¡Boom!
Atención, su mensaje ha sido marcado.
Realmente valoro a mis colegas
por dejarme jugar y pretender
ser usuarios malvados 
que tratan de dañar mi aplicación.
Pero en poco tiempo,
hemos agregado fantásticas características
a nuestra aplicación.
Y lo genial es que hemos podido hacerlo
y agregar un backend seguro, 
sin tocar la infraestructura.
Porque ahora que tenemos
una aplicación que nos gusta,
es muy fácil seguir adelante.
¿Podemos volver a las dispositivas?
¿Lo podemos hacer?
Así que tenemos una 
aplicación que nos gusta
y esto es todo lo que necesitamos 
para mandarla a producción.
Teníamos un archivo 
app.yaml de dos líneas.

Portuguese: 
Você quer uma imagem?
Sim, vamos adicionar uma imagem.
Isso é mais fácil.
"Aviso, sua mensagem foi sinalizada."
Eu realmente aprecio que meus colegas
me deixaram entrar na brincadeira
e fingir ser um usuário malvado
tentando impedir meu aplicativo.
Mas em pouco tempo,
adicionamos ótimas características
ao nosso aplicativo.
E o ótimo é que fomos capazes
de fazer tudo isso
e adicionar um back-end seguro
sem gerenciamento de infraestrutura.
Porque agora que temos
um app que gostamos,
é bem fácil continuar a seguir em frente.
Podemos voltar aos slides?
Podemos mudar de slides?
Então temos um app que gostamos,
e isso é tudo precisamos para
ir para produção.
Tínhamos um app de duas linhas
de arquivo app.yaml.
A primeira linha diz
que estamos criando um app de node.

Japanese: 
画像が欲しい？
ええ 画像を付けましょう
この方が簡単です
「警告 あなたのメッセージは
フラグが設定されています」
ほんとに同僚に感謝します
私に協力して
アプリを挫折させようとする
悪いユーザーの振りをしてくれたんです
しかし あまり長くかからずに
アプリに沢山良い機能を付けました
凄いことはインフラ管理が無いのに
この全部を作れて
安全なバックエンドを付けられたことです
望むアプリができたら
進み続けるのは簡単です
スライドに戻せる？
スライドに切り替えられる？
だから 好きなアプリができて
実稼働になるまでかかるのは
これだけです
２行の app.yaml ファイルがありました
１行目は ノードアプリを作ると書いて

Spanish: 
La primera línea decía que 
estamos creando una app de nodo.
La segunda dice que 
estamos usando App Engine Flex.
Y entonces podemos usar 
la herramienta de comando gcloud,
gcloud app deploy
y estamos listos.
Tenemos un gran backend.
Les agradezco por darme un tiempo
como desarrollador de backend
para ayudar y contribuir.
- Gracias Thomas.
En realidad,
creo que estoy de acuerdo contigo.
Definitivamente es posible,
aumentar un gran 
funcionalidad a una aplicación de Firebase
codificando un poco el backend.
Lo que más me impresionó
es la poca infraestructura 
que debiste hacer.
Kat fue esencial en escribir 
el código del lado del cliente,
como se hace en cualquier aplicación.
Echemos un vistazo a lo que hemos hecho.
Empezamos conectando nuestra 
aplicación de chat a Realtime Database,
y al hacerlo pudimos 
almacenar y sincronizar la información
entre todos los
dispositivos en tiempo real,
especialmente cuando vimos 
que el inalámbrico funcionaba
en las máquinas.

Portuguese: 
A segunda linha diz que estamos
usando App Engine Flex.
E depois podemos usar
a linha de comando gcloud,
gcloud app deploy, e estamos prontos.
Temos um ótimo back-end.
E aprecio que me deram tempo
como desenvolvedor back-end
para ajudar a contribuir.
Obrigado, Thomas.
Na verdade, acho que concordo com você.
É com certeza possível, aparentemente,
adicionar uma boa funcionalidade
a um app Firebase
escrevendo código back-end.
O que realmente me impressionou
foi o pouco de infraestrutura
que você teve que fazer.
A Kat estava escrevendo
essencialmente só código client-side,
assim como temos no resto do app.
Vamos dar uma olhada no que fizemos.
Começamos ligando o nosso app de chat
ao Realtime Database, e fazendo isso,
podemos armazenar e sincronizar dados
entre todos os dispositivos em tempo real,
especialmente quando nos asseguramos
que o wireless funcionava
em uma das máquinas.

English: 
The second line says that we
are using App Engine Flex.
And then we can use the gcloud
command line tool, gcloud app
deploy, and we're done.
We have a great backend.
And I appreciate
you guys giving me
some time as a backend
developer to help contribute.
FRANK VAN PUFFELEN:
Thank you, Thomas.
Actually, I think
I agree with you.
It's definitely
possible, apparently,
to add good functionality
to a Firebase app
by writing some backend code.
What I really, really
was most impressed
with is how little
infrastructure you had to do.
Kat was only essentially
writing client-side code,
just like we have
in rest of the app.
So let's have a look
here at what we've done.
So we started by wiring up
our chat app to the Realtime
Database, and by doing that,
we could store and synchronize
data between all of the
devices in real time,
especially when we made
sure the wireless was
working on one of the machines.

Japanese: 
２行目は App Engine Flex を使うと
書いてあります
gcloud コマンドラインツールの
gcloud app deploy を使って
完了です
すぐれたバックエンドができています
君達がバックエンド開発者の私に
貢献する時間をくれてありがたいです
ありがとう　Thomas
実際私も同意見です
バックエンドコードを書くことによって
Firebase アプリに良い機能を
加えることは明らかに可能です
本当にとても感動したのは
殆どインフラをしなくて
済んだことでした
Kat は本質的にクライアント側
コードを書いただけでした
私達がアプリの残りでやるのと同じです
ではここで私達がしたことを
見てみましょう
まずリアルタイムデータベースに
チャットアプリを配線して
それをすることによって
リアルタイムにあらゆるデバイス間で
データを格納し同期できました
特にマシンの片方でワイヤレスが
機能していることを確認した時ですね

Chinese: 
第二行显示我们正在使用App Engine Flex
之后我们就可以使用谷歌云控制栏工具
谷歌云应用部署，这样就好了
我们有一个强大的后端
感谢你们给了我一些时间
作为后端开发者做出我的贡献
谢谢你，Thomas
事实上，我同意你的观点
很显然，我们确实可以
将好的功能添加到Firebase应用
通过编写后端代码
最让我印象深刻的是
你真的没有用到很多基础框架
Kat仅仅写了必要的客户端代码
就像在剩下的应用里一样
让我们回顾一下为，我们都做了什么
我们先通过实时数据库
编写了我们的谈话应用
这样做，我们可以实时在所有设备间
储存，同步数据
尤其当我们确保
无线网络在我们的机器上可以用后

Arabic: 
الثاني يقول أننا نستخدم
محرك التطبيقات Flex.
وثم بإمكاننا استخدام أداة سطر
الأوامر gcloud،
ننشر تطبيق gcloud، وننتهي.
لدينا خلفية رائعة.
وأقدركما لإعطائي
بعض الوقت كمطور خلفية
للمساعدة بالاشتراك.
شكرًا لك، توماس.
في الواقع، أعاقد أني أتفق معك.
إنه ممكن بالتأكيد، كما يبدو،
لإضافة وظائف جيدة
لتطبيق Firebase
بكتابة بعض برمجة خلفية.
وما أثار إعجابي جدًا
كم كانت البنية التحتية التي
احتجت القيام بها قليلة.
كانت كات بشكل أساسي تكتب
برمجة من طرف الزبون فقط،
كما كان لدينا في بقية التطبيق.
لنلقي نظرة هنا على ما قمنا به.
بدأنا بتوصيل تطبيق محادثتنا
لقاعدة بيانات
الزمن الحقيقي، وبالقيام بذلك،
بإمكاننا تخزين ومزامنة
البيانات بين كل الأجهزة
في الزمن الحقيقي،
خاصًة عندما تأكدنا من أن اللاسلكي
كان يعمل على أحد الآلات.

Indonesian: 
Baris kedua mengatakan
kita menggunakan App Engine Flex.
Lalu kita bisa menggunakan
peranti baris perintah gcloud,
gcloud app deploy, dan selesai.
Kita punya backend yang bagus.
Terima kasih Anda memberi saya waktu
sebagai pengembang backend untuk membantu.
Terima kasih, Thomas.
Saya rasa saya setuju dengan Anda.
Rupanya, jelas mungkin untuk menambah
fungsi bagus ke aplikasi Firebase
dengan menulis kode backend.
Yang paling membuat saya terkesan
adalah betapa sedikit infrastruktur
yang harus dibuat.
Kat hanya menulis kode di sisi klien,
seperti yang ada di seluruh aplikasi.
Mari kita lihat yang sudah kita lakukan.
Kita mulai dengan menghubungkan
aplikasi chat ke Realtime Database.
Dengan begitu, kita bisa menyimpan
dan menyinkronkan data
di antara semua perangkat
secara waktu-nyata,
terutama saat kita memastikan
nirkabel bekerja di salah satu perangkat.

Korean: 
둘째 줄은 App Engine의 유연성을
이용한다는 뜻입니다
그리고 우린 Google 클라우드
명령줄 도구를 사용해서
Google 클라우드 앱을 배포하면 됩니다
우리는 대단한 백엔드를 가졌습니다
그리고 백엔드 개발자로서
발표하는 동안 계속 도와주셔서
감사합니다, 토마스 씨
실제로, 당신 말에 동의해요
백엔드 코드를 입력해서
Firebase 앱에
좋은 기능을 추가하다 보면
분명히 일어날 수 있는 일이에요
제가 정말 인상 깊었던 점은
우리가 가진 인프라가 정말 약했다는 겁니다
캣 씨는 기본적으로
클라이언트 쪽 코드만 개발하는데
그건 이 앱에서 보여드리지 못한
나머지 부분이거든요
그럼 우리가 개발한 걸 정리할까요
실시간 데이터베이스에 채팅 앱을 연결해서
모든 기기의 데이터를 실시간으로
저장하고 동기화할 수 있었습니다
특히 우리 기계 중 하나가
무선 인터넷에 연결될 때요

English: 
That helped a lot.
Then we added the
ability to sign
in with Firebase Authentication
and the newly released Firebase
UI.
And that was great because
then we can also make sure
that you can only
access the database when
you are authorized to
do so, as some of you
may have discovered.
Then we added Firebase
Storage, and we could share
files between our users easily.
Then we were done, and
we uploaded the file
to Firebase Hosting so
that everyone in the world
can access it over our CDN.
And finally, Thomas showed us
that by using Firebase Cloud
Messaging, we can notify users.
In fact, he showed us that by
using Google App Engine Flex
environments, we
can write mostly
code that's the same between
the client side and the server
side.
So instead of putting
our app server
between the user's
app and the database,
we put the app server
behind the database.
And that means
that Firebase takes
care of all the security
and scalability issues

Portuguese: 
Isso ajudou muito.
Depois adicionamos
a opção de fazer login
com o Firebase Authentication
e o recém lançado Firebase UI.
Isso foi ótimo porque depois
podemos nos assegurar
de que só possa acessar o banco de dados
quando for autorizado,
como devem ter descoberto.
Aí adicionamos Firebase Storage,
e podemos compartilhar arquivos
entre nossos usuários facilmente.
Depois terminamos, e enviamos o arquivo
para o Firebase Hosting
para que todo mundo
possa acessar no nosso CDN.
E finalmente, Thomas mostrou
que usando Firebase Cloud Messaging,
podemos notificar os usuários.
Na verdade, ele nos mostrou que usando
o Google App Engine Flex Environments,
podemos escrever códigos que são os mesmos
entre o cliente e o servidor.
Então ao invés de colocar nosso app server
entre o app do usuário e o banco de dados,
colocamos o app server
atrás do banco de dados.
Isso significa que o Firebase
cuida de todos os problemas
de segurança e escalabilidade

Arabic: 
ساعد هذا كثيرًا.
ثم أضفنا القدرة على
تسجيل الدخول بواسطة توثيق Firebase
وواجهة نستخدم Firebase المطلقة حديثًا.
وكان هذا عظيمًا لأنه تمكنا من التأكد
أنه بإمكانك الوصول فقط إلى قاعدة البيانات
عندما تخول بالقيام بذلك،
كما اكتشف بعضكم.
ثم أضفنا تخزين Firebase،
وبإمكاننا مشاركة
الملفات بين مستخدمينا بسهولة.
ثم انتهينا، ورفعنا الملف
لإستضافة Firebase بحيث
الجميع في العالم
بإمكانه الوصول إليها عبر
شبكة توصيل المحتوى خاصتنا.
وأخيرًا، أرانا توماس أنه باستخدام
تراسل Firebase السحابي،
بإمكاننا تنبيه المستخدمين.
في الحقيقة، أرانا أنه باستخدام
بيئة محرك تطبيقات Google Flex،
بإمكاننا غالبًا كتابة
برمجة تفسها بين طرف الزبون
وطرف الخادم.
بدلًا من وضع خادم تطبيقنا
بين تطبيق المستخدم
وقاعدة البيانات،
وضعنا خادم التطبيق خلف قاعدة البيانات.
وهذا يعني أن Firebase
تهتم بأمور الأمان والتطوير

Chinese: 
这真的很有帮助
接着，我们添加了使用Firebase 
身份验证登录的功能
以及最新发布的Firebase 用户界面
真非常的棒，因为我们可以确保
你只有被授权时
才能访问数据库
你们中的一些人可能已经发现了
然后，我们添加了Firebase 储存
这样我们就可以轻松的在用户间分享文件了
我们又将文件上传到Firebase托管
这样全世界的人都可以通过CDN
访问我们的应用
最后，Thomas 向我们展示了
使用Firebase 云信息
我们可以通知用户
事实上，他是通过使用Google 
App Engine Flex环境
来向我们展示的
我们在客户端和服务器端写的代码
基本是一致的
这样就不用把应用服务器
放在用户端应用和数据库之间
我们将应用服务器放在数据库后
也就是说
Firebase会处理所有的安全和扩展性问题

Korean: 
많은 도움이 됐죠
그런 다음 로그인할 때
Firebase 인증 기능과
새로 출시된 Firebase UI도
추가했습니다
그리고 이건 대단한 특성입니다
여러분이 접근 허가를 받았을 때만
데이터베이스에 접근이 가능하단 걸
여러분 중 몇 분은 발견했을 겁니다
우린 Firebase 저장소를 추가해서
사용자 간에 파일을 쉽게 공유할 수 있고
Firebase 호스팅으로 파일을 업로딩해서
전 세계 사람들이 우리 CDN으로
접근할 수 있습니다
마지막으로 토마스 씨가
사용자에게 메시지를 보낼 수 있는
Firebase 클라우드 메시징을
사용하는 걸 보여줬습니다
그가 Google App Engine의
유연한 환경을 사용하는 걸 보여줘서
우린 클라이언트 쪽과 서버 쪽 사이의
코드를 주로 짤 수 있습니다
그래서 우리 앱 서버를
사용자의 앱과
데이터베이스 사이에 두는 대신
데이터베이스 뒤에 앱 서버를 뒀습니다
그리고 그 말은 Firebase가
모든 보안과 확장성 문제를 다뤄서

Spanish: 
Eso ayudó mucho.
Luego añadimos la 
capacidad de registrarnos
con Firebase Authentification
y el nuevo Firebase UI.
Eso estuvo genial porque 
así también podemos asegurarnos
que solo puedes acceder la 
base de datos cuando tienes autorización,
como lo vieron algunos de ustedes.
Luego aumentamos 
Firebase Storage
y pudimos compartir archivos 
entre usuarios de manera fácil.
Terminamos y aumentamos los archivos
a Firebase Hosting
para que todos en el mundo
tenga acceso a nuestro CDN.
Finalmente, Thomas nos enseñó
que usando Firebase 
Cloud Messaging
podemos notificar a los usuario.
De hecho,
nos mostró que usando los ambiente de
Google App Engine Flex , 
podemos escribir código
que es lo mismo del lado 
del cliente y el servidor.
Así que en lugar de poner 
un servidor de la aplicación
entre la aplicación del 
usuario y la base de datos,
ponemos una aplicación de 
servidor tras la base de datos.
Y eso quiere decir que Firebase cuida
de los temas de seguridad y escalabilidad

Japanese: 
それは大いに助かりました
Firebase 認証と新しくリリースされた
Firebase UI で
サインインする機能を付けました
これは良かったです
なぜならデータベースにアクセスできるのは
その権限がある時だけにできたのですからね
皆さんの中にも発見した人がいたでしょう
次に Firebase ストレージを加えて
ユーザー間で簡単にファイル共有ができました
そうして終わると Firebase ホスティングに
ファイルをアップして
CDN で世界の皆が
アクセスできるようにしました
最後に Thomas が
Firebase クラウドメッセージングを使うことで
ユーザーに通知できることを示しました
実は彼は Google App Engine Flex
environments を使うことで
クライアント側とサーバー側間で
大部分同じコードを書けると示しました
だからアプリサーバーを
ユーザーのアプリとデータベースの
間におかないで
アプリサーバーを
データベースの背後に置きました
つまり Firebase が
セキュリティとスケーラビリティを
全て引き受けてくれ

Indonesian: 
Itu sangat membantu.
Lalu kita menambahkan
kemampuan untuk masuk
dengan Firebase Authentication
dan FirebaseUI yang baru dirilis.
Itu bagus karena kita juga bisa memastikan
database hanya bisa diakses orang
yang punya wewenang melakukannya,
seperti yang mungkin
didapati sebagian orang.
Lalu kita tambahkan Firebase Storage,
dan kita bisa berbagi file
antara pengguna dengan mudah.
Lalu selesai, dan kita unggah
file ke Firebase Hosting
agar semua orang bisa
mengaksesnya lewat CDN.
Terakhir, Thomas menunjukkan
dengan gunakan Firebase Cloud Messaging,
kita bisa beri notifikasi pada pengguna.
Bahkan, dia menunjukkan,
dengan environment Google App Engine Flex,
kita bisa menulis mayoritas kode
yang sama antara klien dan server.
Alih-alih meletakkan server aplikasi
antara aplikasi pengguna dan database,
kita meletakkan server aplikasi
di belakang database.
Berarti Firebase mengurus
semua masalah keamanan dan skalabilitas

Portuguese: 
enquanto você foca na escrita
da funcionalidade de negócios
mas no back-end.
Esses foram somente 5
dos recursos Firebase.
Temos mais 10 deles que irão te ajudar
na construção de mais apps,
a aumentar sua base de usuários,
a ter certeza de que seu app
é de boa qualidade
e ganhar dinheiro.
Todos esses APIs são,
como de esperado do Firebase,
totalmente client-side,
e bem simples de usar.
E como pode esperar do Google,
eles são escaláveis.
Então se seu app de chat
for o próximo Snapchat,
Firebase estará lá para te ajudar.
Certo, está na hora de encerrar.
Estamos prester a dar uma pausa, eu acho.
Neste intervalo e depois,
estaremos no salão do Ask Firebase,
então se você tiver alguma pergunta
ou só queira ver como sofremos
com os problemas de rede wireless,
venha nos ver.

Korean: 
여러분은 백엔드를 이용하면서
업무 기능성에 집중하면 된다는 뜻입니다
Firebase의 5가지 특징을 살펴봤는데
10가지 특징이 더 있습니다
이 특징들은 더 많은 앱을 개발하고
사용자기반을 성장시키고
앱의 고품질을 유지하며
수익을 창출하는 데 도움을 줄 겁니다
이 모든 API는 여러분이
Firebase에 기대하는 것처럼
완전히 고객 지향적이고
사용하기 아주 간단합니다
또한 Google에 기대하는 것처럼
API는 규모를 조정합니다
만약 여러분의 채팅 앱이
제2의 스냅챗이 된다면
Firebase가 여러분을 도울 것입니다
좋아요, 이제 마무리 할게요
휴식을 좀 취해야겠죠
휴식 시간이 지나면
'Firebase에 물어보세요' 라운지에
우리 모두 있을 것입니다
그러니 질문이 있거나
우리가 무선 인터넷 문제로
어떻게 고생했는지 보고 싶으시면
방문해 주세요
여러분이 Firebase로 뭘 만들었는지

Arabic: 
بينما تركز على كتابة وظائف العمل
ولكن عندها على الخلفية.
هذه كانت فقط خمسة من ميزات Firebase.
لدينا 10 أخرى ىستساعدك
على بناء تطبيقات أكثر،
توسيع قاعدة مستخدميك، التأكد من أن تطبيقك
ذو جودة عالية، وكسب المال.
كل واجهات برمجة التطبيقات هذه،
كما تتوقع من Firebase،
من جهة الزبون بشكل كامل،
وسهلة الاستخدام.
ولكن كما تتوقع من Google،
إنها قابلة للتطور.
لذا إذا أصبح تطبيق محادثتك
Snapchat التالي،
ستكون Firebase هناك لمساعدتك.
حسنًا، حان وقت الإنهاء.
اقترب وقت الاستراحة، أعتقد.
في هذه الاستراحة وبعدها،
سنكون جميعنا في
ردهة اسأل Firebase،
لذا إذا كان لديك أي سؤال أو فقط تود
أن ترى كم عانينا من مشاكل اللاسلكي،
تعال لترانا.
نود أن نسمع ماذا بنيت
باستخدام Firebase

Japanese: 
皆さんはバックエンドに
機能を書くことに専念できます
これらは Firebase の機能の
５つだけでした
あと１０の機能があって
皆さんのアプリ構築を手伝い
ユーザー基盤を増大させ
高品質のアプリを作り
お金を稼ぐのを手伝います
これらの API すべては 皆さんが
Firebase から期待するように
完全にクライアント側で
使うのがとても簡単です
また Google から期待できるように
それらはスケールします
皆さんのチャットアプリが
次の Snapchat になる場合
Firebase はいつも皆さんを
支援します
はい 終了時間です
もう休憩に入ります
この休憩中でも後でも
私達は Ask Firebase ラウンジにいます
ご質問があったり
ワイヤレスネットワークの問題で
いかに私達が苦しんだか知りたければ
会いに来てください
皆さんが Firebase で何を構築したか

Indonesian: 
selagi Anda bisa fokus
menulis fungsi bisnis.
Tapi di backend.
Itu hanya lima fitur Firebase.
Masih ada 10 lagi yang akan membantu
membuat lebih banyak aplikasi,
mengembangkan basis pengguna,
memastikan aplikasi bermutu tinggi,
dan menghasilkan uang.
Seperti yang diharapkan dari Firebase,
semua API ada di klien
dan sangat mudah digunakan.
Tapi seperti mungkin Anda duga
dari Google, mereka berskala.
Jadi, jika aplikasi chat Anda menjadi
Snapchat berikutnya,
Firebase akan hadir untuk membantu.
Saatnya untuk mengakhiri.
Saya rasa kita akan segera jeda.
Pada jeda ini dan setelahnya,
kita akan berada di Ask Firebase Lounge.
Jika Anda punya pertanyaan
atau hanya ingin melihat
kami mengatasi masalah jaringan nirkabel,
temui kami.
Kami ingin dengar
yang Anda buat dengan Firebase

Chinese: 
而你只需要把注意力放在开发商业功能
然后把它放倒后台托管
那些仅仅是Firebase的五个功能
我们还有十多个功能，来帮助你构建应用
拓展你的用户群
确保你高质量的应用赚钱
这所有的API，都和你所期待的一样
都是全客户端，非常简单易用
你可能也预料到了，规模会不断扩大
如果你的应用成为了下一个Snapchat
Firebase在这里会帮助你
好了，到了结束的时间了
我们马上就可以休息了
休息期间
我们都会到Ask Firebase lounge
如果你有任何的问题
或者只是想看看我们
如何因为无线网络问题遭罪
就来看看我们吧
我们特想知道你用Firebase构建了什么

English: 
while you can focus on
writing business functionality
but then on the backend.
Those were just five of
the Firebase features.
We have 10 more of them that
will help you build more app,
grow your userbase, make
sure that your app is
of a high quality,
and earn money.
All of these APIs are, as you
would expect from Firebase,
fully client-side, and
they're very simple to use.
But as you may also expect
from Google, they scale.
So if your chat app
becomes the next Snapchat,
Firebase will be
there to help you.
OK, it's time to wrap up.
We're about to head
into a break, I think.
Right in this break
and afterwards,
we all will be in the
Ask Firebase lounge,
so if you have any
questions or just want
to see how we suffered through
the wireless network problems,
come see us.
We love to hear what
you built with Firebase

Spanish: 
mientras tú te enfocas 
en escribir la funcionalidad del negocio
en el backend.
Estas solo fueron cinco de 
las características de Firebase.
Tenemos 10 más
que te ayudarán a construir tu aplicación,
crecer tu base de usuarios, 
y asegurarte que tu aplicación
es de alta calidad
y ganar dinero.
Todas estas APIS son, 
como se esperaría de Firebase,
completamente 
direccionadas al cliente
y fáciles de usar.
Pero como también se esperaría de Google,
éstas escalan.
Así que si tu aplicación de chat 
se convierte en el próximo Snapchat,
Firebase estará ahí para ayudarte.
Muy bien,
es hora de terminar esta conferencia.
Estamos apunto de irnos 
a un descanso ... creo.
Durante el descanso y luego,
estaremos en la sala de Ask Firebase,
así que si tienes preguntas
o solo quieres ver cómo sufrimos 
durante los problemas de conectividad,
vísitenos
Nos encanta escuchar sobre 
sus proyectos con Firebase

Chinese: 
或者你想要用它构建什么
没有什么比听到大家关于应用的主意
更让人激动人心的了
谢谢大家

Japanese: 
何を構築しようと思ってるか
お聞きしたいです
皆さんの優れたアプリのアイディアを
聞くことほど楽しいことはありません
ありがとうございました

English: 
or what you think
you're going to build.
There's nothing that
gets us more excited
than hearing your
great app ideas.
Thank you.
[APPLAUSE]
[MUSIC PLAYING]

Portuguese: 
Adoramos saber o que construíram
com o Firebase ou o que irão construir.
Não há nada que nos deixa mais animados
do que ouvir suas ótimas ideias.
Obrigado.
Assista mais vídeos de Firebase.

Spanish: 
o sobre lo que piensan hacer.
No hay nada que nos emocione más
que escuchar sus ideas para la aplicación.
Gracias.

Arabic: 
أو ماتظن أنك ستقوم ببنائه.
لا شيء يسعدنا أكثر
من سماع أفكاركم العظيمة عن التطبيقات.
شكرًا لكم

Indonesian: 
atau yang akan Anda buat.
Tak ada yang membuat kami lebih senang
selain mendengar ide aplikasi hebat.
Terima kasih.

Korean: 
뭘 만들 예정인지 듣고 싶습니다
여러분의 앱과 관련한
좋은 아이디어를 듣는 것만큼
신나는 일은 없기 때문이죠
감사합니다
