いももちのきもち

新米プログラマによる技術的メモ

ScalikeJDBC3.0以降のバージョンはPlay Frameworkの2.6以降しかサポートしません

For ScalikeJDBC 3.0 or higher, we supports only Play 2.6 or higher.

引用元
Play Framework Support - ScalikeJDBC

ssh: Could not resolve hostname github.comの解消

新しいUbuntu Desktop環境を作ったのでgithubに公開鍵を登録して、さてgit cloneでもするかと思ったらエラー。

ssh: Could not resolve hostname github.com: Temporary failure in name resolution
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
thinking_face

調べてみると似たような質問がstackoverflowに載っていた。
git - ssh: Could not resolve hostname github.com: Name or service not known; fatal: The remote end hung up unexpectedly - Stack Overflow


うちもDNSエラーかもしれない。
pingしてみると返事がない...

$ ping github.com
ping: unknown host github.com

network-manager を再起動した。

$ sudo service network-manager restart

これでgit cloneできるようになった。
apt-get update/upgradeでnetwork-managerが消される場合があるらしい?

ある数n以下の最大の2の累乗の値を求める

解答1

素直な解答です

n = int(input())
i = 1
while ( i * 2 <= n):
    i *= 2
print(i)

Submission #1480413 - AtCoder Beginner Contest 068 | AtCoder

解答2

それほど素直ではないかもしれない解答です

print(2**(len(str(bin(int(input())))[2:])-1))

Submission #1480441 - AtCoder Beginner Contest 068 | AtCoder

解説

# 数値読み込み
n = int(input()) # n = 9 とする

# 2進数化
$ bin(9)
0b1001 # 0桁目と3桁目に1がある

# 数値から文字列へ、ついでに頭をとる
$ str(0b1001)[2:]
"1001"

# 桁数を得る
len("1001") # = 4

# 10進数表示に直す
2 ** (4 - 1) = 8

※翌日追記
bin()では文字列を返すので上のstr()いらんかった

Androidで画面に合わせて適切な画像ファイルをよしなに読み込んでもらう

公式ガイドを読んだので簡単にメモする
developer.android.com

  • 画面のサイズはsmall, normal, large, xlargeの4種類
MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

リソース配下layout(-hoge)に同じ名前でレイアウトを定義することで、呼び出し側はそのままで、Androidが画面サイズに合わせてうまいこと適切なレイアウトを選んでくれる。

  • 画面の向きはportrait(縦向き)とlandscape(横向き)の2種類
MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

landのsuffix(接尾辞)をつけることで横向き画面を示す。
サイズと組み合わせるとlayout-large-land(例)

  • 画像の解像度はlow (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)の4種類
MyProject/
    res/
        drawable-xhdpi/
            image.png
        drawable-hdpi/
            image.png
        drawable-mdpi/
            image.png
        drawable-ldpi/
            image.png

これも似たような感じ。@drawable/imageで画面のdensityに合わせて適切なものを引っ張ってきてくれる。

【夫婦円満】家庭用slackのネタ

エンジニアなら家庭用のチャンネルくらいもってますよね?
夫婦のコミュニケーションにSlack便利です。
妻が非エンジニアですって?ちょうどいいです。
簡単な設定で済むものを設定してあげたらそれだけで感心されます。

1. 記念日

labo.hatenastaff.com
結婚式や入籍日、子供の誕生日などを登録しておけば毎朝8時に自作botから投稿してあげると喜ばれます。

2. テレビの時間をリマインド

/remind を活用してslackbotにリマインドさせるだけです。
N〇Kの朝ドラの昼の再放送も見たい!という育休主婦の要望にも簡単に応えられます。

3. おみくじ

これもslackbotに「おみくじ」という単語に反応するようにしておき、ランダムに大吉や吉などと答えさせるとなんだか楽しくなってきます。

適宜追記していこうと思います。

家庭用チャンネルにslackbotを導入して天気調べる【LITE】

【背景】
会社の同期内でSlackのbotを作るのが流行っていたので乗り遅れまいとbotを作った。
しかし後発だとネタも思いつかないし、まずは家庭用チャンネルで始めようと思い典型的な天気予報botを整備した。

【利用したframeworkなど】
slackbot GitHub - lins05/slackbot: A chat bot for Slack (https://slack.com).
具体的なインストール方法や利用方法はQiitaを参考にした。
PythonのslackbotライブラリでSlackボットを作る - Qiita

放置していたさくらVPS上でバックグラウンドプロセスとして実行


天気予報botを作成しよう、ということで以下を参考に作りました。
Pythonを使ってSlack Botを作成してみた - Monthly Hacker's Blog
botがいるチャンネルでtenkiとつぶやくと東京の天気予報を教えてくれます。
HTTPリクエストの扱いにはrequestsモジュールを使っています。
地方の選択は以下のリンクからどうぞ。
http://weather.livedoor.com/forecast/rss/primary_area.xml

import requests

@listen_to('tenki')
def weather(message):
    city_id = '130010' # 東京
    url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=' + city_id
    data = requests.get(url).json()
    text = data['description']['text'].encode()
    message.send(text)

MySQL Using filesort とUsing temporary

MySQLでEXPLAIN文を使ってクエリの実行計画をみたらExtra欄にUsing filesortとUsing temporaryが出ました。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 8.8.2 EXPLAIN 出力フォーマット
これらが表示されている場合、パフォーマンスは良くないことが予想されるため改善が必要です。

MySQLのUsing Temporaryについて - aeroastroの日記