はてなブログテスト

一通りの機能を揃えたブログシステムを自前で書いてみたんだけど、やっぱブログとか既存のもの使う方が楽だしはてなブログ使ってみる。

Git for Windowsでplink(putty)を使う

Windows環境でCUIのGitを使うならGit for WindowsとPuTTYを組み合わせて使うのがいいかんじです。なんかあんまし日本語情報が無い気がするので適当に書いておきます。


両方をインストールして、まずは環境変数GIT_SSHにplink.exeへのパスを登録しておく。*1

公開鍵暗号方式で通信するには

  1. puttyに接続先のホスト情報を登録する
  2. pageantに鍵を登録する

どっちか。

puttyに接続先のホスト情報を登録する

putty.exeから接続先を設定しておく。例えば接続先github.com、ログイン名git、あと秘密鍵をgithubというセッション名で保存しておくと以下のように接続先を指定できる。

$ git clone github:hogelog/private-gyazo-kit.git

pageantに鍵を登録する

pageantを起動して秘密鍵を追加しておくと以下のようにして接続先を指定できる。

$ git clone [email protected]:hogelog/private-gyazo-kit.git

個人的にはpageant起動しておく必要ないのでホスト情報を登録しておく方法が好みです。

*1:Windows形式で"C:\Program Files\PuTTY\plink.exe"、もしくはMSYS形式でもどっちでもいい

Arduino UNOを初めて触ってみる日記

電子工作やらマイコンなるものはほぼ触ったことがないのだが初めてArduino UNOなるものをいじってみようと思う。前提知識が全くない。全くないのでとりあえずArduino公式サイトを見るとGetting Startedなる良さ気な文献があるのでそれに沿って進めてみる。このチュートリアル自身もCC3.0で公開してるし、Arduinoの人達は偉いなー。

インストール

丁寧に書いてあったのでそれに沿ってサクッと。

初めてのArduinoプログラム

Exampleの中にあった、LEDを点滅させるプログラム。

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(1000);              // wait for a second
}

動かすと、Arduino UNOボードにのっているLEDの一つが1秒間隔ぐらいで点滅。
LEDに繋がっているピン13を出力ピンとして認識、HIGHを書いたときにLEDが点灯、LOWを書くと消灯するのだろう。

いくつか浮かんだ疑問と回答

  • ピン13がLEDに接続されているとかどこでわかる?
LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off.
  • digitalWriteがあるからにはanalogWriteがある?
    • ある → http://arduino.cc/en/Reference/AnalogWrite
    • digitalはHIGHかLOWの2値、analogは0から255までの連続性のある値を取るらしい。
  • Arduino 1.0の開発環境、お手軽感は良いとして、あまり良いものではない。
    • This page has been movedに沿って進めるとEclipseでArduino開発環境を構築することができる。
    • Arduino Playground - Eclipseの記述は古い。
      • ↓とりあえずこんなコードを実際にEclipseで書いて動かしてみた
#include <Arduino.h>

int main() {
    init();
    setup();

    for (;;)
        loop();

    return 0;
}

void setup() {
    pinMode(13, OUTPUT);
    pinMode(12, OUTPUT);
}

void loop() {
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
    delay(1000);
}

12,13ピンを1秒間隔で交互にHIGHにする。LEDとか繋ぐと交互に点滅。

そんなこんなでArduinoプログラミングしていましたら4月9日になり28歳になっていました。もうすぐ30代だなー。

Facebookチャットを家庭の共通コミュニケーションインフラに採用した。

奥さんとのコミュニケーションにはfacebookチャットを活用しています。メールはやりとりの速度が遅い、SMSとかは特定の環境に依存している。というわけで、ブラウザからも使えるし各種専用クライアントもあるようなインフラを採用。以前はGoogleトークを使っていたのですが、最近Facebookチャットに移行。

XMPP対応メッセンジャー

Facebookチャット | Facebook

facebookチャットはXMPPを利用しているので、XMPP対応しているメッセンジャーアプリならだいたい利用できます。まあ色々あるわけですけど

Windows
http://pandion.im/
Mac
iChat
iPad
iTunes の App Store で配信中の iPhone、iPod touch、iPad 用 imo ビデオ通話&テキスト

