Search on the blog

2018年7月21日土曜日

español 29


¿En qué puedo ayudarle?

「いらっしゃいませ」という表現だが、ayudarleとは何なのか?
辞書を引いてもayudar = to help という動詞は見つかるが、ayudarleという動詞はない。

同様に、

En qué puedo servirle?

という表現もある。

どうやら、不定詞、動名詞の場合は、動詞の後に目的語をくっつけてもいいらしい。

たとえば上の例だと、

¿En qué le puedo ayudar?

という風に目的語を動詞の前にもってくることもできるし、

¿En qué puedo ayudarle?

という風に動詞とつなげてもいい。

そもそもスペイン語の目的語を知らなかったので、この機会に覚えておく。
スペイン語の場合は、直接目的語/間接目的語で表現が違うらしい。

直接目的語
me nos
te os
lo/la los/las

間接目的語
me nos
te os
le les

español 28

 Hola a todos. Esta semana hace demasiado calor.

今日は買い物をするときに使える表現の続きを復習した。

市場にて
Quisiera cuatro lonchas de jamón.
ハムを4切れください。
- loncha = slice
- jamón = ham

Póngame un trozo de queso por favor.
チーズをひとつください。
- poner = to put, to give
- trozo = piece
- queso = cheese

Deme medio kilo de queso por favor.
チーズを500gください。
- deme = give me
- medio = half

¿Puedo probarlo?
味見しえてもいいですか?
- probar = to test, to taste

Está riquísimo.
美味しいです!
- riquísimo = delicious

服屋にて
Quiero este bolso.
このバッグが欲しいです。
- bolso = bag

¿Puedo probarme esto, por favor?
これを試着できますか?
- probar = to test, to taste

¿Dónde están los probadores?
試着室はどこですか?
- probadores = fitting room

¿Me queda bien este vestido?
このドレスは私に似合ってますか?
- quedar = to fit, to suit
- vestido = dress

¡Me lo llevo!
買います!
- llevar = to take

Es demasiado caro. ¿Tiene algo más barato?
それは高すぎます。もっとやすい別のものはありますか?
- barato = cheap

両替所にて
Quisiera cambiar dinero.
両替したいです。
- cambiar = to change
- dinero = money

¿Se puede cambiar dinero aquí?
ここで両替できますか?

¿Cuánto quiere cambiar?
いくら両替したいですか?

Quisiera cambiar cien dólares.
100ドル両替したいです。

¿Puedo sacar dinero con mi tarjeta de crédito?
クレジットカードでお金を引き出せますか?
- sacar = to take out, to remove

Necesita firmar aquí.
ここにサインしてください。
- necesitar = to need
- firmar = to sign



2018年6月30日土曜日

español 27

スペイン語の所有形容詞(adjetivo posesivo)について勉強した。

代名詞
まずは代名詞の復習から。
yo nosotros/nosotras
vosotros/vosotras
él/ella/usted ellos/ellas/ustedes

所有形容詞
mi nuestro/nuestra
tu vuestro/vuestra
su su

注意点
  • 所有されるものが複数の場合は、所有形容詞の後にも"s"がつく。
  • 所有されるものが女性名詞の場合は、nuestro -> nuestra, vuestro -> vuestraとなる。
例文

Mi casa es tu casa. 僕の家は、君の家だよ。(気楽にくつろいでね)

Ellos son mis amigos. 彼らは私の友達だ。

¿Este es tu libro? これは君の本ですか?

Nuestra casa es muy grande. 私たちの家はとても大きい。

Escriba su nombre aquí, por favor. あなたのお名前をこちらにご記入ください。


español 26

Hola. Buenas tardes.

買い物をするときに使う表現を勉強したのでメモしておく。

Bienvenido a nuestra tienda.
ようそこ、私たちの店へ。
- bienvenido = welcome
- nuestra = our
- tienda = store

¿En qué puedo ayudarle?
いらっしゃいませ。(何かお手伝いしましょうか)
- ayudar = to help
- le = you (formal)

Sólo estoy mirando.
見ているだけです。
- sólo = just
- mirar = to look at

¿Lo quiere?
それを欲しいですか?
- lo = it

Me lo llevo. ¿Cuanto cuesta?
それを買います。いくらですか?
- llevar = to take

No estoy seguro. Volveré más tarde.
まだわかりません。あとでまた来ます。
- seguro = sure
- volver = return
- más tarde = later (more late)

¿Puedo pagar con tarjeta de crédito?
クレジットカードで支払いできますか?
- pagar = to pay
- tarjeta = card
- crédit = credit

¿Puedo ver su pasaporte?
パスポートを拝見できますか?
- ver = to see
- su = your (formal)
- pasaporte = passport

Aquí tiene.
はい、どうぞ。
aquí = here

¿Me puede dar un recibo?
レシートをください。
- dar = to give
- recibo = receipt

¿Me puede dar una bolsa?
袋をください。
- bolsa = bag


2018年6月23日土曜日

español 25

¡Hola a todos! ¿Como están?
Hoy voy a aprender la pronunciación de "R" y "RR".


RとRR
アルファベットの読み方は"アール" ではなく、"エレ" というらしい。
Rは "エレ"、RRを "ダブルエレ" という。

Rの発音
Rの発音は2種類ある。
  • soft sound: 英語の "d" に近い音
  • strong sound: ヘリコプターの振動音
語頭の "r" および、"l", "n", "s" の後に続く "r" はstrong soundになる。

roca  岩
rico  金持ち
alrededor  まわり 
sonrisa  笑顔 
israel  イスラエル

それ以外の "r" はsoft soundになる。
aire  風
verde  緑
tres  3
habla話す

