さわらブログ

さわら(@xhiroga)の技術ブログ

【備忘録】結合条件なしのJOIN

職場で困ったので、調べたことの棚卸し。

やりたかったこと

売り上げテーブルAの全てのレコードと会計年月テーブルBの最新のレコード1件を結合したかった。

会計年月テーブルA
商品 売り上げ金額
冷蔵庫 50000円
電気ケトル 10000円
掃除機 30000円

 

会計年月テーブルB
会計年月
201707
201708
201709

 

結果
会計年月 商品 売り上げ金額
201707 冷蔵庫 50000円
201707 電気ケトル 10000円
201707 掃除機 30000円

 

そのための方法

調べた感じ、Bから副表を作った後でAと結合すれば良いみたい。結合方法は...

  1. CROSS JOINする
  2. FROM句の後にテーブルを並列に書く(CROSS JOINになる)
  3. ON句なしでINNER JOINする
  4. SELECT句中でサブクエリを使う

他にもあったら教えて下さい...!

1. CROSS JOINする

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A CROSS JOIN (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP

2.  FROM句の後にテーブルを並列に書く(CROSS JOINになる)

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A, (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP

これが調べた中で一番驚きました。

 3. ON句なしでINNER JOINする

SELECT A.商品, A.売り上げ金額, B_TMP.会計年月 FROM A INNER JOIN (SELECT 会計年月 FROM B  ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS B_TMP ON 1 = 1

4. SELECT句中でサブクエリを使う

SELECT A.商品, A.売り上げ金額, (SELECT 会計年月 FROM B ORDER BY 会計年月 ASC FETCH FIRST 1 ROWS ONLY) AS 会計年月 FROM A

 

* 細かい書き方はDBMSによって違うと思います(FETCHとか)。さわらはDB2っぽく書いてます。

CoderDojo体験

エンジニア的な課外活動にいいんじゃないかと思ってCoderDojo体験した。
継続的に参加するか決めてないけど、とりあえず行ってよかった!


そもそもCoderDojoとは。

子ども向けプログラミング道場?で、学習塾と違うのは子どもが好き勝手やる事を大事にしている点らしい。
児童館とかのノリに近いのかな?
東京だけでも結構あって、下北沢、調布、小平、etc...
今日はCoderDojo小平に行った。

 

行ったら意外と少人数だった。(子ども4人)
あと、プログラミングじゃなくて知育おもちゃみたいなので遊んでる子の方が多かった。
(普段はもっとプログラミング寄りらしい)

 

遊んでたおもちゃ(の一例)↓↓

f:id:hiroga_cc:20170722173215j:plain

プログラミングを教えるんじゃなくて、普通に子どもの相手をするのを楽しんでしまった…(むしろ相手をしてもらった)


道場主さんの話だと、三鷹でもCoderDojoをやりたいエンジニアはいるけど、
子どもとの接し方が分からなくて困ってるらしい。そんなパターンもあるのね〜。

さわらはこの手のボランティア慣れてるけど、世の中そうじゃない人の方が多いのかもしれない。

 

今日はプログラミングのお手伝いとかはできなかったので、
また別の機会に別のDojoに行く予定です。

React Native 1ヶ月半やってみての棚卸し

これまでに学んだことの棚卸し。

 

作ったアプリ↓↓

appetize.io


React Native自体について

constで定義したコンポーネントをclassで定義し直すことが多かった。
装飾がメインの役割のものはconstで定義して、props.childrenを表示するのが良さそう。

propsなのかthis.propsなのかがよく分からなかった。
あと、class内でconstを定義できないのもよく分からなかった。クラスのメソッド内なら定義できたけど。

ListViewクラスのdatasouceはコピペで乗り切ってしまった感がある。

reduxでactionのエラーをキャッチしようとすると、そのキャッチの範囲がコンポーネントの再描画あたりまで行き届いてしまう。
(action→reducerで値を書き換え→propsに変更→コンポーネント再描画、までtryの中ってことらしい)

 

iOSについて

http通信を許可するためにinfo.plistに書き込まなければいけないのに気がつくのに時間がかかった。
(info.plist自体も複数あって、どれに書き込むのかよく分からなかった。)

こんな感じにした↓↓

f:id:hiroga_cc:20170721074915p:plain

 

Appetizeにアップロードするまでに時間がかかった。
ローカルのjsbundleを参照させるのに苦労した。公式ドキュメントに当たる癖をつけたい。

ローカルのjsbundleを参照すると、シミュレーターでは出なかったエラーが出る。
(それまでcatchで気づかずに握りつぶしていたもの?)

 

今後の課題

* Expoのアプリ側でのリロード方法が分からない。
* Navigator関連が分からない(俺はreact-native-router-fluxを使っている)
* reduxとasyncStorageを一緒に使うとき、どのタイミングで書き込むのがベストか分からない
* Expoを使うべきなのかreact-native init [アプリ名]でやるべきか迷ってる

オープンデータの使用事例が知りたい

オープンデータを使ったアプリで、いい感じのアプリって本当にあるのかしら?

ハッカソンに出る中で疑問を持つようになったので、調べてみました。

 

調べ方としてはこんな方法が考えられると思います。

1. オープンデータの使用事例をまとめているサイトから探す。

例: Open Data Impact Map の Use cases

 

2. オープンデータを公開しているサイトに行き、その中で「使用事例」のページを探す。

例1: LinkData.org の 公開アプリ一覧

例2: data.gov.uk の Latest apps

 

3. そのほか、ブログの記事などから探す

例: Open Data Use Cases In Five Cities |

 

1. と 2.の方法だと見つかるものが玉石混交になっているので、

今回の目的(いい感じのアプリがあるかどうか知りたい)から行くと、人力で選んでくれている3. の方法が良さそう。

 

で、そのブログで紹介している内容が以下。

 

************

イギリス、ロンドン

Apps & Analysis – London Datastore

ロンドンのオープンデータをまとめたサイト。
ユースケースっていうよりプラットフォームだよね。

 

アメリカ、シカゴ

地域の情報を検索して地図上にマッピングできるサイト
例えば映画のロケ地とか、通行止になっている場所とか

 

アメリカ、ニューヨーク

Tunnel Vision NYC

地下鉄マップにかざすと、地下鉄の現在位置や混雑状況がARでマッピングされるアプリ!

 

オランダ、アムステルダム
アムステルダムのいろんな地理情報を地図にマッピングしたものを集めたサイト。

 

ソフィア、ブルガリア
こちらはユースケースではなく、最近オープンデータの取り組みを始めた国の紹介。 

 

************

 

一番すごいな、と思ったのがニューヨークの地下鉄マップを使ったARアプリ。

気がついたこととしては、地図にマッピングするアプリが多い気がするな〜。

 

結論としては、かっこいいオープンデータの使用事例はありました。

npmとかyarnとかとの戦い、3日目にして終結

react-nativeのアプリにライブラリ追加したらsimulatorがレッドスクリーンになった。

f:id:hiroga_cc:20170613062813p:plain

 

どうも依存性とかいうのが悪いらしい、
npmとかyarnとかわからないことが多すぎるのでここで棚卸ししたい。


初日(2017-06-11)
react-nativeのプロジェクトとreact-native自体のバージョンが違ってると出るらしいエラー発生。
困ったら次の通りやればいいって知見を得た(それで解決するわけではない)

rm -rf node_modules
npm cache clean --force
npm install

 

コマンド&オプション
listとversionsとかの違いが未だに覚えられない
依存性でつまづいてる時はnpm listでエラーが出るっぽい

このころは--saveがよく分からなかった。
っていうか-gは未だによく分かってない。grobalに入れてくれるの?なんか依存性とか大変そう...
npm iがinstallの略らしいということに気がつき、node文化は省略が多い気がする


2日目(2017-06-12)
知人のreact使いに --saveすると packageに入るってことを教えてもらった
俺も仕事で使いたいよーreactとかそういうの

パッケージの追加インストールが依存性をぐちゃっとしたらしい仮説に気がついたのが2日目
yarn.lockとpackage.jsonとpackage-lock.jsonの違いが分からん
後yarn add (ライブラリ名)とnpm install (パッケージ名)の違いもわからん
yarnの方がクールということは分かった。俺は雰囲気でnode.jsをやっている...

 

コマンド&オプション
npm install --save react-native@latest を
npm install --save react-native latest にして
latestという名前のライブラリがインストールされた笑

友達のインフラエンジニアが言ってた、環境周りは手打ちをするなと...可能な限りコピペするのだと...

create-react-native-appとreact-native initの2種類があることも知った
前者の方がイケてるらしい

 

3日目(2017-06-13)
stackoverflowで優しい人が教えてくれた...
https://stackoverflow.com/questions/44489330/undefined-is-not-an-objectecaluating-reactinternals-reactcurrentowner/44503337#44503337
しかもすでに見たはずのgithubのissueにあったやつ
ちょっとマヌケじゃないか自分...

 

第一次産業ハッカソン 〜Tinder流行りすぎとちゃいます?〜

 

今日はREAPRA VENTURESさんとスローガン株式会社さん共催のハッカソンにいました。

xtech.connpass.com

 

Tinderクローンの「八百マッチ」というアプリを作って(僕コーディングしてないけど)アグリゲートさんの企業賞をいただきました。

ところがなんと。Tinder風アプリが12チーム中3チームもあった🔥

 

 

僕のチームは「お店に入荷した野菜とお客さんとのマッチング」を謳うTinderで、魚業界の課題にトライしたチームは「マイナーな魚料理とお客さんのマッチング」、花き業界のチームは「花とお客さんのマッチング」でした。

Tinder率、高くないですか?どうしてですかね?

 

暇な女子大生効果か、という仮説は一旦棄却するとして🗑マッチングサービスが随所で求められてるんじゃないかってのは妥当な感じがすると思ってます。

第一次産業の場合は、高付加価値を実現するためにスーパーには無い多様な品揃えをする戦略が当たっていて、それがTinderのUIとマッチするわけです。

 

これは他の業界にも言えると思うんですよね。例えば図書館ハッカソンとかあったら、本と利用者のマッチングをするTinder作ったら優勝(一般的な意味で)できると思います

旅行会社のハッカソンがあったら「旅のプランとお客さんをマッチングするTinder」とか。映画Tinder、歌舞伎Tinder、大学Tinder、なんでもありです。

 

ただそれが急に流行りだしているのだとしたら...やっぱり暇女効果なんですかね。笑

react初心者さわら、react-nativeを試す

目次

* なぜやったか
* 何をやったか
* 結論


# なぜやったか
SPAJAMに出場することになりました!...が、メンバーほぼ全員スマホアプリ未経験者です
今回swiftかreact-nativeかを学ぶので、swift経験がちょっっとだけある僕が選定をすることになりました。

# 何をやったか
reactとreact-nativeのチュートリアルをやったよ。

* react
http://qiita.com/okamuuu/items/1b94ab69d1bc3fb82d27

* react-native
https://facebook.github.io/react-native/docs/getting-started.html#content

### やった感じ
* react-nativeの学習コストはswift同じくらい"ではない"気がする。
react未経験、モダンなjavascriptも未経験だと無名関数とかアローとか多用されてて辛い
* xcodeでアプリ作ったことがないと構成が分からなさそう(まだ多画面のチュートリアルしてないけど)
* ソース置換するだけでビルドし直さなくていいらしい(その恩恵を感じるレベルに達していない)
* iOSとアンドロイド両方作れるのは、少なくともハッカソンには関係ないんだよな
* Facebook公式ガイドがreact未経験者に優しくない(それはそうだ)
* Qiitaが少ない!!!!!


### 学んだこと
チュートリアルやる前にnode.jsとnpm updateをするべし
reactもreact-nativeも、アプリの雛形を自動で作ってくれる。
npm installは-gでgrobal、--saveでpackage.jsonへの記載をしてくれる


# 結論
react-nativeはモダンなjavascriptよく分からない人には難しい!
でも個人的に未来を感じたのですごいやりたい