redash 2.0 リリース:Athena正式対応!だけど表示されない時の対応

2017/8/8に、redash 2.0 がリリースされました。

今回のリリースで個人的に一番嬉しいのが、「Athena: direct query runner using the instead of JDBC proxy.」です。
今までも、redashでAthena使えはしたのですが、別にプロキシを立てて、
そこ経由でクエリ発行しないといけないという辛いものでした。

今回のメジャーアップデートで、正式対応したので早速アップデートしました。
バージョン1系統からのアップデートは、アップデーターがあるので非常に簡単です。

cd /opt/redash/current
sudo bin/upgrade

これで1〜2分でアップデートされます。

ところが自分の環境では、AthenaがData Sourceで表示されなかったのです。
ついでにBigQueryも使用できなくなってました。

これはRequirementsで要求されているライブラリが不足している、
もしくはバージョンが低いことが原因なのでインストールしてあげると
データソースにAtenaが表示されるようになります。

pip install -r requirements.txt
pip install -r requirements_all_ds.txt

redashをsupervisorctlで起動するときに発生するエラーへの対応

1. Error: .ini file does not include supervisorctl section

/opt/redash/supervisordsupervisorctl start allを実行すると、Error: .ini file does not include supervisorctl sectionとエラーが発生する。

色々紛らわしいのだが、.iniは、supervisord.confと読み替えて差し支えない。
supervisorctlが定義されていないと言われるので、supervisord.confに追記する。今回は空行で追加した。

[supervisorctl]
[supervisord]
nodaemon=false
logfile=/opt/redash/logs/supervisord.log
pidfile=/opt/redash/supervisord/supervisord.pid
directory=/opt/redash/current

2. http://127.0.0.1:19001 refused connection

/opt/redash/supervisordsupervisorctl start allを実行すると、http://127.0.0.1:19001 refused connectionとエラーが発生する。

supervisordが起動していないことが原因。まずは起動してあげる。

# supervisord -c supervisord.conf
# supervisorctl start all

3. FATAL: role “root” does not exist

api_error.logOperationalError: (psycopg2.OperationalError) FATAL: role "root" does not existというエラーが発生している。

postgresqlに、rootロールがないというエラーなので、roleを作成してあげる。

su postgres
psql
postgres=# CREATE ROLE root LOGIN SUPERUSER PASSWORD 'root';
postgres=# \q

4. you have to set the C_FORCE_ROOT environment variable

celery_error.logに次のエラーが発生していた。
If you really want to continue then you have to set the C_FORCE_ROOT
environment variable (but please think about this before you do).

対応するために、/opt/redash/current/redash/worker.pyを編集する。

+++ from celery import Celery,platforms
--- from celery import Celery
+++ platforms.C_FORCE_ROOT = True
celery = Celery('redash',
                broker=settings.CELERY_BROKER,
                include='redash.tasks')

AWS SUMMIT Tokyo 2017 Day 2 基調講演

image

Amazon.com CTOのWerer Vogelsが登場。

セールスのイベントではなく教育のイベントです。AWSだけではなく、AWSを10年つかっているユーザー様からも学んでほしいと思います。ぜひ

image

登録者は2万人以上です。

image

セッション数、ゲストスピーカー、スポンサーブースがあります。

続きを読む “AWS SUMMIT Tokyo 2017 Day 2 基調講演” >

『eureka Meetup #01 -Android DroidKaigi再演-』の参加メモ

eureka Meetup #01 -Android DroidKaigi再演-』に参加してきました。
その時に興味のあった内容を備忘録的にメモしています。
ハッシュタグは、「#eureka-meetup」です。

  • 事業成長にフォーカスする開発組織 by 金子 慎太郎
  • トークアプリで絵文字を実装した話 by 二川 隆浩
  • Error Handling in RxJava by 海藤 優弥

事業成長にフォーカスする開発組織 by 金子 慎太郎

まずは会社的な歴史と概要とCTOの概要。

  • PairsとCupplesを開発しているが、特にPairsに注力している
  • 前CTO元CEOから継いで、CTOになって半年。
  • 自社サービスする、VC入れないを方針に広告事業でキャッシュをためて、受託開発をしてナレッジをためて、そしてPairsをリリース。3年後に完全に受託開発から撤退した。
  • 2016年に会員数500万人