RRの発音
Rのstrong soundと同じでヘリコプターの振動音っぽい音になる。

arroz  米
carro  車
correr  走る
horror  ホラー

日本語との比較
RRの発音を「巻き舌」のRと言うことがあるが、実際の違いは舌を巻いてるかいないかではなく、何回上下に動かしたの違いなので、single tap "r"、multi tap "r" という表現の方がいいらしい。

日本語の "r" は single tap "r" に近いらしい。

"water" はカタカナで"ウォーター"というより"ワラ"と発音すると方が通じるという話があるが、英語の母音の間のtはsingle tap "r"っぽいし、日本語の"r"もsingle tap "r"っぽいので、確かにその方が近く感じるのかもしれない。

2018年6月17日日曜日

español 24

 最近billboardのランキングを見ていると、スペイン語の曲が結構あることに気づいた。

ということで、

たまにはスペイン語の曲の歌詞からスペイン語の勉強をするのもいいだろうということで、 Becky G, Natti Natasha の 「Sin Pijama」 という曲の歌詞を見てみた。


まずは歌い出し。

Solo, sólito en la habitación.
Lonely, lonely in the room.

habitaciónはホテルの予約の仕方を勉強したときに出て来たので分かった。
sólitoも英語のsolitudeに似てるので、なんとなく寂しいという意味だろうと分かる。女性が歌っているけど、sólita ではなく sólito なので男性目線のフレーズだと分かる。

一気に飛んでサビ。

Si tú me llama'
Nos vamo' pa' tu casa
Nos quedamo' en la cama
Sin pijama, sin pijama

If you call me
We'll go to your house
We'll stay in bed
Without pajamas, without pajamas

省略形が多用されていて一瞬「??」となるが、省略しない形で書くと、

Si tú me llamas
Nos vamos para tu casa
Nos quedamos en la cama
Sin pijama, sin pijama

となる。

初めて見た単語は quedar = (to stay) だけだった。
これはar動詞で、念のため活用形を復習しておくと、

quedo quedamos
quedas quedáis
queda quedan

のようになる。

どうでもいいけど、Becky Gの前歯の隙間がいつの間にか埋まっていて、ちょっと残念。昔はこんな感じだった。

2018年6月16日土曜日

発音がしっくり来ない英語

上手く発音できないな〜と思った英単語や英語表現をリスト化したやつ。
なぜうまく発音できてないと感じたのか、どうしたら自分なりにしっくりくる発音ができるのかをメモしておく。

automatically
母音に挟まれたtをdっぽくしたり、iのところをəっぽくしたりしてみたが、どうもしっくりこない。
発音記号を見るとどこがしっくり来ていないか分かった。

[ɔːtəˈmætɪkli]

オートマティカリーではなく、オートマティクリーのように発音すると発音しやすくなった。

mathematically、typicallyも同じように、カリーではなくクリーと発音するらしい。

transferred to 
トランスファードトゥのように発音するのはかなり不自然な感じがしていた。ネイティブの人は音を同化させて、トランスファートゥのように発音してるっぽい。

そういえばこのパターンは学校でも習っていて、used to = ユーストゥ、supposed to = サポーストゥと発音するな〜と思い出した。

probabilistic
プロバビリスティックではなくプロババリスティック。
以下のようにschwaを意識するとよい。

[prɑːbəbəˈlɪstɪk]

はっきりと「ビ」と発音すると口元がもたついて、真ん中の音節にかける時間が長くなってしまってスムーズに発音できていなかったのではと考えられる。

ちなみに、probabilityの場合はアクセントがのっているので、バビと「i」をしっかり発音する。

generalization
ジェネラリゼーションではなく、ゼネララゼーション。

[dʒenərələˈzeɪʃən]

schwaを意識する。

category
アクセントがどこにあるか分かってなかった。アクセントは第一音節にある。

[ˈkæt̬.ə.ɡri]

アクセントのある第一音節の母音は æ で、アクセントのない第二音節の母音は ə になる。よって、カタカナで書くと「カテゴリ」ではなく、「ケタゴリ」の方が近い音になる。

necessarily
ネセサリリーと発音していると舌がもたついてしまう。
スムーズに発音するためには、母音をschwaにする必要がある。

[ˈnesəsərəli]

最初の音節はアクセントがくるので、「エ」だが、残りは「ア」と「ウ」の間っぽい感じ。
カタカナで書くと、「ネセサリリー」ではなく「ネススルリ」。

area
エリアと発音すると何かが足りてないような感覚があった。

[ˈeəriə]

なので、「エアリア」のようにに「ə」の音を入れないといけない。

imperative
「インペアレイティブ」と思ってたけど、「インペアラティブ」。
アクセントの位置が分かって無かった。

[imˈperətiv]



2018年6月11日月曜日

español 23

¡Hola a todos!

今日はホテルで使える表現を勉強した。

予約・チェックインするとき

Tengo una reserva.
予約してます。

No tengo reserva.
予約していません。

Quiero una habitación individual, por favor.
シングルルームを1室お願いします。
- quiero(querer) = to want, to love

Quisiera una habitación doble con cama de matrimonio.
ダブルルームを1室お願いします。
- quisiera = I would like
- con = with
- cama = bed
- matrimonio = marriage

¿Tiene una habitación doble con dos camas?
ツインルームはありますか?

?Para cuántas noches?
何泊ですか?
- para = for
- cuánto = how much

Para dos noches.
2泊です。

Para una semana.
1週間です。
- semana = week

¿Cuánto cuesta por noche?
1泊いくらですか?
- cuesta(costar) = cost
- por = by, because of

¿Cuánto cuesta por persona?
1人いくらですか?

トラブル対応

