Ubuntu11.04にしたらbluetoothが起動できない

ちょっとはまったのでメモ

ポケモンタイピングを購入し、キーボードが気に入ったのでPCでも使おうとbluetoothで接続しようとしたらうまくいかない。

どうも原因はつい先日アップデートしたubuntu11.04にあるようで。バグレポートに思いっきり青歯がうごかねーってありましたし。

いろいろいじくった結果、どうもうまく動かないのはGUIからのbluetooth起動だけっぽいので、端末起動して

service bluetooth restart

すればOKっぽい。しかしrestartして動くってことは、起動タイミングでなにか失敗してるってことかな。

個人的MySQLメモ

hogehogeテーブルのレコード数を知りたい時

SELECT COUNT(*) FROM hogehoge;

hogehogeテーブルのfugaの種類ごとの数を知りたい時

SELECT fuga,count(*) FROM hogehoge GROUP BY fuga;

mysqlに使用する文字コードを教える

SET NAMES UTF8;

Illegal mix of collationsエラーがでた場合これを投げればその場だけは解決したりする。

Illegal mix of collations ( ホームページ ) - ω・)。○(思いつき広場 - Yahoo!ブログ

ただし、アプリ側からSET NAMESのクエリを投げるのは禁止。

セキュリティ面うんぬんというより、ロジック的な意味で。

波ダッシュ・全角チルダ問題

JIS X 0221 規定の JIS X 0208JIS X 0221 の対応表では、波ダッシュは WAVE DASH (U+301C, "〜") に対応させているが、マイクロソフトWindowsShift_JISUnicode の変換テーブルを作成する際に、JIS X 0208 において 1 区 33 点に割り当てられている波ダッシュ "〜" を、Unicode における全角チルダ (FULLWIDTH TILDE, U+FF5E, "〜") に割り当てたため不整合が生じる。この結果、Mac OS 等の JIS X 0221 準拠の Shift_JISUnicode 変換テーブルをもつ処理系と、Windows との間で Unicode データをやり取りする場合、文字化けを起こすことになる。そこで Windows 以外の OS 上で動くアプリケーションの中には、CP932 という名前でマイクロソフト仕様の Shift_JIS コード体系を別途用意して対応しているケースが多い。この原因とされている Unicode 仕様書の例示字形の問題に関しては、波ダッシュ#Unicodeに関連する問題を参照すること。
また、マイクロソフトは同様に EM DASH (U+2014, "―") を HORIZONTAL BAR (U+2015, "―") に、DOUBLE VERTICAL LINE (U+2016, "‖") を PARALLEL TO (U+2225, "‖") に、MINUS SIGN (U+2212, "−") を FULLWIDTH HYPHEN-MINUS (U+FF0D, "−") に割り当てており、これらの変換時にも問題が起こる。Windows VistaMicrosoft Office 2007 に付属する IME パッドの文字一覧における JIS X 0213 の面区点の表示は、上記の文字についても JIS で規定されているものと同じマッピングを使用している[7]。
Unicode - Wikipedia

結論:

最近やってること

社会人となり結婚をし疾風怒濤の日々。

ちょっと振り返ってやってきたことと最近やってることのメモ。

PHPerになった

会社でPHP書いてる。

逆引きレシピやパーフェクトPHP読んで勉強してるけど、「どう書くか」ではなく「どう書いちゃいけないか」を延々学んでる気がする。言語としてどうなんだそれ。

ただまあ、初心者向けって言われるのは分かるような、わからないような。

Windowsを捨てた

あまりにも安定しないのでUbuntuに乗り換えたら快適すぎて笑った。困るのはiPhoneのOSアップデートくらい。その時だけXPを起動してる。

バージョンの違いの対応や細かいエラーもたくさんでるが、対処法がGUICUIかの違いで面倒ごとはwindowsの時と大差ない。

SQLの学習

アプリケーションはORマッパーで記述するが、ちょっとしたデータの確認やピンポイントで情報を視認したいときにさっとかけるよう練習中。テストをするときも、適切なデータを選ばないとテストにならないしね。

シェルスクリプトCUIの学習

もっと早くから勉強すればよかった……。使えば使うほど作業が快適に。

小栗虫太郎の小説を読んでる

日本ミステリー三大奇書の一冊「黒死館殺人事件」を書いた人。一通り読んだけど、長編よりは短篇の方がおもしろい。長編は筆がのりすぎて書いてある文章の意味がわからない。

Poderosa経由でEmacsを使うためにする最低限の設定

今まで自宅鯖でファイルを編集するのにはviを使っていたのですが(デフォルトで入ってるので)、やっぱりEmacsで編集したい!

というわけで、Poderosaの設定とEmacs側の設定でこれだけは最低限しておきたいものをまとめておきました。

Poderosa

  • 「ツール」->「オプション」->「操作」から、右Altと左Altキーの用途をESC
  • BackSpaceキーで0x7Fを送信にチェック
  • 追加キー定義に「Ctrl+OemQuestion=0x1F」を加える(C-/でundoが使えるようになる)

Emacs

.emacsファイルに以下を追加

;; backspace                                                                 
(global-set-key "\C-h" 'delete-backward-char)

;; *.~ とかのバックアップファイルを作らない                                  
(setq make-backup-files nil)
;; .#* とかのバックアップファイルを作らない                                  
(setq auto-save-default nil)

;; confファイル編集用                                                        
(require 'generic-x)

;; カラー設定を有効化                                                        
(global-font-lock-mode t)

;; X-window のクリップボードと emacs のクリップボードの同期をとる            
(setq x-select-enable-clipboard t)

;; リージョン表示                                                            
(setq-default transient-mark-mode t)

ScalaでGoogle翻訳APIを叩く

ScalaでWebAPIを使ってみようシリーズ第二弾。

今回は遊び心あふれることで定評のあるGoogle翻訳APIです。

import scala.io.Source
import scala.util.parsing.json.JSON

val url = "https://www.googleapis.com/language/translate/v2?key=自分用のキー"
val q = "&q=" + java.net.URLEncoder.encode("こんにちは", "utf-8");
val eToJ = "&source=ja&target=en"
val api = url + q + eToJ
val source = Source.fromURL(api, "utf-8")

val str = source.getLines.mkString

val some = JSON.parseFull(str)

// Any型で返ってくるので、キャスト
val result = some.get.asInstanceOf[Map[String, Map[String, List[Map[String, String]]]]]

result("data")("translations")(0)("translatedText")
source.close

解説

仕様は以下に書いてあります。

Developer's Guide (v2): Using REST - Google Translate API - Google Code

GoogleAPIはGoogleのアカウントを取得して(Gmailなどでも可)申請を出すことでりようできるようになります。

その際、自分用のキーをもらえますので、上記のソースコードに置き換えてください。

うーん、いちいちキーもらったりするのは面倒ですね。もっとお手軽なAPI探してみます。

ScalaでTwitterタイムライン検索

新しい言語の勉強を初めようと入門書を読むと文法は分かるけど、結局どう使っていいかわからない、らしい。

言われてなるほどと思ったので、入門書に載ってる(であろう)内容だけでTwitterのタイムライン検索をやってみました。

import scala.io.Source
import scala.xml.XML

val url = "http://search.twitter.com/search." // TwitterSearch
val format = "atom"                           // XML形式で取得
val q = "?q=scala"                            // 検索キーワード"Scala"
val lang = "&lang=ja"                         // 日本語
val rpp = "&rpp=10"                           // 最新10件の検索(max100)
val api = url + format + q + lang + rpp
val source = Source.fromURL(api, "utf-8")
val xml = XML.loadString(source.getLines.mkString)
// XML.save("timeline.xml", xml, "utf-8")

for(elem <- (xml \\ "entry" \ "title")) {
  println(elem.text)
}
source.close

TwitterAPIについては、

[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)

こちらのページが詳しいです。検索ならOAuthでの認証も必要なので気軽に試せます。

簡単な解説

scala.io.Source

scala.io.Sourceは入門書ではローカル上のファイル入出力にしか使ってないことが多いですが、.fromURLでネット上のデータにも簡単にアクセスできます。

言語によっては同じ関数で読み込めたりしますが、Scalaのように明示的に指定できる方が読みやすくて好み。

XML

source.getLinesで一行ごとにIteratorとして読み込んで.mkStringで文字列に変換。

その文字列をXML.loadStringの引数に渡すことでXML.Elemを生成できます。

あとは、XML.Elemのメソッド\や\\を使ってscala.xml.NodeSeqとしてヒットした順番に格納されるので、それをfor文で回して.textメソッドで要素に囲まれてるテキスト部分のみを出力してるだけです。

ね、簡単でしょ?

人にプログラミングを教えようとするとき、相手にとって興味を引かれる対象がバラバラなので、こうした入門書の内容だけでできるちょっと楽しいことをたくさんストックしておくのは大事かもしれないですね。