こんな感じのものを使っています。経路が多いし検索とかもウェブからサクッとできるので便利です。
XMPPから使うとグループチャットが扱えない(もしかしたら使えるのかもしれないけど知らない)のだけがちょっと不便なところかな。もうメールなんてシステム捨てましょう。

JavaでKestrelクライアントsimple-kestrel-clientを書いてみた。

hogelog/simple-kestrel-client · GitHub

spymemcachedはKestrelで扱うとなんかどうもうまくない。xmemcachedはKestrel対応もしているとは書いてあるけど、なんだかどうもやっぱりpeekとかtimeoutとかを設定するとちゃんと動かない。とりあえず適当に書きなぐってみた。deleteとか他にも色々書いてないし色々適当。

こんな感じ。普通に使える。memcachedクライアントをkestrelクライアントとして使うのは悪手なのかなー。

public class SimpleKestrelClientTest {
    @Test
    public void set_peek_get_peektimeout_gettimeout() throws Exception {
        Socket socket = new Socket("127.0.0.1", 22133);
        SimpleKestrelClient client = new SimpleKestrelClient(socket);

        client.set("hoge", "hoge\r\nhoge");

        assertThat(client.peek("hoge"), is("hoge\r\nhoge"));
        assertThat(client.get("hoge"), is("hoge\r\nhoge"));
        assertThat(client.get("hoge"), is(nullValue()));

        new Thread(){
            @Override
            public void run() {
                try {
                    Socket socket = new Socket("127.0.0.1", 22133);
                    SimpleKestrelClient client = new SimpleKestrelClient(socket);
                    Thread.sleep(1000);
                    client.set("hoge", "hogefuga");
                    Thread.sleep(1000);
                    client.set("hoge", "hogemoge");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();

        assertThat(client.peek("hoge", 5000), is("hogefuga"));
        assertThat(client.get("hoge"), is("hogefuga"));
        assertThat(client.get("hoge"), is(nullValue()));
        assertThat(client.get("hoge", 5000), is("hogemoge"));
    }
}

xmemcachedでkestrelを叩くとなんか変な件

割とわけのわからない挙動をする。

    @Test
    public void xmemcached_set_peek_get_peektimeout_gettimeout() throws Exception {
        final XMemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("127.0.0.1:22133"));
        builder.setCommandFactory(new KestrelCommandFactory());
        SerializingTranscoder transcoder = new SerializingTranscoder();
        transcoder.setCharset("UTF-8");
        builder.setTranscoder(transcoder);

        final MemcachedClient client = builder.build();
        client.setOpTimeout(5000);

        client.set("moge", 0, "aaaaa");
        client.set("hoge", 0, "hoge\r\nhoge");

        assertThat(String.class.cast(client.get("hoge/peek")), is("hoge\r\nhoge"));
        assertThat(String.class.cast(client.get("hoge")), is("hoge\r\nhoge"));
        assertThat(String.class.cast(client.get("hoge")), is(nullValue()));

        new Thread(){
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    client.set("hoge", 0, "hogefuga");
                    Thread.sleep(1000);
                    client.get("moge/peek");
                    client.set("hoge", 0, "hogemoge");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();

        assertThat(String.class.cast(client.get("hoge/peek/t=5000")), is("hogefuga"));
        assertThat(String.class.cast(client.get("hoge")), is("hogefuga"));
        assertThat(String.class.cast(client.get("hoge")), is(nullValue()));
        assertThat(String.class.cast(client.get("hoge/t=5000")), is("hogemoge")); // 何故かこここでmogeにセットした"aaaaa"という文字列が得られる
    }

追う気もしないので適当に自前で書いてみましたとさ。

Windows環境のAndroid開発で使うddms.batで無意味なコマンドプロンプト(黒いウィンドウ)が表示されてしまう。

WSH経由で起動して表示させないようにするのが楽。ddms.batに限らない。

ddms.jsなどとしてスタートメニューなりなんなり適当なところに置いてこのスクリプト経由で起動すると良い。

var shell = WScript.CreateObject("WScript.Shell");
shell.Run("C:/Android/android-sdk/tools/ddms.bat", 0);

当然だがddms.batの場所はインストール先により変わる。

test