Hay un problema con la habitación.
部屋に問題があります。
- hay(haber) = to have, to be

La habitación es demasiado pequeña / ruidosa / cara.
部屋が小さ/うるさ/高すぎます。
- demasiado = too
- pequeño = small
- ruidoso = noisy
- caro = expensive

La habitación está sucia.
部屋が汚いです。
- sucio = dirty

Hace demasiado frío/calor en la habitación.
部屋が寒/暑すぎます。

La ducha/La televisión/El aire acondicionado no funciona.
シャワー/テレビ/エアコンが動作しません。
- ducha = shower
- televisión = television
- aire acondicionado = air conditioning
- funciona (funcionar) = to work

No puedo abrir la ventana.
窓を開けられません。
- abrir = open
- ventana = window

No puedo encender la luz.
電気をつけることができません。
- encender = to turn on
- luz = light

No puedo acceder a Internet.
インターネットに接続できません。
- acceder = to access

No hay toallas/jabón/papel higiénico/agua caliente.
タオル/石鹸/トイレットペーパー/お湯がありません。
- toalla = towel
- jabón = soap
- papel higiénico = toilet paper
- caliente = hot

El baño huele mal.
トイレ(浴室)が匂います。
- baño = bath, bathroom
- huele (oler) = to smell
- mal = bad

ホテルで質問する

Se puede alquilar una toalla?
タオル借りれますか?
- alquilar = to rent

¿Donde está el supermercado?
スーパーマーケットはどこにありますか?
- supermercado = supermarket

¿Donde está los servicios?
トイレはどこにありますか?
servicio = service, rest room

¿Dónde se puede comprar leche?
牛乳はどこで買えますか?
- comprar = to buy

Muchas gracias.
Hasta luego.

2018年6月2日土曜日

español 22

Hola, buenas tardes. ¿Como estas?


今日は、天気に関する表現を勉強した。

¿Qué tiempo hace hoy?
今日の天気はどうですか?
- tiempo = weather
- hacer = to do
- hoy = today

Hace sol.
晴れです。
- sol = sun

Hace viento.
風が強いです。
- viento = windy

Hoy hace calor.
今日は暑いです。
- calor = heat

Hoy hace mal tiempo y llueve.
天気は悪く、雨が降ります。
- mal = bad
- llover = to rain

Nieva.
雪が降っています。
nevar = to snow

¿Qué tiempo va a hacer mañana?
明日の天気はどうなりますか?
- ir = to go
- a = to

Mañana va a hacer frío.
明日は寒いです。
- frío = cold

Hoy hace buen tiempo, pero mañana va a nevar.
- buen = good
今日は天気が良いですが、明日は雪が降るでしょう。

2018年5月13日日曜日

español 21

Hola. ¿cómo estás?

esta, este, estoなどの違いがよくわからなかったのでまとめてみた。

Thisに対応するもの
esto = これ
este = この(男性名詞につける)
esta = この(女性名詞につける)
estos = esto, esteの複数形
estas = estaの複数形

Thatに対応するもの
eso = あれ
ese = あの(男性名詞につける)
esa = あの(女性名詞につける)
esos = eso, eseの複数形
esas = esaの複数形

例文
Esto es tu regalo de cumpleaños.
これはあなたの誕生日プレゼントです。
- regalo = present 
- cumpleaños = birthday

Este libro es mía.
この本は私のものです。
- libro = book
- mía = mine

Me encanta esta canción.
私はこの歌がすきです。
- encanta (encantar) = love
- canción = song

¿Puedes ver esa pequeña casa?
あの小さな家が見えますか?
- puedes (ponder) = to be able to
- pequeño = small
- ver = to see

Yo soy una de esas personas.
私はあの人たちの一員です。

¡Quiero eso!
あれが欲しい!
- quiero(querer) = want

español 20

¡Hola, buenas noches!

今日は前回の続きでレストランで使える表現を勉強した。

Soy vegetariano.
私はベジタリアンです。

No como carne.
肉は食べません。

No como marisco.
シーフードは食べません。

Soy alérgico a los productos lácteos.
私は、乳製品アレルギーです。

Esto está demasiado frío.
これは冷たすぎます。
- esto = this
- está (conjugated form of "estar")  = is
- demasiado = too
- frío = cold

Esto está demasiado caliente.
これは熱すぎます。
- caliente = hot

Esto está quemado.
これは焦げています。
- quemado = burnt

Esto está demasiado picante. Nos trae más agua, por favor.
これは辛すぎます。水をもってきてください。
- picante = spicy

Esto está buenísimo.
これはとても美味しいです。
- buenísimo = really good

¿Quieres más?
もっと欲しいですか?

No gracias. Estoy satisfecho.
結構です。満腹です。
- satisfecho = satisfied, full


2018年4月28日土曜日

español 19

¡Hola, amigo!
Me llamo Kenji. Estoy aprendiendo español.

今日は、mi amigaとレストランに行くことを想像しつつ、レストランでの会話の練習をした。

Tengo hambre.
お腹すいたよ。
- tengo = (I) have

Tengo sed. ¿Tienes algo de tomar?
喉が乾いた。何か飲み物もってる?
- algo = something
- tomar = drink

¿Tiene una mesa para dos?
二人ですが、テーブル空いてますか?
- mesa = table

¿Fumadores o no fumadores?
喫煙席ですか?禁煙席ですか?
- o = or

Lo siento. Hemos cerrado.
ごめんなさい。閉店しています。
- hemos = (we) have
- cerrado = closed

Estamos llenos. Hay que esperar.
満席です。待たないといけません。
- llenos = full
- hay que = one must
- esperar = wait

