てけとーぶろぐ。

ソフトウェアの開発と、お絵かきと、雑記と。

ChromebookにインストールしたUbuntuで日本語入力できるようにする

日本語入力したいだけならわりと短い手順でできることがわかった。
先回のシステムイメージバックアップで気軽にリトライできるようになり何度か試したおかげでもある。
以下手順。なおこの手順だと日本語入力できるだけでUIは英語のままです。

言語パック、日本語フォント、日本語IMEのインストール

以下のコマンドで「language-pack-ja-base」「language-pack-ja」をインストールして、
適当な日本語フォント(ここではモトヤマルベリとモトヤシーダ)をインストールして、
日本語IMEのMozcをインストール。

$ sudo apt-get update
$ sudo apt-get install language-pack-ja-base language-pack-ja
$ sudo apt-get install fonts-motoya-l-maruberi fonts-motoya-l-cedar
$ sudo apt-get install ibus-mozc

あとはGUIからの設定。

キーボードの設定

日本語キーボードなのに英語キーボードと認識されていたので以下で修正。

Applications Menu → Settings → Keyboard
→「Keyboard」のダイアログが表示されるので「Layout」タブを選択
→・「Use system defaults」のチェックを外す
 ・「Keyboard model」「Change layout option」「Compose key」を「-」に
 ・「Keyboard layout」を「jajpanese」のみにする
  (Addからjapaneseを選ぶと「Layout」が「japanese」で「Variant」が空で追加でき
  これで問題なさそう。)
→「Close」

日本語IMEの設定

Mozcを使えるようにする。

Applications Menu → Settings → Input Method
→「Input Method Configration」のダイアログが表示されるので「OK」
→Do you explicitly select the user configration?「Yes」
→「default」を選択して「OK」

Applications Menu → Settings → Keyboard Input Methods
→「IBus Preference」のダイアログが表示されるので「Input Method」タブを選択
→・「Customize active input methods」にチェックを入れる
 ・「Select an input method」から「Japanese - Mozc」を選択し「Add」をしたりして
 「Input Method」を「Japanese - Mozc」のみにする
→「Close」

IBus Daemon自動起動するようにする。

Applications Menu → Settings → Session and Startup
→「Session and Startup」のダイアログが表示されるので
 「Application Autostart」タブを選択
→「Add」
→「Add application」のダイアログが表示されるので
 「Name」「Command」に「ibus-daemon -rdx」と入力して「OK」
→「Close」

ログインし直すと「半角/全角」キーでIMEのON/OFFができるようになっている。

ChromebookでSDカードにUbuntuをインストールする(2)

ChromebookでSDカードにUbuntuをインストールする - てけとーぶろぐ。
でSDカードにUbuntuをインストールしたものの
SDカードが出っ張って刺したまま持ち歩きづらい
という理由で生かせずじまい…。
そんなところ、ぴったりなアイテムを見つけ、これはと再挑戦。

SDカードの準備

そのアイテムがこれ。短いmicroSD→SD変換アダプタ。MacBookに感謝か。

microSDカードは今回も先回と同じ速度のものをmicroで。

システムイメージバックアップ

インストールにあたって必須ではないのだけど
SDカードにインストールした場合Win32 Disk Imagerなどを使うと
簡単にシステムをまるごとバックアップできる。

8GBとか小さめのSDカードにUbuntuをインストールして
初期状態や最低限のソフト入れた状態でバックアップしておくと
バックアップイメージファイルのサイズは8GBで済み、復旧に便利。
気軽にシステムをいじれる。

32GBなどのSDカードに対してもWin32 Disk Imagerで上記8GBのイメージファイルを書き込める。
書き込んだ後に、例えばLinuxマシンで読み込んでgpartedでパーティションサイズを拡張してやればディスク容量をフルに使えるようになる。

Ubuntuのインストール

インストール自体は先回と同じ手順で。
なぜかSDカードのフォーマットで躓いたので記事に追記しておきました。

PythonによるJSONを返すHTTPサーバーを簡単に用意する(2)

PythonによるJSONを返すHTTPサーバーを簡単に用意する - てけとーぶろぐ。の続き。

サーバーにクライアントから受け取ったJSONを表示する機能を追加する。
do_json_service() に3行追加。

from http.server import HTTPServer, BaseHTTPRequestHandler
import sys, json
import os.path
import glob

class Handler(BaseHTTPRequestHandler):

    def do_POST(self):
        service_names = []
        files = glob.glob('./*.json')
        for file in files:
          basename = os.path.basename(file)
          service_names.append(os.path.splitext(basename)[0])

        for name in service_names:
            if self.path == ('/' + name):
                self.do_json_service(name)

    def do_json_service(self, name):
        b = self.rfile.read(int(self.headers['Content-Length']))
        s = json.loads(b.decode("utf-8"))
        print(json.dumps(s, indent=4, sort_keys=True))

        f = open(name + ".json")
        result_json = json.load(f)
        f.close()

        self.send_response(200)
        self.send_header('Content-type','application/json')
        self.end_headers()
        self.wfile.write(json.dumps(result_json).encode('UTF-8'))

PORT = 8080

httpd = HTTPServer(("", PORT), Handler)
httpd.serve_forever()

PythonによるJSONを返すHTTPサーバーを簡単に用意する

似たようなタイトルが続いていますが
今回は、サーバー自体の挙動を変えれば
前回、前々回のようにCGIにせずともJSONを返せるという話。

