Blogoというブログエディタがあります。
以前試用した時には日本語入力で問題があったのでバグレポートを出したら、ベータテスターに誘われました。それでこの記事はバグ修正ベータ版で書いてます。
日本語入力のバグは修正されたようです。これで実用できそうです。
Blogoというブログエディタがあります。
以前試用した時には日本語入力で問題があったのでバグレポートを出したら、ベータテスターに誘われました。それでこの記事はバグ修正ベータ版で書いてます。
日本語入力のバグは修正されたようです。これで実用できそうです。
Raspberry Pi 2でディスプレイを縦置きで使うには、/boot/config.txt
にdisplay_rotate=3
を追記する。
Default: 0
右90°: 1
180°: 2
左90°: 3
リブートすると反映される。
Raspberry Pi 2で外付けHDDを利用する。
パーティションの作成
USBポートにHDDを接続する。
pi@raspberry ~ $ sudo fdisk -l
を実行すると接続したHDDは/dev/sdaだと確認できたが、WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.
という警告が表示されたのでgdiskをインストールして初期化する。
pi@raspberry ~ $ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.5
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: present
Found valid MBR and GPT. Which do you want to use?
1 - MBR
2 - GPT
3 - Create blank GPT
Your answer: 2
Using GPT and creating fresh protective MBR.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-976773134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-976773134, default = 976773134) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D595477B-ABF6-4B84-BF36-2BD97357CE4D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 976773134 465.8 GiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.
パーティションをext4でフォーマットする。
pi@raspberry ~ $ sudo mkfs.ext4 /dev/sda1
マウントする。
pi@raspberry ~ $ sudo mkdir /workspace
pi@raspberry ~ $ sudo mount /dev/sda1 /workspace
自動でマウントするように設定する。/etc/fstab
に以下を追記する。
/dev/sda1 /workspace ext4 defaults 0 0
iOSアプリ開発時にWebサーバのテスト用サーバをRaspberry Pi 2で動作させるためにRaspberry Pi 2をセットアップする。
インストールの作業はMacで行った。
OSはRaspbianを利用する。RaspbianのイメージファイルのダウンロードはRaspbian公式サイトからでは遅いので、北陸先端科学技術大学院大学のミラーサイトからダウンロードする。ミラーサイトのraspbian-[日付]フォルダの最新のフォルダを選択して[日付]-raspbian-wheezy.zipをダウンロードする。
SDカードにダウンロードしたイメージを書き込むには、まずSDカードをMacに接続して、ディスクユーティリティでそれをFAT32(ディスクユーティリティではMS-DOS(FAT)と表示される)でフォーマットする。
メニューバーのAppleメニューから「この Mac について」を選択する。さらに「システムレポート…」を選択し、システムレポートが表示されたら「カードリーダー」を選択する。先ほど初期化したSDカードの「BSD 名」を調べる。disk[数字]の様なである。スクリーンショットではdisk4である。
ディスクユーティリティでSDカードのパーティションをアンマウントする。SDカードはアンマウントしない。
ターミナルを開く。ダウンロードしたイメージのフォルダに移動して以下のコマンドを実行して、イメージをSDカードに書き込む。
sudo dd bs=1m if=2015-05-05-raspbian-wheezy.img of=/dev/rdisk4
ifにはダウンロードしたファイル名を指定し、ofのrdisk4は先ほど調べたdisk4の先頭にrをつけた名前にする。実行するとMac OS Xの管理者のパスワードの入力を求められるので入力する。しばらくすると書き込みが終わる。
ディスクユーティリティでSDカードをアンマウントしカードをMacから取り出す。
Raspberry Pi 2にSDカードを挿入して、キーボードとディスプレイを接続し、USBケーブルで電源に接続すると起動する。初回の起動ではRaspberry Pi Software Configuration Toolが表示される。
初期設定ではSDカードのすべての領域を利用するようになっていないのでExpand Filesystemを選択してSDカードの全領域を認識するように設定する。
Change User Passwordでパスワードを変更しておく。
サーバ用途なのでX Window Systemを手動起動に変更するためにEnable Boot to Desktop/Scratchを選択して、Console Text console, requiring loginを選択する。(デフォルトでは選択してあった)
Internationalisation Optionsを選択してChange TimezoneでAsia->Tokyoを選択する。日本語フォントがインストールされていないのでLocaleは変更しない。Keyboard Layoutは必要であれば変更する。
Advanced Optionsを選択する。
これでConfiguration Toolでの設定は完了なのでFinishを選択する。
BUFFALOのWLI-UC-GNMを利用してWiFiに接続する。
WLI-UC-GNMをRaspberry Pi 2のUSBポートに刺す。
/etc/wpa_supplicant/wpa_supplicant.confを編集して
network={
ssid="機器のSSID値"
psk="SSIDに対応する暗号化キー値"
}
を追記する。
sudo ifdown wlan0
を実行して子機を停止させ、sudo ifup wlan0
で再度起動する。
ifconfig wlan0
でIPアドレスを確認する。
RustのAuto completionをAtomで行うにはracerを利用する。
racerをcloneして
cd racer; cargo build --release
cp target/release/racer /usr/local/bin/racer
を実行する。
Rust公式サイトからRustのソースコードをダウンロードして/usr/local/src/rust/srcに置く。そのパスをRUST_SRC_PATH環境変数に設定する。
Atomでlanguage-rustパッケージとracerパッケージを検索してインストールする。
Rustのコメントは
という定番のコメントに加え、ドキュメントコメントがある。
Rustdocを利用してドキュメントが生成される。Markdownもサポートされる。
今話題の言語RustをMacにインストールしてみる。
インストール方法のページによるとpkgのインストーラかシェルでコマンドを打ってインストールする方法があるらしい。
その他Homebrewでもインストールできるようなので、Homebrewでインストールしてみる。
$ brew install rust
以下のコードをhello.rsファイルで作成する。
fn main() {
println!("Hello World!");
}
このファイルを以下のコマンドでコンパイルして実行する。
$ rustc hello.rs
$ ./hello
Hello World!
Mac版SkypeのチャットではReturnキーで投稿するようになってます。これが私には非常に不評でして、何度も間違えて投稿してしまっていました。
どうにかならないものかと思っていたのですが、ハッと気がつきました。我らがKarabiner(元KeyRemap4MacBook)を使えばいいということに。
早速private.xmlに記述。
<appdef> <appname>Skype</appname> <equal>com.skype.skype</equal> </appdef> <item> <name>Command+Return to Return in Skype</name> <identifier>private.skype</identifier> <only>Skype</only> <autogen>__KeyToKey__ KeyCode::RETURN, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND | ModifierFlag::NONE, KeyCode::RETURN, </autogen> <autogen> __KeyToKey__ KeyCode::RETURN, KeyCode::RETURN, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION </autogen> </item> |
これの設定をOnにするとSkypeの時にだけReturnキーで改行、Command+Returnキーで投稿できるようになります。
しかしこのままではIMEでもCommand+Returnでしか変換の確定できなくなります。これはIMEの設定でOption+Returnでも確定できるように設定することで回避できます。
iOS用Fluentd Loggerライブラリを公開しました。
まだアルファ段階なので、開発時のみご利用ください。
Fluentd+elasticsearch+Kibana3が動作するVagrant+Chefも入っているので、簡単に使い始められるようになっています。
詳しい使い方はiOSアプリからFluentdにログを送る (Vagrantで簡単にサーバを利用可能) | CAPH TECH : iOSを御覧ください。
VagrantにChefでFluentdとelasticsearchとKibana3をインストールして動かしてみます。
まずこのプロジェクトのファイルを置くディレクトリを作成します。
$ mkdir sandbox $ cd sandbox |
以下の内容でGemfileを作成します。
source "https://rubygems.org" gem "knife-solo" gem "berkshelf" |
インストールします。
$ bundle install --path vendor/bundle |
Chefのリポジトリを作成します。
$ bundle exec knife solo init chef-sandbox $ cd chef-sandbox |
以下の内容でBerksfileを作成します。
source "http://api.berkshelf.com" cookbook 'td-agent', :git => 'https://github.com/treasure-data/chef-td-agent.git' cookbook 'elasticsearch', :git => 'https://github.com/elasticsearch/cookbook-elasticsearch.git' cookbook 'kibana', :git => 'https://github.com/realityforge/chef-kibana.git' cookbook 'timezone-ii', :git => 'https://github.com/L2G/timezone-ii.git' |
cookbookを取得します。
$ bundle exec berks vendor |
独自のCookbookを作成します。
$ bundle exec knife cookbook create base |
インストール時にlibcurl-devが必要になるのとFluentdの設定ファイルを独自のものに変更する為に、cookbooks/base/recipes/default.rbを以下の内容に変更します。
package "libcurl4-openssl-dev" do action :install end include_recipe "td-agent::default" begin t = resources("template[/etc/td-agent/td-agent.conf]") t.source "td-agent.conf.erb" t.cookbook "base" rescue Chef::Exception::ResourceNotFound Chef::Log.warn "could not find template /ect/td-agent/td-agent.conf" end |
独自のFluentdの設定ファイのテンプレートを作成します。cookbooks/base/templates/default/td-agent.conf.erbを以下の内容(必要に応じて変更)で作成します。
<% if node['td_agent']['includes'] %> include conf.d/*.conf <% end %> <% if node['td_agent']['default_config'] %> #### ## Output descriptions: ## # Treasure Data (http://www.treasure-data.com/) provides cloud based data # analytics platform, which easily stores and processes data from td-agent. # FREE plan is also provided. # @see http://docs.fluentd.org/articles/http-to-td # # This section matches events whose tag is td.DATABASE.TABLE <match td.*.*> type tdlog apikey <%= node['td_agent']['api_key'] %> auto_create_table buffer_type file buffer_path /var/log/td-agent/buffer/td </match> ## match tag=debug.** and dump to console <match debug.**> type stdout </match> #### ## Source descriptions: ## ## built-in TCP input ## @see http://docs.fluentd.org/articles/in_forward <source> type forward port 24224 </source> ## built-in UNIX socket input #<source> # type unix #</source> # HTTP input # POST http://localhost:8888/<tag>?json=<json> # POST http://localhost:8888/td.myapp.login?json={"user"%3A"me"} # @see http://docs.fluentd.org/articles/in_http <source> type http port 8888 </source> ## live debugging agent <source> type debug_agent bind 127.0.0.1 port 24230 </source> <% end %> <match myapp.**> index_name adminpack type_name http type elasticsearch include_tag_key true tag_key @log_name host localhost port 9200 logstash_format true flush_interval 5s </match> |
Chefのロールを作成します。
roles/td-agent.rbを以下の内容で作成します。
name "td-agent" description "Base role applied to td-agent nodes." run_list( "recipe[apt]", "recipe[base::default]", "recipe[td-agent]" ) override_attributes "td_agent" => { "plugins" => [ "elasticsearch" ], "platform" => "ubuntu" } |
roles/elasticsearch.rbを以下の内容で作成します。
name "elasticsearch" description "Base role applied to elasticsearch nodes." run_list( "recipe[java]", "recipe[elasticsearch]" ) override_attributes "java" => { "install_flavor" => "openjdk", "jdk_version" => "7" } |
roles/kibana.rbを以下の内容で作成します。
name "kibana" description "Base role applied to kibana nodes." run_list( "recipe[kibana::default]", "recipe[kibana::apache]", ) default_attributes "kibana" => { "version" => "3", } |
Oracle VM VirtualBox – Downloads | Oracle Technology Network | OracleからVirtualBoxをダウンロードしてインストールします。
Download Vagrant – VagrantからVagrantをダウンロードしてインストールします。
Vagrant Boxを作成します。代わりにあとでVagrantfileで指定してもいいです。
$ vagrant box add opscode-ubuntu-12.04 https://opscode-vm-bento.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box |
Vagrantに自動的にChefをインストールするためのプラグインvagrant-omnibusをインストールします。
$ vagrant plugin install vagrant-omnibus |
Vagrantfileのひな形を作成します。
$ vagrant init opscode-ubuntu-12.04 |
Vagrantfileの
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| |
という行のあとに
config.omnibus.chef_version = :latest config.vm.provision :chef_solo do |chef| chef.cookbooks_path = ["./cookbooks", "./berks-cookbooks"] chef.roles_path = ["./roles"] chef.add_role("td-agent") chef.add_role("elasticsearch") chef.add_role("kibana") chef.run_list = [ "role[td-agent]", "role[elasticsearch]", "role[kibana]", "recipe[timezone-ii]", ] chef.json = { :tz => "Asia/Tokyo", } end config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network "forwarded_port", guest: 9200, host: 9200 config.vm.network "forwarded_port", guest: 8888, host: 8888 |
を挿入します。
$ vagrant up |
でvagrantを実行します。
http://localhost:8080/index.html#/dashboard/file/logstash.json
にアクセスします。以下の様なKibanaの画面が表示されるはずです。
次に
http://localhost:8888/myapp.test?json={%22event%22:%22access%22}
にアクセスします。これは、Fluentdにhttpでログを作成しているので、表示は何も行われません。
再び
http://localhost:8080/index.html#/dashboard/file/logstash.json
にアクセスします。すると、以下の様に一つログが表示されているのが確認できるはずです。ログの反映はタイムラグがあるので、表示されていない場合は数秒置いてリロードしてみてください。
以上で動作確認までできました。