¿Cuánto hay que esperar?
どれくらい待たないといけませんか?
- cuánto = how long

¿Tiene un menú en inglés?
英語のメニューはありますか?

Quiero esto.
これください。
- quiero = (I) want
- esto = this

¿Qué me recomienda?
何がオススメですか?
- qué = what

¿Que están comiendo ellos?
彼らは何を食べているのですか?

¿Qué lleva este plato?
この料理には何が入っていますか?
- lleva = (it) carries
- este = this
- plato = dish


2018年4月21日土曜日

A Survey on Real Time Bidding Advertising

元ネタ
A Survey on Real Time Bidding Advertising

気付き
- DSPはSSPから広告枠を買い付けていると思っていたが、厳密にはAd Exchangeから買っているらしい。SSPと思っていたサービスのサイトをよく見ると、確かにAd Exchangeと書いていた。

- 広告主からマージンをもらって儲けるOpen DSPと、自社の様々な事業の広告を配信して事業の売り上げ増加を目指すNative DSPでは戦略が違うので、その辺りを意識してサーベイする必要がある。

メモ
RTB広告の成長
- 2017年にはディスプレイ広告予算の29%を占める見込み
- 昔: プレミアムな在庫はオフラインで、残りはRTBで
- 最近: プレミアムな在庫もRTBで

DSPでは効率的な入札アルゴリズムが重要
- 最適な広告を選択する
- 最適な入札額を決める

DSPが目指すパフォーマンスの最大化
- インプレッション数
- クリック数
- コンバージョン数

DSPの時間制約
- 10〜100 milli sec
- 入札戦略を最適化するオフラインコンポーネント
- 前もって最適化された戦略を実行するオンラインコンポーネント

予算配分
- 複数の媒体
- DSP業者
- キャンペーン

オークション方式
- Vickery (セカンドプライス)
- OSP (オプショナルセカンドプライス)

フリークエンシーキャップの最適化
- RTBでは個々のクッキーに対してフリークエンシーを制御できる
- 広告主の予算の浪費を抑える

2018年4月19日木曜日

Apache Beam: 正常データ、異常データを別々に処理

 Beam 1.xのときは、side outputを使って異常系のデータをDLQに別途出力するということができた。Beam 2.xになってからside outputがなくなっていたので、どうやるかを試してみた。以下のようにPTransformの中でタグをつけて出力すれば良さそう。

 今回はDLQとしてキューじゃないけどGCSを使ってみた。UnboundedなデータをBoundedな場所に格納することになるのでややこしそうだけど、windowを使えば簡単に実現できる。

サンプルコード

package com.kenjih.sample.side_output;

import org.apache.beam.runners.dataflow.options.DataflowPipelineOptions;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.TextIO;
import org.apache.beam.sdk.io.gcp.pubsub.PubsubIO;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.transforms.windowing.FixedWindows;
import org.apache.beam.sdk.transforms.windowing.Window;
import org.apache.beam.sdk.values.PCollection;
import org.apache.beam.sdk.values.PCollectionTuple;
import org.apache.beam.sdk.values.TupleTag;
import org.apache.beam.sdk.values.TupleTagList;
import org.joda.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * GCS-based Dead letter queue example
 *
 * @see <a href="https://stackoverflow.com/questions/45173668/gcp-dataflow-2-0-pubsub-to-gcs/45256314#45256314">GCP Dataflow 2.0 PubSub to GCS</a>
 * @see <a href="https://cloud.google.com/blog/big-data/2016/01/handling-invalid-inputs-in-dataflow">Handling Invalid Inputs in Dataflow</a>
 */
public class Main {

  private static final Logger LOG = LoggerFactory.getLogger(Main.class);

  private static class ParseToIntDoFn extends DoFn<String, String> {

    private final TupleTag<String> successTag;
    private final TupleTag<String> invalidTag;

    public ParseToIntDoFn(TupleTag<String> successTag, TupleTag<String> invalidTag) {
      this.successTag = successTag;
      this.invalidTag = invalidTag;
    }

    @ProcessElement
    public void processElement(ProcessContext c) {
      String s = c.element();
      try {
        Integer i = Integer.parseInt(s);
        c.output(successTag, i.toString());
      } catch (Exception e) {
        LOG.error("cannot convert {} to an integer", s);
        c.output(invalidTag, s);
      }
    }
  }

  private static String createTopicPath(String projectId, String topicName) {
    return String.format("projects/%s/topics/%s", projectId, topicName);
  }

  public static void main(String[] args) {
    LOG.info("begin the application");

    DataflowPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
        .as(DataflowPipelineOptions.class);
    options.setStreaming(true);

    Pipeline pipeline = Pipeline.create(options);
    String projectId = options.getProject();

    final TupleTag<String> successTag = new TupleTag<String>() {};
    final TupleTag<String> invalidTag = new TupleTag<String>() {};

    PCollection<String> input =
        pipeline.apply("read",
            PubsubIO.readStrings().fromTopic(createTopicPath(projectId, "kh-test-in-1")));

    PCollectionTuple outputTuple =
        input.apply("parse", ParDo.of(new ParseToIntDoFn(successTag, invalidTag))
            .withOutputTags(successTag, TupleTagList.of(invalidTag)));

    // write successful data to PubSub
    PCollection<String> success = outputTuple.get(successTag);
    success
        .apply("success-write", PubsubIO.writeStrings()
            .to(createTopicPath(projectId, "kh-test-out-1")));

    // write invalid data to GCS
    PCollection<String> invalid = outputTuple.get(invalidTag);
    invalid
        .apply("windowing", Window.into(FixedWindows.of(Duration.standardMinutes(1))))
        .apply("invalid-write", TextIO.write()
            .to("gs://kh-test/dead-letter/")
            .withNumShards(3)
            .withWindowedWrites());

    pipeline.run();

    LOG.info("end the application");
  }


}