セットアップ、動かし方については前々回
PythonによるCGIが動くHTTPサーバーを簡単に用意する - てけとーぶろぐ。
をどうぞ。

サーバー本体のプログラムを「server.py」として作成。
同じディレクトリー内にあるJSONファイルの名前でアクセスすると
そのファイルの内容を返すようになっているので
合わせて「test.json」も作成。

from http.server import HTTPServer, BaseHTTPRequestHandler
import sys, json
import os.path
import glob

class Handler(BaseHTTPRequestHandler):

    def do_POST(self):
        service_names = []
        files = glob.glob('./*.json')
        for file in files:
          basename = os.path.basename(file)
          service_names.append(os.path.splitext(basename)[0])

        for name in service_names:
            if self.path == ('/' + name):
                self.do_json_service(name)

    def do_json_service(self, name):
        f = open(name + ".json")
        result_json = json.load(f)
        f.close()

        self.send_response(200)
        self.send_header('Content-type','application/json')
        self.end_headers()
        self.wfile.write(json.dumps(result_json).encode('UTF-8'))

PORT = 8080

httpd = HTTPServer(("", PORT), Handler)
httpd.serve_forever()
{ 
    "key":"value"
}

クライアント側のプログラムを「client.py」として作成。「test」にアクセスする。

import requests
service_name = 'test'
r = requests.post('http://localhost:8080/' + service_name, 
                  json={"key": "value"})
print(r.status_code)
print(r.json())

PythonのクライアントとPythonのCGIでJSONのやりとり

PythonによるCGIが動くようになったので
クライアントとサーバー(CGI)でJSONでやり取りしてみる。

クライアント側のプログラム
import requests

r = requests.post('http://localhost:8080/cgi-bin/json_service.py', 
                  json={"key": "value"})

print(r.status_code)
print(r.json())

なおWindowsで「python-3.5.2.exe」をインストールしただけだと
「requests」が使えないので以下のコマンドでインストールしておく。

python.exe -m pip install requests
サーバー側のプログラム(CGI)

クライアント側から受けたJSONをそのまま返すコード

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, json

data = sys.stdin.read()
result_json = json.loads(data)

print('Content-Type:application/json\n\n')
print(json.dumps(result_json))

適当なJSONを返すコード

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys, json

result_json = {'key': 'value'}

print('Content-Type:application/json\n\n')
print(json.dumps(result_json))

PythonによるCGIが動くHTTPサーバーを簡単に用意する

クライアントプログラムのちょっとしたテスト用に
手軽なHTTPサーバーが欲しくなること、ないですか。

簡単なJSONを受けてJSONを返すようなサーバーが欲しいだけなんで
PythonなんかのCGIが動けば十分…みたいな。

ちょっと探してみると、サーバー自体をPythonで作れるらしい。
Windowsでも大丈夫だった。以下手順。

Download Python | Python.org から「python-3.5.2.exe」をダウンロードしてインストール。

サーバー本体のプログラムを「server.py」として作成。

from http.server import HTTPServer, CGIHTTPRequestHandler

class Handler(CGIHTTPRequestHandler):
    cgi_directories = ["/cgi-bin"]

PORT = 8080
httpd = HTTPServer(("", PORT), Handler)
httpd.serve_forever()

「server.py」のあるフォルダー内に「cgi-bin」フォルダーを作成してその中に
CGIプログラムを「test.py」として作成。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import cgi, cgitb
form = cgi.FieldStorage() 

# Get data from fields
name = form.getvalue('name')

print ("Content-type:text/html\n\n")
print ("<html>")
print ("<head>")
print ("<title>Hello, world!</title>")
print ("</head>")
print ("<body>")
print ("Hello, %s!" % (name, ))
print ("</body>")
print ("</html>")

コマンドプロンプトを起動して以下を実行するとサーバーが起動する。
「C:\Users\user\AppData\Local\Programs\Python\Python35-32」はPythonのインストール先によって変えてください。
インストール時にPathに追加としている場合は不要です。
「C:\temp」は「server.py」を置いたフォルダーのパスです。

set path=%path%;C:\Users\user\AppData\Local\Programs\Python\Python35-32
cd C:\temp
python server.py

Webブラウザーから「http://localhost:8080/cgi-bin/test.py?name=Kurima」にアクセスしてみると…動いた。

すごい。簡単。

参考:html - How to run a python cgi web server in windows - Stack Overflow

ポケモンGO。

つい先日の友人とのやり取り。

「みんなポケモンGOやりすぎ!

「あのゲーム、歩きスマホ前提だよな。

「いや、操作するとき止まればだけど、まーなー。

「歩きスマホ法が制定されたらスゴそう。

「現行犯でどんどんつかまるな。

「むしろ反発してやるワルガキとかいそう。
 つかまったことを勲章にして
 『ヘヘッ、オレなんか3回もつかまったぜ!』

「つかまっちゃまずいだろ…
 『間抜けなヤツらだ。ポリ公につかまりやがって。俺様ほどになれば…』

「そしたら警察の間で、歩きスマホしてる奴のことを
 隠語で『ポケモン』って呼びだしそう。

「『あ、おれ、今月ポケモン10匹つかまえましたよ。』

「『署長、あそこ、結構ポケモンいますよ。』

「罰金だったらバンバンとれそうだな。

「消費税上げなくて済みそう。

「罰金で財政立て直すとかどんな国だよ。

「『この…ポケモンをお金儲けの材料としか見られないのか!』

「サトシかよ!

…。