【Golang】ポインタがよくわからなかったので調べたものをまとめてみた

おはこんばんにちは!
最近一気に秋が深まって冬まで行きそうな勢いで寒いですね。。
ハロウィーンでまちが盛り上がってる中、自分はGolangの習得に苦戦してます。
(・◞◟・`;;)オゥ…
元々Railsをやっていた自分としてはやはりポインタとか構造体の扱い方は結構詰まるところになってしまっているので、今回色々調べていたことをメモ程度にまとめようかなと思っています。
そこ違うとかあればぜひご指摘ください。

変数ってどうなってるの?

色々本とかを読み漁っているとこんな記述を見つけました。

ポインタの値は変数のアドレスです。つまり、ポインタとは値が格納されている場所なのです。
全ての変数はアドレスを持っています。
引用元:プログラミング言語Go(丸善出版)

つまり、もともと変数には値とポインタというプロパティ?が存在しているということか。。?(本当にあってるのかな?w) f:id:bi-hideaki:20171101215105p:plain

&演算子→アドレスを生成する

*演算子→ポインタが参照している変数を取り出す

値渡し

さて、Go言語では引数は全て値渡しで渡されます。そもそも値渡しとは?

値渡し

渡された変数の値が別のアドレスにコピーされる。コピーされるために、関数内で変更しても呼び出し元の値は変化しない。
ふむ、つまりGo言語では基本的に変数を定義して、それを引数に渡して関数で処理をしても呼び出し元の値を変更することは基本的に出来ないらしい。となると手続き型で関数で呼び出すことが基本となるGo言語ではかなり融通が効かなくなる?ってことか。

呼び出し元の値を変更することを実現するポインタ

Go言語では基本的に値渡しになるということで、呼び出し元の変数の値を変更するためにポインタ型と言うものが使われるらしい。
&演算子で変数のアドレスを生成して、それを引数として渡すことで呼び出し元の変数の値を操作することが出来るということか。
ちなみに、引数として渡すアドレスも当然値渡しなのでコピーされることになる。
コードを例に見てみると何をやってるかわかりやすい。

num := 100
pointer := &num //変数numのアドレスを生成してそれをpointerに格納する
fmt.println(*pointer) //pointerにはnumのアドレスが入っているので、*演算子を使ってnumの値にアクセスする
=> 100
*pointer += 1 // num += 1 と同義
fmt.println(*pointer) // "101"

結局、ポインタってのは「値渡しで呼び出し元の変数の値を操作するために使われるもの」という認識に今はなったが果たしてそれであっているのだろうか??

ポインタと構造体

Go言語で開発をしているとたくさん使うのが構造体とポインタ型のコンビネーションだ。
構造体はフィールドと呼ばれる複数の型の値をまとめて持っておけるものだ。
関数で呼び出して構造体の値を更新してDBにインサートするのはよくある流れだ。そこで構造体の値を変更したい。ただ単に引数に渡すと値渡しなのでコピーされてしまってうまくインサートできなくなってしまう。(同じ関数内で構造体の値を変えてインサートまでするコードを書けば行けるのかもだがそれはナンセンスですよね。。)
そこでポインタ型を使って呼び出し元の構造体のフィールドの値を変更して、それをDBにインサートする処理を書けばうまく行きそうですね。おそらくポインタはこういったことを実現するためにあるのかな。
今の自分の乏しい知識だとそれくらいしか思いつかないです。。

ポインタレシーバを持つメソッド

Go言語を始めてからポインタと同じくはじめは違和感を感じまくっていたのが関数とメソッドの使い分けです。これに関しては別の記事を書こうかなと思っています。
Go言語では関数の呼び出しで個々の引数の値を値渡し(コピー)するので関数が変数の値を更新する必要がある場合にはポインタを使って変数のアドレスを渡して呼び出し元の変数の値を操作することが出来る。
これはレシーバ変数を更新する必要があるメソッドでも同様のことがいえるってことですね。

type Num struct { X, Y int }

func (n *Num) IncBy(ele int) {
  n.X += ele
  n.Y += ele
}

とりあえずポインタを渡せばよいはだめ!?

今後色々とメソッドを作ったりしていくと思うのですが、とりあえずポインタを渡せば良いというのはだめなようです。
qiita.com
この記事にもあるようにGo言語では値型の型と参照型の型があるのでそれらによってポインタを渡すかどうかをしっかりと使い分けないとだめなようです。(パニックして落ちるわけではなさそう)

  • 値型:数値、構造体、配列
  • 参照型:文字列、インターフェース、マップ、スライス、チャネル

参照型というものに分類されるものは型の仕組みにポインタを使った参照を含んでいるらしくポインタを生成しなくてもいいようです。

ここまでポインタに関してまとめてきました。まだまだわかってないことが多すぎて辛い。ということで引き続き勉強がんばります、、

位置データから正確な情報を計算せよ!<AdTech Challenge>

皆さんおはこんばにちは!
久々のブログ更新になってしまいましたw普段から技術的なことを書こうと思ってるのですが中々手が回らなくて。。。
言い訳はさておき、またまたサイバーエージェントさんの主催のイベントに参加してきましたのでそのことをブログに書きたいと思います!
参加したイベントはAdTech Challengeと言うもので、名前の通りアドテク系の内容になっています。 www.cyberagent.co.jp 今回は送られてくる位置データを元にそのデバイスが何処にいたかなどを計算し解答を返すAPIを3人1組+社員エンジニア1人のチームで作るイベントでした。
初めてアドテク系の開発を経験したので非常に色々な経験が出来ていい勉強になりました!毎回思うのですが、なんでサイバーエージェントハッカソンとかイベントってこんなに楽しいのでしょう??w
ぜひ色んな学生にチャレンジして欲しいですねw
では、実際にどんな技術を使ったのかとかアーキテクチャとかの説明に行きたいと思います〜!

技術選定

どんな技術を選んだかを紹介したいと思います。使用する言語についてはみんなが使いたいものってことで良かったのですが、DBの選定で少し悩みました。まずは使用した言語について見ていきたいと思います。

使用した言語

Golang

普段からGoで開発をしているわけではないですが、使ってみたいということでGoを選びましたw(技術選定になってるのか??ww)

Gin

GoのフレームワークのGinも導入しました。エンドポイントの作成とか基本的な設定とかをする必要がなくなるのかなと思ったのと学習コストが比較的に低そうだったので導入を決めました。

データベース

DBに関しては何を使うべきなのかを悩みました。DBを選ぶ条件としてはQPS2000に耐えられるのかどうかというところでした。(そもそもスタートの時点でQPS2000がすごいのかどうかすらわかっていなかったですw)
とりあえず、その疑問を解決すべく調べたり実験したりして(この後書きます)、結局チームメンバーが使い慣れていたCloudSQLにすることになりました。

CloudSQL(MySQL)

今回のお題の情報量(QPS2000)であればMySQLで十分対応出来るということで選びました。
しっかりとベンチマークを確認して、本当にだめなのか、何がだめなのかの確信を持てるまでしっかりと調べることは大切なのだなと改めて思いました。

インフラ

自分はインフラがめっぽう弱くて、今後の課題であるとずっと思っているのですが未だに克服出来ていません。。
今回はチームに1人、アドテクエンジニアの人が参加しているのでその人にインフラの構成とかはほとんどおまかせしていました。

Google Container Engine(Kubernetes)

今回のデプロイ環境はGCPでした。その中からGCEを選びKubernetes Clusterでnodeのコントロールをする??様に設計していました。そして、Kubernetes ClusterとCloudSQLが通信する感じですね。たぶん。。。
f:id:bi-hideaki:20171023135119p:plain

アーキテクチャ

さて、実際に自分たちが作ったアーキテクチャの紹介をしていきたいと思います。
作るアーキテクチャはQPS2000で2時間くらい情報が流れてくるからその情報をDBに全て格納できること、リアルタイムで情報を検索して100ms以内にその解答を検索して返すことの2つを実現させるようなアーキテクチャが求められていました。
今回一番勉強になったところがこのアーキテクチャを考えるところです。主にはDBをなににするかというところの話が多くなってくるとは思いますが、どうやってアーキテクチャを決めたかなどのエピソードも書いていこうかなと思います!

どんなアーキテクチャがいいんだろう??

今回はアドテク。QPS2000。さぞ立派なアーキテクチャが必要で、しっかりと設計しないと死ぬ。。。そんな予感がありました。
最初から立派なアーキテクチャを考えようと頭をひねろうとしていたのですが、そもそもアーキテクチャを決めようにも判断基準の情報が少なすぎて何も決められない状況でした。

そもそもQPS2000って何?すごいの?おいしいの?

自分たちのチームもQPS2000というのを聞いて、周りのチームと同様にMySQLじゃ無理なんじゃね?という話になっていました。そのことから、周りのチームではBigqueryとかBigtableを使って性能のいいDBを使ったほうがいいという流れからそっちを採用していたのですが、僕らではそもそもなぜMySQLではだめなのかの判断ができずにいました。
そこでまずは単純に送られてきたデータをそのままDBにぶち込むという至極単純なアーキテクチャで試しにQPS2000を体感してみようということになりましたw その時のアーキテクチャは本当にそのままです。w f:id:bi-hideaki:20171023143024p:plain このアーキテクチャで試すと案の定、死にましたwそれを確認するためのアーキテクチャだったので良かったのですが、そもそも死んだボトルネックが何なのかは確認する必要がありました。
そこで、そもそもMySQLがQPS2000に耐えられるのかをベンチマークを読んで確認すると、QPS20000くらいまでは普通に大丈夫だよ的なことが書かれていたのでQPS2000はボトルネックにはならないという結論が出て、MySQLでいいじゃんという結論になりました。
では、なにがボトルネックになっているのでしょうか?

Insert文が走りすぎてる説

答えを言うと原因はこれでした。QPS2000ということは2000回Insert文が走っているので、それがボトルネックになっていました。
そこで、Bufferを使ってInsert文が 走る回数をコントロールしてあげればデータを全て漏れなく格納できるのではということで、bufferを作って試してみました。新しいアーキテクチャもかなり単純で、先程作ったものにbufferを噛ませているだけになっています。 f:id:bi-hideaki:20171023145409p:plain 結果は、、、全部の情報を格納することが出来ました!!
ということで、自分たちのアーキテクチャは凄くシンプルな物にまとまりましたw
ちなみに、検索速度に関してはINDEXを貼るなどをして検索速度を上げることで十分対応できるのでその点もクリア出来ていました。

結果発表

最終プレゼンを終えて、ちょっと気持ちが抜けてふわふわしてたらチームの社員さんと2日間の振り返りを行って終った感と脱力感に浸ってましたがすぐに結果発表の時間になりましたw
今回は全体でチームA〜チームGの7チームで得点を競い合いました。ちなみに私はチームGです。
3位から発表され優勝はダラダラダラダラダラダラ、、、チームB!!!
プレゼンの時にアーキテクチャとかめちゃくちゃしっかりしてて、使用している技術に関する理解も深く相当すげぇと思ってましたがやはりこのチームが優勝でした!さすがの一言ですね。自分も精進せねばと改めて感じました。
今回は順位以外に審査員特別賞があるらしい、、
ダラダラダラダラダラダラ、、、チームG!!!! キタァ!!!ということで、審査員特別賞をいただきました!!めちゃくちゃ開発を頑張ってくれたチームのメンバーにめちゃくちゃ感謝です!!kyoto hackでは勝てなかったので今回は賞をいただけてめちゃ嬉しかったですw
商品は銀のAbemaくんですw割りと重量感がありますw f:id:bi-hideaki:20171023151419j:plain

何が評価されたのか?

さて、何が評価されたのでしょうか?
それは、2日間で作るアプリでQPS2000というお題に対して、なぜMySQLで大丈夫でしっかりと各技術を理解した上でアーキテクチャを設計し、結果非常にシンプルなアーキテクチャでデータの格納や検索を実現させているという点でした。
プレゼンのときは他チームのアーキテクチャなどを見てやばいなという話をメンバーとしていましたが、そもそもQPS2000がどのくらいでMySQLではだめなのかどうかをしっかりと検証しているチームはチームGくらいで、QPS2000という新しいものを体感して把握したりしてボトルネックを把握した上でアーキテクチャの設計をしたりしているのもチームGだけでした。(私の知る限りでは)
このことからしっかりと知らないことに対してはしっかりと検証して問題を把握し切ることが非常に大切であるし、そういった所はしっかりと評価されるので改めて重要な能力なのだなと改めて感じました。

まとめ

今回は色んなことを学ぶことが出来ました。QPSなど普段は触れない用語なども触れることが出来ましたし、そもそもなんとなくで決めるのではなくしっかりとボトルネックになっているものを把握して、しっかりと根拠を持って技術選定することの大切さを改めて感じました。当たり前ですが、当たり前なことが大切であるということに改めて気づかせてもらいました。
また、チームで一つの問題に取り組んで、みんなで議論し合いながら開発することの楽しさも改めて感じました。チームGのみんなありがとうございました!! f:id:bi-hideaki:20171023151337j:plain 今回もめちゃくちゃ優秀な学生エンジニアが沢山参戦していて、改めて自分がとても贅沢な環境にいることを感じました。いずれ何処かでみんなと再会してエンジニアとして色んな話をする時が来たりしたらいいなぁなんておっさんみたいなことを考えたりしていますw
最高の環境を経験出来るので、他の学生にもぜひサイバーエージェントさんのインターンハッカソンに参加してほしいですね!
参加者のみんな、お疲れ様でした!
最高の開発環境でやらせていただいたサイバーエージェントのみなさんも本当にお世話になりました!adtech studioに遊びに行きます!w
最後まで読んでいただきありがとうございましたm(__)m f:id:bi-hideaki:20171023154508j:plain

京都で観光せずにオールナイト開発!!??

皆さんこんにちは!
涼しくなってきて、季節も秋っぽくなってきましたね!季節は秋の雰囲気を出し始めていますが、9月14日〜9月19日まで私は真夏のエジブトより熱いハッカソンに参加してきました!
その名もkyoto hack19!!
kyoto hackとは、サイバーエージェントさんが主催するハッカソンで毎年京都で開催されています。技術を持つ学生たちが花の都、京都に集まりその技術を持って1週間でプロダクトを作り、その完成度を競い合います。
今回はそのkyoto hackに参加させて頂いたので、学んだことなどをブログに書かせていただきます!
kyoto hackについてはこちら↓
www.cyberagent.co.jp

どんなもの作ったの?

自分たちのチームは「京都×写真」というテーマで開発をすることになりました。
ズバリ、作ったアプリは

写真で選んで行きたい場所へのルートを作成するKyotrip!!

皆さん、一人旅はしたことありますか?

一人じゃなくても良いのですが、海外旅行に行ったときなどどこに行くか迷ったときはありませんか?それに、出来る限り色んな場所を回りたいけど、王道だけではなくこんな場所あったんだ!と思えるような場所にも行ってみたい!そんな気持ちを持ったことはありませんか?
京都で最も古く、日本の国宝1号のある広隆寺。ここの弥勒菩薩像は息を呑むほど美しいと言われますがツアー観光が禁止されているため観光コースに入らず知る人ぞ知る名所となっています。
そんな場所に行く機会を作り出せるのが自分のチームが作ったアプリです!
写真から好きなスポットを選んで、それをマップで表示してくれるアプリ。結構シンプルだけど意外と今までなかったアプリです。
kyoto hackにする直前に私も一人でシンガポールに旅行しに行っていたのですが、その時にあったら良いなというアプリを作りましたw
f:id:bi-hideaki:20170923220440p:plain

どう評価されたのか?

自分たちのチームは惜しくも優勝できず悔しい結果となりました。
優勝したチームはライブ配信という非常に技術的に面白く、難しいものに挑戦していたのでシンプルにすごかったです。さすがの一言でした。優勝チームはおめでとうございます!!
さて、自分たちはと言いますと多くの審査員の方にもっとも実用的で今回のハッカソンの中であれば一番使いたいアプリと評価していただきました。
この評価は素直にとても嬉しかったです。
というのも、自分たちのチームは「写真」というありきたりなテーマに決まって全く新しいものを思いつくことが出来ず、どれもすでにあるサービスの二番煎じなアイデアしか出すことは出来ませんでした。

よく「ペルソナ」なんて言葉知ってるね!

そこで、自分たちは課題で渡されていたターゲットからペルソナをしっかりときめ、ユーザーがどんな問題を抱えているのかを考え、その問題を解決するアプリを作成することを目指しました。
そして自分たちが見つけ出したのが、本当に行きたい場所を見つけられているのか?という問題でした。
そうこうして決めた私達の企画を褒めていただけたことは自分達のアイデアの出し方やユーザー目線で考えてみるということが出来ているという自信を持つことができました。

しっかりとチーム内で議論を深めて、メンバー間でアプリの完成図をしっかりと共有する

ハッカソンが始まる前にスカイプなどを使ってMTGを重ねてしっかりとチームで議論出来た成果がしっかり出せて良かったです。
全員でしっかりと議論して企画を進めていたのでチーム全体で完成図をイメージでき、全員がそのサービスを作りたいと思いながら開発出来たのは非常に大きかったかなと思います!
ペルソナの中に外国人旅行客を入れ、国籍関係なく使えるシンプルなデザインを目指したことも評価していただけました。

最高の開発チーム

kyoto hack19は3人1組のチームで取り掛かりました。
自分たちのチームは多くの審査員の方に一番楽しそうに開発していて、チームビルドが最もうまく行ったチームとお褒めの言葉をいただきました。
チームメンバーは、18歳〜23歳という超幅広い年齢層が集まっていたので、如何にコミニュケーションを円滑に行えるかが大切でした。
f:id:bi-hideaki:20170923225103j:plain

どうやってコミニュケーションを円滑にするか?

自チームでは敬語を使わないようにして全員がフラットな状態で話せる様にチームで決めてMTG、開発にあたりました。その効果もあり、とても楽しい開発になりましたし、ハッカソンが終わった後でも仲良く連絡取ってますw
今回のハッカソンで作ったサービスもリリースまで持っていこうという話も出ています。
みんながめっちゃ仲のいい最高のチームで開発出来たのはとても幸せでしたし、いいチームを自分たちで作り上げることが出来たという自信にもつながりました。
f:id:bi-hideaki:20170923224959j:plain

まとめ

そろそろまとめたいと思います。 今までの人生で、1週間という短い期間でここまで集中して開発したことはなかったので楽しく、苦しく開発出来ましたw 短期間で詰め込んで、チームで開発する経験は中々出来ないですし、色々な面で成長することが出来て非常に有意義な京都になりました!(今度は観光しに京都いきたいなw)
やっぱり開発って楽しいなと思えましたが、同時に自分の技術レベルがまだまだであることも痛感しました。
サイバーエージェントのメンターさんたちは非常に技術力が高く、学ぶことが多くいい刺激をもらいました。
みんながとても楽しそうで、如何にサイバーエージェントという会社が楽しく働ける場所なのかを教えていただきました!
1週間、お疲れ様でした!そして、お世話になりました!
最高に楽しいハッカソンでした!
今後もサイバーエージェントさんのインターンに参加させて頂く予定なので、よろしくお願いします! f:id:bi-hideaki:20170923225213j:plain

UITabBarControllerでモーダル遷移させたい!!!!!!!!

最近色んな所でエンジニアはブログを書いたほうが良いって言われるからそろそろ自分も書かなきゃなぁと思い少しずつ書いていこうかなと思い始めました。 ってことで、swiftでSNSアプリを開発をしている時にハマったのでその時のメモ。

UITabBarControllerでモーダル遷移させたいなぁ

インスタとかでもそうだけど、何かを投稿するVCを出すときってタブバーでボタンを押すとモーダル遷移になってるから自分もそれをやりたいなと思って実装しよう!!! ってことでそれについて書いていきます。

注:基本的に全てコードで実装します

UITabBarController用のファイルを作成

cmd+nで UITabBarController用のswiftファイルを作成してください。ここまではいつもどおりですね。 f:id:bi-hideaki:20170822153810p:plain

そうすると作成されたファイルの中はこんな感じになっているますね。

import UIKit

class SampleTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

次にTabBarの設定を記述しよう

タブバーを作る際に必要な設定は3つほどです。

  • タブバーに表示するVCを作る
  • 作成したVCをタブバーにセットする

今回は3つのボタンを作成するためにFirstViewController, SecondViewController, ThirdViewControllerの3つを用意しました

タブバーに表示するVCを作る

これは、TabBarControllerのファイルでVCを作っていきます。 今回はSecondViewControllerをモーダル遷移させます。なので、ついでにモーダル遷移させるボタンとそのメソッドもここで書いてしまいましょう!

import UIKit

class SampleTabBarController: UITabBarController {

    private lazy var firstViewController: FirstViewController = {
        let con = FirstViewController()
        con.tabBarItem = UITabBarItem(
            title: "",
            image: UIImage(named: "写真")?.withRenderingMode(.alwaysOriginal),
            selectedImage: UIImage(named: "選択されたときの写真")?.withRenderingMode(.alwaysOriginal)
        )
    }()

    private lazy var secondVCButton: UIButton = {
        let button = UIButton()
        button.setBackgroundImage(UIImage(named: "ここに写真"), for: .normal)
        button.sizeToFit()
        button.addTarget(self, action: #selector(self.didTapButton(_:)), for: .touchUpInside)
        self.tabBar.addSubview(button)
        return button
    }()

    private lazy var thirdViewController: ThirdViewController = {
        let con = ThirdViewController()
        con.tabBarItem = UITabBarItem(
            title: "",
            image: UIImage(named: "写真")?.withRenderingMode(.alwaysOriginal),
            selectedImage: UIImage(named: "選択されたときの写真")?.withRenderingMode(.alwaysOriginal)
        )
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

 // SecondVCを表示するボタンの設定
    override func viewDidLayoutSubviews() {
        secondVCButton.frame = CGRect(origin: .zero, size: CGSize(width: 90, height: 75.375))
        secondVCButton.center = CGPoint(x: tabBar.bounds.width / 2, y: tabBar.bounds.height - (secondVCButton.bounds.height / 2))
    }

 // ボタンを押したときのアクション
 func didTapButton(_ button: UIButton) {
        let con = SecondViewController()
        present(con, animated: true, completion: nil)
    }
}

作成したVCをタブバーにセットする

次にVCをセットする作業をやっていきましょう〜 といっても、viewDidLoad内にちょこっと記述するだけで終わります。

override func viewDidLoad() {
        super.viewDidLoad()
   // 以下を追記
        let viewControllers: [UIViewController] = [
            firstViewController,
            thirdViewController
        ]

        setViewControllers(viewControllers, animated: false)
    }

これで一通り動く様になってますね! ここではナビゲーションバーとか何も付けてないので、動きが付けられないですがこれをひな形に色々カスタマイズしてみてください〜!

f:id:bi-hideaki:20170822164301g:plain

仮メンターたちと海外留学談義①

こんばんは!ゲンさんです!

 

さて、今日は仮メンターの方たちをサポートさせていただきました!何個かエラーを解決することができて少しは役に立てたかなと思います。

 

今回の仮メンターは優秀な方がとても多いなと感じました。頼もしい限りです!

 

今日の休憩時間にみんなで話していたのが海外留学についてです。僕たちはプログラミングをやっている集団のせいかAIを勉強してみたい人とかが結構いるんですよね。

 

そこで話していたのが、やっぱりアメリカで勉強したいということでした。でも、やっぱりお金のこととか、英語力のこととかで心配事がたくさんですよね!

 

【ぶっちゃけ英語ってどうなのよ!?】

僕自身もアメリカの大学や大学院で勉強してみたいという気持ちが強くあるので色々調べたりはしましたね。

 

去年の夏にUCLAに6週間お邪魔させていただいたときに感じた事なのですが、

 

日常会話は中学生の英語で十分というのは、本当です。日常会話は本当に簡単です。

 

しかし、アカデミックな内容になり専門用語などが多くなってくるとディスカッションとかがすごく大変なんだろうなと思いました。

 

TOEFLで81点以上が求められるのもわかりますね…

 

なんとかこの壁を越えたいと思います!

 

Good evening, guys! This is GENsan!

 

Today, I supported pre-mentors. I solved some errors, so I think I could help them little bit!

 

They are really intelligent and diligent! I think they can pass the exam. For sure!

 

When we took a rest, we discussed studying abroad. We are studying programing ,

so we think we want to study AI or something about computer science. However,

we all said we want to study in America, not in Japan! Because American university and master school is really great!

They said “how much will it cost?”, “How many grade should I take in TOEFL?”.

There are many questions!

 

[ In fact, how is the English? ]

I also want to study in America, so I searched about it.

 

Last summer, I went to UCLA for 6 weeks.

 

I felt that Japanese junior high school English is enough to live in America! lol

 

However, if you want to study on America, it’s not enough. Because you should take part in discussion and tell your opinion by using terms. I think it’s really hard to do them.

 

I can understand why American university require more than 81 in TOEFL

 

But, I can do it!

 

ブログ、はじめました。

こんにちは!

今回ブログを始めることになりましたゲンさんです。以後よろしくお願いします。笑

 

なんとなく自分のログとして書いてみようと思い始めました。自分が興味あることについて書いていこうと思います。興味あったら見ていってください。

 

【 Who am I? 】

自分は大学生で建築を専攻していますが、プログラミングをやっています。自分がやりたいことを実現できるのがプログラミングだと思い始めました。

 

といってもまだまだ甘ちゃんですが…

 

いずれはアメリカの大学で勉強すしたいと考ています。はい、留学ですね。そこに向けて準備も進めていきます!

 

【迷子のわんちゃん】

今日は愛犬をシャンプーに出した後、コストコに行ってきました。その帰り道でのことでした。

 

交通量の多い大きな道路のど真ん中を1頭のチワワちゃんが震えながらとぼとぼ歩いていたのです。

 

僕は思わず車から飛び降りて助けに行きました。とても不安そうで車に乗せてあげたらどこかホッとしていました。

 

その後、近くの警察署に届けました。

 

警察に届けてから30分ほどしたら連絡があり、飼い主さんが見つかったとわかりました。本当によかったです。

 

飼い主の方も泣きながらお礼をしてくださり、こちらも感動していました。とてもいい飼い主さんで安心しました。

 

 

僕がチワワちゃんを助けに行く直前、タクシーがチワワちゃんの前にいました。

 

すると、そのタクシーはチワワちゃんに向かってクラクションを鳴らして横を通過していきました。

 

僕はこれを見たときに、怒りを覚えました。お客さんを乗せていたとしても許せませんでした。日本人は易しとは思いますが動物に対してはどうでしょうか?

 

日本の動物に対する考え方は、とても未熟であり酷いものであると思います。

 

日本での動物に対する考え方を変えていかなくてはならないと思った出来事でした。

 

Hello!

My nickname is "Gen San"! Nice to meet you.

 

I decided to start this blog with no reason. I felt I want to try to wright blog.

If you are interesting in my blog, please enjoy it!

 

[ Who am I? ]

I’m a university student. My major is architecture, but I don't like it. Because it isn't fun for me. Now, I’m studying programing, computer science in TECH::CAMP because if I master programing, I can make my dream come true.

 

umm..I’m just a beginner lol

 

And someday, I want to study in American university. Therefore, I study english so hard.

 

[ Lost tiny dog ]

Today, I took my dog to the animal hospital for shampoo. And then, I went to the costco

 

On the way to the hospital form costco, a Chihuahua walk middle of big road alone with shivering. I decided to help her at once…

 

After I help her, I went to the police.

 

Then, 30 min later, her master was founded!! I was really calm down to here that.

 

 

Before I helped the Chihuahua, a taxi was in front of her. The taxi driver sounded his Klaxon. I really hate it.

 

How do you feel when you are in such situation?