Dataflow Runnerでの実行した結果

2018年4月18日水曜日

español 18

¡Hola a todos!


今日はバールに行って注文する表現を勉強しました。
よく使いそうな単語には個別でメモをつけるようにしました。

Qué van a tomar?
注文は何にしましょうか?
  - qué = what
  - van (3rd person plural of "ir") = go
  - a = to
  - tomar = to take, to drink

Un café con leche, por favor.
ミルクコーヒーをください。

Para mí un té con limón y para mi amigo una limonada.
私はレモンティーで、友達にはレモネードをください。
  - para = for
  - con = with

Quiero un vino tinto (blanco).
赤(白)ワインが欲しいです。
 - quiero (1st person singular of "querer") = want, love

Otro zumo de naranja, por favor.
オレンジジュースをもう一つください。
  - otro = another

Otra Coca Cola, por favor.
コカコーラをもう一つください。
  - otra = otroの女性形

¿Se puede comer aqui?
ここで食べれますか?
  - puede (3rd person singular of "poder") = can

Nos (Me) trae la carta, por favor.
私たちに(私に)メニューを持ってきてください。

Quieren algo más?
他にも注文はありますか?
  - algo = something
  - más = more 

Nos trae más agua con (sin) gas, por favor.
炭酸の入っている(いない)水をもっとください。
  - con = with
  - sin = without

Nos trae la cuenta, por favor.
お会計お願いします。

Gracias y hasta pronto.

2018年4月17日火曜日

Apache Beam: 複数のパイプラインをあげる

 Apache Beamで構築するグラフはDAGじゃないといけないという縛りがありますが、DAGであれば連結なグラフじゃなくてもいいらしいです。(これに気づかなくて数ヶ月悩んでました。)
 
 実際にそのようなサンプルを書いて動作確認してみました。

package com.kenjih.multiple_pipe_line;

import org.apache.beam.runners.dataflow.options.DataflowPipelineOptions;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.gcp.pubsub.PubsubIO;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {

  private static final Logger LOG = LoggerFactory.getLogger(Main.class);

  private static class AddPrefixDoFn extends DoFn<String, String> {

    private final String prefix;

    private AddPrefixDoFn(String prefix) {
      this.prefix = prefix;
    }

    @ProcessElement
    public void processElement(ProcessContext context) {
      String element = context.element();
      context.output(prefix + element);
    }
  }

  private String createTopicPath(String projectId, String topicName) {
    return String.format("projects/%s/topics/%s",
        projectId,
        topicName);
  }

  public void run(DataflowPipelineOptions options) {
    Pipeline pipeline = Pipeline.create(options);
    String projectId = options.getProject();

    // a data pipeline
    pipeline
        .apply("read-1",
            PubsubIO.readStrings().fromTopic(createTopicPath(projectId, "kh-test-in-1")))
        .apply("transform-1",
            ParDo.of(new AddPrefixDoFn("transform-1: ")))
        .apply("write-1",
            PubsubIO.writeStrings().to(createTopicPath(projectId, "kh-test-out-1")));

    // another data pipeline
    pipeline
        .apply("read-2",
            PubsubIO.readStrings().fromTopic(createTopicPath(projectId, "kh-test-in-2")))
        .apply("transform-2",
            ParDo.of(new AddPrefixDoFn("transform-2: ")))
        .apply("write-2",
            PubsubIO.writeStrings().to(createTopicPath(projectId, "kh-test-out-2")));

    // yet another data pipeline
    pipeline
        .apply("read-3",
            PubsubIO.readStrings().fromTopic(createTopicPath(projectId, "kh-test-in-3")))
        .apply("transform-3",
            ParDo.of(new AddPrefixDoFn("transform-3: ")))
        .apply("write-3",
            PubsubIO.writeStrings().to(createTopicPath(projectId, "kh-test-out-3")));

    pipeline.run();
  }

  public static void main(String[] args) {
    LOG.info("begin the application");

    DataflowPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
        .as(DataflowPipelineOptions.class);
    options.setStreaming(true);

    new Main().run(options);

    LOG.info("end the application");
  }

}

GCPのコンソール画面で見ると以下のようになっています。
BigQueryIOのDynamicDestinationsのようなものがPubSubIOにはなくて困っていましたが、上のように独立したパイプラインを作ることができるので、それを応用することでDynamicDestinations的なことができそうです(パイプライン生成時に静的に決めないといけないのでDynamicとは違いますが、複数の可変的な汎用パイプラインをうまく扱えそうという意味です)。

2018年4月13日金曜日

español 17

Hola a todos.
Me llamo Kenji. So de Japón.
Estoy aprendiendo español.


今日は場所に関する表現を勉強した。
これでスペイン語圏に旅行に行っても迷子になることはないはずだ。

Dónde está el museo?
博物館はどこですか?

¿Por favor, dónde está el baño?
すみません。トイレはどこですか?

Siga todo recto.
まっすぐ行ってください。

Doble a la derecha.
右に曲がってください。

Doble a la izquierda.
左に曲がってください。

¿Hay un restaurante por aquí?
近くにレストランはありますか?

Mi casa está cerca del mercado.
私の家は市場の近くにあります。

El hotel está lejos del aeropuerto.
ホテルは空港から遠いです。

El banco está frente a la cafetería.
銀行はカフェテリアの前にあります。

El bar está al lado de la farmacia.
バーは薬局の隣にあります。

Adiós y gracias.

2018年4月12日木曜日

español 16

¡Hola, buenas noches!