開発組織はどうやっていくのかというお話。

  • 事業成長とブレンドイメージの向上を技術を通して支援・加速させるのがエンジニア戦略
  • プロダクトを早く届けることに注力している。早く注力するために技術負債の低減を進めてスピード感を維持している
  • 古いOSを使用しているユーザーにも配慮したアプリ開発をしている
  • UI/UX大切。マネタイズがトガりすぎると結局金儲けアプリかと思われる。不正ユーザー(業者)をいかに取り除くか。

Androidアプリ:トークアプリで絵文字を実装した話 by 二川 隆浩

@futabooo
サーバーサイドはPHPからGolangにフルリニュアルしました。
フロントはTypeScriptとAngularJS。
Androidは、Kotlin・DataBinding・ButterKnife・Picasso・RxKotlin・Retrofit2・OkHttp3を使っています。

アプリ独自絵文字を最初は用意してなかったが、「自分が送った通りの絵文字が表示されない」という問い合わせを受けた。
しっかりとコミュニケーションできるようにアプリ独自絵文字を追加することを決意。
どうやるのかは他社アプリの独自絵文字を研究しました。

他社のアプリで実装されていた機能には次のようなものがあった。

  • 絵文字を表示できる
  • 絵文字のコピー&ペーストができる
  • アプリ外にペーストすると代替テキストで表示される
  • 絵文字1つだけの時はスタンプになる

String message = "こんにちは{{sticon(1,10)}}今日はいい天気ですね{{sticon(2,20)}}"
「{{sticon(1,10)}}」というような記法で独自アイコンを表示する。

裏の実装は、正規表現で頑張る感じ。Stringの拡張は、SpannableStringで実施。

コピーアンドペーストは、
コピーすると、アプリの方では「こんにちは{{sticon(1,10)}}」を保持して、クリップボードでは代替文字列「こんにちは(sunny)」をコピーする。
ペーストは、クリップボードの文字列とアプリの文字列を比較して対応する。

実装してみたら、大量の絵文字を表示するとスクロールがカクついたのでキャッシュで対応することにした。
最初はLruCacheを使って解決。
絵文字のコピペをすると文字れが切れる問題が発生した。
絵文字をコピーすると「{」しかコピーされなかったので、「{{sticon(1,10)}}」までコピーするように実装した。

Error Handling in RxJava by 海藤 優弥

@yuyakaido
スライド

RxJava(Reactive Extension for Java)のエラーハンドリングはCatchとRetryの2種類。
Retrofitで共通処理を仕込むのにコピペを減らすためにCallAdapterインターフェイスを継承して、
RxJavaCallAdapterWrapperを実装してaddCallAdapterFactoryで呼び出して対応。

C# で踏み台サーバー経由で RDS for MySQLに接続する方法

概要

ローカル開発マシンから、C#を使用してSSHでBastion(踏み台)サーバーに接続し、ポートフォワードしてRDS for MySQLに接続してデータを取得する方法について説明します。
ポートフォワードの部分の設定が理解できなくて設定に迷って手間取ったのでした。
ポートフォワード元と先に何を設定すべきか。。。

設定手順

  1. Visual Studio で「プロジェクト」 → 「Nugetパッケージの管理」を選択する。
  2. 「mysql.data」と「ssh.net」をインストールする。
    • image.png
    • image.png
  3. SSHでAWSのBastionサーバー(踏み台)に接続し、ポートフォワードでRDS fro MySQL に接続する。
var pkFile = new PrivateKeyFile(@"E:\aws.pem", "");
var connBuilder = new MySqlConnectionStringBuilder
{
    AllowBatch = true,
    Server = "127.0.0.1",
    Port = 3306,
    UserID = "hoge",
    Password = "foo",
    Database = "fuga"
};
using (var client = new SshClient("54.65.***.***", 22, "ec2-user", pkFile))
{
    client.Connect();
    var forward = new ForwardedPortLocal("127.0.0.1", 3306, "rds-mysql.****.ap-northeast-1.rds.amazonaws.com", 3306);
    client.AddForwardedPort(forward);
    forward.Start();
    using (var connection = new MySqlConnection(connBuilder.ConnectionString))
    {
        connection.Open();
        using (var com = new MySqlCommand("SELECT * FROM t_user limit 1", connection))
        {
            com.CommandType = CommandType.Text;
            var ds = new DataSet();
            var da = new MySqlDataAdapter(com);
            da.Fill(ds);
            foreach (DataRow drow in ds.Tables[0].Rows)
            {
                Debug.WriteLine("From MySql: " + drow[1].ToString());
            }
        }
        forward.Stop();
    }
}