今日は、曜日、月、季節の単語を勉強した。

曜日
月曜日: lunes
火曜日: martes
水曜日: miércoles
木曜日: jueves
金曜日: viernes
土曜日: sábado
日曜日: domingo

Hoy es lunes. 今日は月曜日です。


1月: enero
2月: febrero
3月: marzo
4月: abril
5月: mayo
6月: junio
7月: julio
8月: agosto
9月: septiembre
10月: octubre
11月: noviembre
12月: diciembre

Mi cumpleaños es el doce de abril. 私の誕生日は4/12です。

季節
春: primavera
夏: verano
秋: otoño
冬: invierno

La primavera empieza en marzo. 春は3月から始まる。

2018年4月7日土曜日

GCP上に無料でプロキシーサーバを立てる

 GCPの無料枠が余っていたので、プロキシーサーバを立てて遊んでみた。

1. VMインスタンスを作る
- VMの名前はsquidとしておく
- ゾーンはus-east1-bにしておく

2. 作成したVMにログイン
- gcloud compute ssh squid --zone=us-east1-b

3. squidをインストール
- sudo yum install -y squid

4. 設定ファイルを変更
- sudo diff -u /etc/squid/squid.conf.default /etc/squid/squid.conf

--- /etc/squid/squid.conf.default
+++ /etc/squid/squid.conf
@@ -10,6 +10,7 @@
 acl localnet src fc00::/7       # RFC 4193 local private network range
 acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
+acl myhome src xxx.xxx.xxx.xxx  # my home IP

 acl SSL_ports port 443
 acl Safe_ports port 80  # http
@@ -51,6 +52,7 @@
 # from where browsing should be allowed
 http_access allow localnet
 http_access allow localhost
+http_access allow myhome

 # And finally deny all other access to this proxy
 http_access deny all
@@ -71,3 +73,14 @@
 refresh_pattern ^gopher: 1440 0% 1440
 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
 refresh_pattern .  0 20% 4320
+
+# prevent squid from being detected
+forwarded_for off
+request_header_access Referer deny all
+request_header_access X-Forwarded-For deny all
+request_header_access Via deny all
+request_header_access Cache-Control deny all
+
+# hostname
+visible_hostname squid
+

5. squidを起動
- sudo systemctl start squid

6. firewallの設定
- tcp:3128を開けておく

7. ブラウザ(chrome on Mac)の設定
- 設定 >詳細設定 >プロキシ設定を開く >Webプロキシ(HTTP)
- squidサーバのパブリックIP、ポート(3128)を入力

8. アクセス確認
- ブラウザから適当なサイトにアクセス
- squidのログ確認
- sudo tail -f /var/log/squid/access.log


español 15

¡Hola a todos!


今日はスペイン語の動詞の活用について勉強しました。
スペイン語の動詞は以下の3種類があります。

- ar動詞
- er動詞
- ir動詞

それぞれの動詞で活用形が異なります。

ar動詞
arで終わる動詞です。

hablar(話す)を例に活用形をみてみます。

hablo hablamos
hablas habláis
habla hablan

例文
Yo hablo español.
hablas español.
El habla español.
Nosotros hablamos español.
Vosotros habláis español.
Ellos hablan español.

er動詞
erで終わる動詞です。

comer(食べる)を例に活用形をみてみます。

como comemos
comes coméis
come comen

例文
Yo como.
Tú comes.
Él come.
Nosotros comemos.
Vosotros coméis.
Ellos comen.

ir動詞
irで終わる動詞です。

vivir(住む)を例に活用形をみてみます。

vivo vivimos
vives vivís
vive viven

例文
Yo vivo en Japón.
Tú vives en Japón.
Él vive en Japón.
Nosotros vivimos en Japón.
Vosotros vivís en Japón.
Ellos viven en Japón.

規則的な動詞の活用パターンはそれほど複雑ではないですね。

¡Muchas gracias y hasta luego!

español 14

¡Hola, buenos días!

スペイン語では英語のbe動詞に対応するものが2つあります。
今日はその使い分けについて勉強しました。

Ser
Serの活用形
soy somos
eres soís
es son

Serを使う場面
- 永続的なことについて話すとき
- 職業について話すとき
- 出生地/国籍について話すとき
- 特性について話すとき

Serの例文
- El es abocado. (彼は弁護士です)
- Yo soy de japon. (私は日本出身です)
- ¡Eres alto! (君は背が高いね!)

Estar
Estarの活用形
estoy estamos
estás estáis
está están

Estarを使う場面
- 一時的なことについて話すとき
- 場所について話すとき(※ 永続的な場所について話すときもEstarを使うことに注意)

Estarの例文
- Ella está triste. (彼女は悲しい)
- ¿Estás lista? (準備はいい?)
- Tokio está en Japón. (東京は日本の中にある)


2018年4月5日木曜日

español 13

¡Hola a todos!
Yo soy Kenji. 
Estoy aprendiendo español y me gusta aprender español.

今日は、9999までの数え方を勉強した。
1-99までの数え方を知っていれば、規則性があるので青字のところだけ覚えればOK。
1-99までの数え方はこちらを参照。

999までの数え方

100: ciento
200: doscientos
300: trescientos
400: cuatrocientos 
500: quinientos
600: seiscientos
700: setecientos
800: ochocientos
900: novecientos

十の位以下はそのままつなげて読むだけでOK。

101 ciento uno
125: ciento veinticinco
555: quinientos cincuenta y cinco

9999までの数え方

1000: mil
2000: dos mil
3000: tres mil
4000: cuatro mil
5000: cinco mil
6000: seis mil
7000: siete mil
8000: ocho mil
9000: nueve mil

百の位以下はそのままつなげて読むだけでOK。

9999: nueve mil novecientos noventa y nueve

2018年3月30日金曜日

español 12

¡Hola a todos!
Me llamo Kenji.
Soy de Japón. Me gusta comer y me gusta aprender español.



今日はスペイン語でコミュニケーションをとるときに使える便利なフレーズを勉強した。

¿Hablas español?
スペイン語は話せますか?

¿Hablas inglés?
英語は話せますか?

Hablo un poco de español.
私は少しだけスペイン語を話せます。

¿Entiendes Ingrés?
英語は分かりますか?

Lo siento, no entiendo.
ごめんなさい、分かりません。

Estoy aprendiendo español.
私はスペイン語を勉強中です。

¿Puedes hablar más despacio por favor?
もう少しゆっくり話してくれますか?

¿Puedes repetir por favor?
もう一度言ってもらえますか?

¿Cómo se escribe?
それはどのように書くのですか?

¿Cómo se dice en español?
それはスペイン語で何というのですか?

これだけ覚えておけば、スペイン語圏の国に旅行に行っても何とかなりそうだ。

Muchas gracias y hasta pronto.

2018年3月21日水曜日

español 11

¡Hola! Me llamo Kenji.
Yo soy ingeniero. Me gusta mi trabajo.

今日は「〜が好き」というスペイン語の表現を勉強しました。

”もの”が好き
el/laをつけるのを忘れないようにする。

¿Te gusta la música?
音楽は好きかい?
Si, me gusta la música.
はい、私は音楽が好きです。

¿Te gusta la literatura?
文学は好きかい?
No, no me gusta la literatura.
いいえ、文学は好きではありません。

¿Te gusta el cine?
映画は好きかい?
Si, me gusta mucho el cine.
はい私は映画がとても好きです。

”〜すること”が好き
不定詞を使えばOK。

Me gusta cantar. 
私は歌うのが好きです。

Me gusta comer.
私は食べるのが好きです。

Me gusta salir.
私は外出するのが好きです。

”相手の○○”が好き
どこの国でもとりあえず相手を褒めとけばいいはず。

Me gusta tu cara.
あなたの顔が好きです。

Me gusta tu voz.
あなたの声が好きです。

Me gusta tu ropa.
あなたの服が好きです。

Gracias y hasta luego.

2018年3月14日水曜日

español 10

Hola a todos, me llamo kenji.

今日は仕事に関する表現を勉強した。

仕事は何をしているか聞く
¿En qué trabajas?
仕事は何してるの?

¿En qué trabaja usted?
お仕事は何をされているのですか?

「私は〜です」と答える
Soy profesor/profesora.
私は教師です。

Soy estudiante.
私は学生です。

Soy abogado/abogada.
私は弁護士です。

Soy ingeniero/ingeniera.
私はエンジニアです。

「〜で働いています」と答える
Trabajo en una tienda.
私はお店で働いています。

Trabajo en una fábrica.
私は工場で働いています。

Trabajo en una oficina.
私はオフィスで働いています。

Trabajo en un hospital.
私は病院で働いています。

働いていない場合
No trabajo.
私は働いていません。

Estoy jubilado/jubilada.
私は退職しました。

¡Muchas gracias y hasta pronto!

2018年3月11日日曜日

español 9

¡Hola, me llamo Kenji! Yo soi de Japon.

1から99までの数え方を勉強した。


お姉さんによると、4つのパートに分けて覚えるのがいいらしい。
¡Muchas gracias señorita!

まずは1-10までを覚える。
1: uno
2: dos
3: tres
4: cuatro
5: cinco
6: seis
7: siete
8: ocho
9: nueve
10: diez

次に11-20までを覚える。
16-19はdieciのあとに一の位の値を加えただけなので覚えやすい。

11: once
12: doce
13: trece
14: catorce
15: quince
16: dieciséis
17: diecisiete
18: dieciocho
19: diecinueve
20: veinte

21-29まではパターン化されているので簡単。
veinti + 一の位の値となっている。

21: veintiuno
22: veintidós
23: veintitrés
24: veinticuatro
25: veinticinco
26: veintiséis
27: veintisiete
28: veintiocho
29: veintinueve

最後に30-99。
31の場合は treinta y uno (30と1)、45の場合は cuarenta y cinco (40と5)のように表現する。

よって一の位が0のときの表現を覚えてしまえばよい。

30: treinta
40: cuarenta
50: cincuenta
60: sesenta
70: setenta
80: ochenta
90: noventa

Adiós. Hasta mañana.

2018年3月9日金曜日

español 8

Hola, Buenas noches.

今日は、兄弟、子供が何人いるかを伝える表現を勉強しました。

Tengo un hermano.
私には兄弟が一人います。

Tengo una hermana.
私には姉妹が一人います。

Tengo una mujer.  Se llama Camila.
私には妻がいます。彼女の名前はカミラです。

tengoはtenerという動詞の一人称単数現在形です。
un/unaは不定冠詞で、それぞれ男性名詞/女性名詞に対して使われます。

兄弟、子供が2人以上いるときは数 + 名詞の複数形を使います。

Tengo dos hijas.
私には2人の娘がいます。

Tengo tres hijos.
私には3人の息子がいます。

Muchas gracias.
Hasta pronto.

2018年3月8日木曜日

español 7

今日は人称代名詞について勉強した。

単数 複数
一人称 yo nosotros / nosotras
二人称 tú / usted ustedes
三人称 él / ella ellos / ellas

以下補足
  • túはインフォーマル、ustedはフォーマルな場面で使う
  • élは男性、ellaは女性に対して使う
  • nosotros, ellosは男性の集団に対して使う
  • nosotras, ellasは女性の集団に対して使う
  • 男性、女性両方いる集団の場合は、nosotros, ellosを使う

2018年3月7日水曜日

español 6

¡Hola! Buenas noches.
Yo soy Kenji. Vivo en Japón.

今日は家族を紹介する文章の練習です。

Este es mi hermano. Se llama Tom.
こちらは私の兄弟です。彼の名前はトムです。

Esta es mi hermana. Se llama Rebecca.
こちらは私の姉妹です。彼女の名前はレベッカです。

男性名詞/女性名詞かによって、主語がeste/estaに変わるのがポイントです。

madre 母親
padre 父親
mujer 妻
marido 夫
hija 娘
hijo 息子
abuela 祖母
abuelo 祖父

スペイン語ではhの音は発音しないっぽいです。
代わりにjの音がhに近い(フランス語のrっぽい感じ)気がします。

Adiós. Hasta pronto.

2018年3月5日月曜日

español 5

¡Hola! ¿Qué tal?

スペイン語でたまに現れる¡と¿、いったい何やねんと気になっていたので調べてみた。


  • 疑問文の場合は文末のクエスションマークに加えて、文頭に逆さのクエスションマークを付ける。
  • 感嘆文の場合は文末のエクスクラメーションマークに加えて、文頭に逆さのエクスクラメーションマークを付ける。
ということらしい。
お姉さん、可愛いなあ。。

ちなみにキーボードで入力するとき(Mac OS)は、
¡: Option + 1
¿: Option + ?
のように入力すればよい。

Adiós. Hasta luego.

2018年2月21日水曜日

español 4

Hola, buenas noches. Soy Kenji. ¿Qué tal?

¿Eres de España?
あなたはスペイン出身ですか?

¿Es usted de España?
あなたはスペイン出身ですか?(丁寧バージョン)

Sí, soy de España.
はい、スペイン出身です。

No, no soy de España.
いいえ、スペイン出身ではありません。

¿Dónde vives?
どこに住んでるの?

¿Dónde vive usted?
どこに住んでるのですか?(丁寧バージョン)

Vivo en Tokyo, Japón.
私は日本の東京に住んでいます。

Soy de Japón, pero ahora vivo en Inglaterra.
私は日本出身です。でも今はイギリスに住んでいます。

Adiós, hasta luego.

español 3

Hola, buenas noches. ¿qué tal?

最近飲み会ばっかりで肝臓がやばいです。
暴飲暴食はやめて「より少なく、しかしより良く」でいきたいです。

下の写真は「より良く、そしてより多く」なやつです。



Me llamo Kenji. ¿Y tú? 
私の名前はけんじです。君は?

Me llamo Kenji. ¿Y usted?
私の名前はけんじです。あなたは?(丁寧バージョン)

¿Cómo te llamas?
君の名前は?

¿Cómo se llama usted?
あなたの名前は?(丁寧バージョン)

¿De dónde eres?
どこ出身ですか?

¿De dónde es usted?
どこ出身ですか?(丁寧バージョン)

Soy de Japón. 
日本出身です。
※注意 "Japón" は "はぽん"と発音する。

Soy de los Estados Unidos. 
アメリカ出身です。

Adiós, hasta pronto.

2018年2月15日木曜日

español 2

Hola, ¿qué tal?

しばらく出張でアメリカにいたため中断してましたが、今日から勉強再開します。


Buenos días. 
おはよう。

Buenas tardes.
こんにちは。

Buenas noches.
こんばんは。

Encantado.
お会いできて嬉しいです。

Me llamo Kenji.
私の名前はけんじです。
※注意 llはyの音になる。

Adiós.
さよなら。

Hasta luego.
またあとで。
※注意 hは発音しない。

Hasta pronto.
また(すぐ)あとで。

Hasta mañana.
また明日。

なかなか先は長そうだな.. 
Adiós, hasta mañana.

2018年2月3日土曜日

español 1

 1年後くらいに長期休暇(1ヶ月くらい)が取れる予定なので、カリブの島巡りをしようと思う。



英語が使えればいいのだけど、あまり通じないらしいのでスペイン語を少しずつ勉強していこう。
  • 通勤時間にスペイン語のpodcastを聞く
  • 新しく学んだ表現をブログに書く

これでまあボディランゲージを使えば何とか会話できるくらいにはなるはずだ。きっと。


Hola, ¿qué tal?
やあ、元気?

Bien.
元気だよ

Muy Bien.
超元気!

Bien, ¿y tú?
元気だよ、君は?

bien, gracias.
元気だよ、ありがとう。

2018年1月18日木曜日

Scalaのapply、unapplyについて

applyの説明


class Human(val name: String, val age: Int) {
}

object Human {
  def apply(name: String, age:Int) = {
    new Human(name, age)
  }
}

としておくと、以下のようにインスタンスを生成できる。

val h = Human("taro", 20)

コンパニオンオブジェクトのapplyがファクトリメソッドとして使われるので、newと書かなくてもインスタンスを生成できる。

unapplyの説明


class Human(val name: String, val age: Int) {
}

object Human {
  def unapply(h: Human): Option[(String, Int)] = Some((h.name, h.age))
}

としておくと、以下のようにパターンマッチで使える。

val h = new Human("taro", 20)
h match {
  case Human(name, age) => println(s"name=$name, age=$age")
  case _ => println("unknown")
}


ケースクラス

case classを使ってあんなことやこんなことができるのは、実はapply、unapplyが自動生成されていたかららしい。

case class Human(name: String, age: Int) {
}

val h = Human("taro", 20)
h match {
  case Human(name, age) => println(s"name=$name, age=$age")
  case _ => println("unknown")
}