Hatena::ブログ(Diary)

ぽひゅっとメモ このページをアンテナに追加 RSSフィード Twitter

2011-09-14

ロジクールのワイヤレスマウスM305から、M325にマウスを変えた

[価格.com - ロジクール Logicool Wireless Mouse M305rGN [グリーン] 価格比較]
http://kakaku.com/item/K0000172116/

[価格.com - ロジクール Logicool Wireless Mouse M305rPK [ピンク] 価格比較]
http://kakaku.com/item/K0000172118/

この2つが、まだM305rを名乗らず、M305の時代から使っています。
会社と家用で。


それまでは有線マウス使ってたから、ワイヤレスって実に快適。
レシーバ超ちっちゃいし。


先日家用のが壊れてしまって、マウスホイールが暴走してしょうがなかったので買い換えることにしました。

まずはカカクコムトレンドをチェック(笑)

条件としては、
「3000円以内に買える手ごろで評判よさげなマウスが欲しい。
コードレス(ワイヤレス)で、出来れば小さめ。
大きすぎず、小さすぎずのもの。電池は1本が良い。」
って感じ。


昔はM518(有線マウス)も使ってたんですが、どうも使いこなせなかったですね。
ボタンいっぱいイイ!って感じで、またある程度ボタン多いの使いたいですが、
小さいテーブルにギリギリ乗るくらいの状態でノートPCを使っていて、
かろうじてマウス乗せられるくらいなので、有線&大きめマウスは選べない。


ここにM305は本当に良かった。
初ワイヤレスだったので、他と比較は出来ないけれど、手にフィットするし良いサイズ・重さだし。
強いて言えば、電池の減りは結構早かった気がする。

普通はON/OFF細かくちゃんと切り替えるのかな?
常時ONで、3ヶ月もすれば電池切れてた気がする。
単3電池1本で、結構使ってコレだからいいほうなのかもしれないし、悪いのかもしれない。


なんだかんだ、3台目M305も視野に入れつつ検討して3つピックアップ。


[価格.com - バッファロー BSMLW09SBK (ブラック) 価格比較]
http://kakaku.com/item/K0000097017/
満足度2位。


[価格.com - バッファロー BSMLU13RD [レッド] 価格比較]
http://kakaku.com/item/K0000278201/
新しい。

[価格.com - ロジクール Wireless Mouse M325 M325DS [ダークシルバー] 価格比較]
http://kakaku.com/item/K0000243496/
安定のロジクールかつ、M305の上位種。


この3つに絞って、ポイントそれなりにあった新宿ヨドバシへ。
1個目は無かった気がする。
2個目は触ってみたら中身空っぽなんじゃないの?ってくらい凄く軽くて、大きさはいいけど落としたら壊れそうなので却下。
3個目はあったので、安定のロジクールへ・・・。

無難が一番だよ・・・。
世の中新技術より枯れた技術、手を出して知ってる物や情報があるほうが安心だよ・・・。



ヘタレ精神前回で、M325を買ってきた。

使った感覚は、他所でレビュー見てたとおり、
マウスホイールの回転に抵抗がなく、カタカタ感もない。
恐ろしくスムーズに回って、気持ち悪いというか慣れない。
空転するような感じで軽くスムーズに回る。

指でものすごく回転するように弾くと、ヒュゥゥゥーン!って回る。
ミニ四駆か!!って感じ。

大きな金属の輪に、小さな金属の輪が何個か付いてて回転させるおもちゃか!!!(調べたら「ジターリング」というらしい)

ってくらいヒュゥゥーーン!キュゥゥゥーーーン!!って回せる。
空転という表現が伝わるだろうか。
ある意味カタカタマウスが壊れたかのような感じである。

そのくらい抵抗ない。
M305はちゃんと抵抗・摩擦があって、段階ごとにカタカタいうようなよくあるマウスだったので、今のところこれが慣れない。


ロジクールじゃ、「なめらかホイール」とか「ウェブ用ホイール」とか言うらしい。
その割りにキュゥゥーーーン!!と超回転させても、思ったほど超スクロールはしない。
超微調節が可能なマウスと思ったほうがイメージは近い。



あと、
M305のチルトホイール(ホイールで左右)操作すると、デフォルトは左右スクロールだったんだけど、
M325のチルトホイールは左右でブラウザの戻ると進むが割り当てられてる。

この辺が違い。
後はマウスパッドも同時に変えた事もあり、動かしてマウスの移動距離だのスピード感だのはあんまり違いを感じていない。
そりゃ変わるよねって感じですわ。



やっぱり長年使ったM305が馴染んでたこともあって、M305は良マウスだと思う(使った分の思い出補正は多分ある)。
M325は電池の持ちが伸びてるらしいので、常時電池ONで1本で5ヶ月くらい持ったら幸せ。


どうでもいいこと1:ブラウザバックの反対って何ていうんだろう。ブラウザ・・・フォワード?w

どうでもいいこと2:USBマウスレシーバをマウスに収納出来る機構(電池蓋開けた中)になっていた構造に、2年以上経って始めて気がついた・・・


よし、寝よう。

プログラム用フォント Ricty

ちょうど今日(日付的には昨日9/14)、はてブで見た記事。

[あなたがプログラミングの時に利用しているフォントは?というアンケートをTwitter上でやってみた - プログラマ 福重 伸太朗 〜基本へ帰ろう〜]
http://d.hatena.ne.jp/japanrock_pg/20110913/1315928183

ここで紹介されているRictyを、その1・2週間前に導入して試してみた。
これは確かに見やすい。

普段フォントを気にせずプログラミングしてたけど、何か良い感じ。


ただ、Windowsで生成するのは結構難しい。
そのために名前だけ聞いたことのあるCygwinに手を出して、俺PC上級者(笑)な感じになってみたりもした。

まず公式
[プログラミングフォント Ricty]
http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html
ここで生成スクリプト(シェルスクリプト)が手に入る。


参考にしたのはこちら
[Windowsプログラミングフォント「Ricty」を導入してみた | webox blog]
http://blog.we-boxes.com/web-technic/introduced-ricty-windows/


[RictyをWindowsで生成した。 InconsolataからOpenTypeをGET... - LLL]
http://nkmrgk.tumblr.com/post/6138454144/ricty-windows-inconsolata-opentype-get


LinuxとかMac使ってる人なら割と用意ですが、
Windowsで作るのは結構難度が高い上に、綺麗に表示させるためにGDI++と併用して、補正をかけないとフォントサイズを少し大きくしないと厳しい制約がかかります。

しかし、できるとウヒョー!!!!!ってなれます。


再配布禁止なのが痛いね。
やってみたいけど、どうすれば・・・って人にアドバイスくらいならできるかもしれない。

真偽値の判定に、tinyint(1)を使うか、bool,boolean型を使うか、bit(1)を使うか、enumを使うか

MySQLレベルでの話。

最近SQLの細かい挙動とか、しっかり把握しきれてないなーとか、
一度覚えたことが年が経ってあやふやになってるところが多くある。
また勉強し直したい。


RDBMSとうか、KVSだのNoSQLだのDBのシステムによって大きく違うと思うけれど、
私はMySQLとちょっとPostgreSQLとかSQLiteとか触ったくらいなしょっぱい男です(先の言い訳)。

主に扱うのはMySQLで、そのくらいしかついていけません(わかるとは言いません)。


MySQLってそうなんだ〜。Oracleだとこうなんだよー、きゃははー」とか言われても、しょんぼりとしかしません。


本題。


Rails使ってると、マイグレーションファイルでDBのテーブル定義して、
rake db:migrateでマイグレーションファイルを元にテーブルが作成されちゃう。
ここで使うDBによって、うまいこと作られる型に差異がある。

参考は

[Ruby on Rails: データ型一覧&DB対応表 - kosuke-komiya.info/wiki]
http://kosuke-komiya.info/wiki/index.php?RubyOnRails_Types

[ActiveRecord と実際のDBの型の対応を確認する - @sugamasao.blog.title # => ”コードで世界を変えたい”]
http://d.hatena.ne.jp/seiunsky/20101220/1292813809

この辺とか。


しかし思う。

tinyint(1)って、MySQLのDriverとかActiveRecordがtrue/falseに変換してるだけで、
実際±127(符号無しなら0〜255)まで入れられるよなーと。
8ビット(1バイト)ですね。


確か記憶だと、
bool, booleanは、内部的にtinyint(1)になるエイリアスみたいなもんだった気がする。

[MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.2 カラム型]
http://dev.mysql.com/doc/refman/4.1/ja/column-types.html


TINYINT[(M)] [UNSIGNED] [ZEROFILL]

非常に小さな整数。符号付きの範囲は -128 〜 127。符号なしの範囲は 0 〜 255。


BIT , BOOL , BOOLEAN

いずれも TINYINT(1) のシノニム。 シノニム BOOLEAN はバージョン 4.1.0 で追加された。

ブール型の完全な処理は SQL-99 に基づいて導入される。



[MySQL :: MySQL 5.1 リファレンスマニュアル :: 10.1.1 数値タイプの概要]
http://dev.mysql.com/doc/refman/5.1/ja/numeric-type-overview.html

こっちは5.1の数値リファレンス



あれ?bit(1)もtinyint(1)と同じなの?
またまたー。


最近、bit(1)だったら正しく真偽値持ってるような意図になるんじゃないの?って疑問視してたらこれだよ・・・。


調べてったらbooleanの検証があったのでご紹介。

[MySQL5.1のboolean型を検証 | 1000g]
http://1000g.5qk.jp/2010/11/15/mysql5-1%E3%81%AEboolean%E5%9E%8B%E3%82%92%E6%A4%9C%E8%A8%BC/

tinyint(1)と同じになって、
・NULL
・0(where句でcolumn = falseで引っかかる)
・1(where句でcolumn = trueで引っかかる)
・2〜127(true,falseで引っかからない)
が挿入出来るみたい。
認識に違いは無かった。


さて、bitはどうなんよ?ってことで試すことにした。


そもそもRailsで非対応の型どうすんの?って場合はこちらも参考に。

[Rails の Migration で MySQL の型を指定する | METAREAL]
http://www.metareal.org/2008/02/06/using-mysql-data-types-in-rails-migration/


class CreatePepsi < ActiveRecord::Migration
def self.up
create_table :pepsies do |t|
t.column :coke, :"CHAR(64)"
t.column :jolt, :SMALLINT
...


こんな感じにすると非対応の型でも出来るみたい。




ちょっと単純にいきたいので、まずはMySQLで直接作る。

CREATE TABLE bit_test(
id int(11),
bit1 bit(1),
bit64 bit(64)
);


PRIMARY KEYは?とか、ストレージエンジンは?とかは簡単な例って事で省略。
どうでもいいけれど、全部小文字で昔は書いてたけれど、
「命令文の予約語は大文字にして、変数やテーブル名、列名を小文字にするとプログラム上で見てて区別が付きやすい」
と前職の人が言っていて、確かにと納得して区別するようになった。

続いてデータ挿入。

INSERT INTO bit_test VALUES(0,0,0);
INSERT INTO bit_test VALUES(1,1,1);
INSERT INTO bit_test VALUES(2,2,2);

ERROR 1406 (22001): Data too long for column 'bit1' at row 1


bit(1)だと、2を保存しようとしたらData too longになる。
これはカラムのデータ保存領域がちゃんと1bitになってるのかな?
そんなわけないか、バイト単位でしか保存されないのかな。

その辺内部構造までは理解が至らないものの、
tinyint(1)やbooleanと違って、
「2が保存できない」事を確認した。


SELECT * FROM bit_test WHERE bit1 = true;
SELECT * FROM bit_test WHERE bit1 = false;
SELECT * FROM bit_test WHERE bit64 = true;
SELECT * FROM bit_test WHERE bit64 = false;


これも思い通りの結果が返って、
真偽値で保存されていて、それ以外は保存出来ない手応えを得た。


適当にRailsアプリケーションを新規作成。

mkdir bit_test_app
cd bit_test_app
rails bit_test
cd bit_test

ruby script/generate model BitTest


RAILS_ROOT/config/database.ymlを開いて編集

development:
adapter: mysql
database: bit_test_dev
user: xxxxx
password: xxxxx

rake db:create 実行。

続いてRAILS_ROOT/db/に出来たマイグレーションファイルを開いて編集

class CreateBitTests < ActiveRecord::Migration
def self.up
create_table :bit_tests do |t|
t.column :bit1, :"BIT(1)"
t.column :bit64, :"BIT(64)"
end
end

def self.down
drop_table :bit_tests
end
end

と編集し、rake db:migrateを実行。

MySQLクライアントで、SHOW CREATE TABLE bit_tests;を実行して、bit型になっていることを確認。

mysql -uxxxxx -pxxxxx
USE bit_test_dev;
SHOW TABLES;
SHOW CREATE TABLE bit_tests;

CREATE TABLE `bit_tests` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bit1` bit(1) DEFAULT NULL,
`bit64` bit(64) DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Railsのコンソールを立ち上げる。


ruby script/console

>> BitTest.create
=> #<BitTest id: 1, bit1: nil, bit64: nil>

>> BitTest.create(:bit1 => 1)
=> #<BitTest id: 2, bit1: 1, bit64: nil>

>> BitTest.create(:bit1 => 0)
=> #<BitTest id: 3, bit1: 0, bit64: nil>

>> BitTest.create(:bit1 => 3)
=> 激しくエラー。bit(1)に3を保存して、Data too longだと思う。

>> BitTest.create(:bit64 => 3)
=> #<BitTest id: 4, bit1: nil, bit64: 3> #bit(64)なら3は保存可能

>> BitTest.create(:bit1 => true)
=> #<BitTest id: 5, bit1: true, bit64: nil>

>> BitTest.create(:bit1 => false)
=> #<BitTest id: 6, bit1: false, bit64: nil>


>> require "pp"
=> []

>> pp Bittest.find(:all, :conditions => ["bit1 = ?" true])
[#<BitTest id: 2, bit1: "\001", bit64: nil>,
#<BitTest id: 5, bit1: "\001", bit64: nil>]
=> nil

>> pp Bittest.find(:all, :conditions => ["bit1 = ?" 1])
[#<BitTest id: 2, bit1: "\001", bit64: nil>,
#<BitTest id: 5, bit1: "\001", bit64: nil>]
=> nil


>> pp Bittest.find(:all, :conditions => ["bit1 = ?" false])
[#<BitTest id: 3, bit1: "\000", bit64: nil>,
#<BitTest id: 6, bit1: "\000", bit64: nil>]
=> nil



いい感じ。でもStringが返ってるね。


>> Bittest.find(:first, :conditions => ["bit1 = ?" true]).bit1
"\001"
=> nil

>> Bittest.find(:first, :conditions => ["bit1 = ?" true]).bit1.class
String
=> nil


非常にマッチする記事を見つけた。


[MySQLのBIT型 - LazyLoadLife]
http://d.hatena.ne.jp/babie/20080717/1216286789


unpackとかpackすれば、intに出来るとのこと。

bit(1)なら、true・falseに使えて2以上保存出来ない(エラーが起きる)し、
ちゃんと0/1,true/falseで検索も出来るので問題ないといえばないけれど、ややこしい。

仮に1000万レコードあったとして、
内部構造的に、tinyint(1)より容量が少なかったり、selectのパフォーマンスが良いなら使うのもいい気がした。



タイトルに入れたけどenumは普段使う事が無くて、最近目にしてるだけで書いただけでした。
正確にやりたければそれがいいと記事では見たけれど、普段使わないのでわからず!



以上、Railsにおける非対応カラムの作成と、
MySQLRailsにおけるtinyint(1)、bool、boolean、bit(1)についてのまとめでした。

pikとPry

最近また書いていなかった・・・

最近やったことで3記事くらい書こうかな。

[Railsでも利用可。irbよりも便利な対話型コンソール「Pry」 - MOONGIFT|オープンソースソフトウェア紹介を軸としたITエンジニアWebデザイナー向けブログ]
https://www.moongift.jp/2011/08/20110812-2/

以前から試してみたかった、上記を入れてみた。

Windows環境(pikで1.9.2と1.8.7切替出来る環境下)で試しました


gem update #必要に応じて

gem pik install #pikでRubyバージョン切り替えたい人(WindowsLinuxならRVM。使ったことも入れた事も無いけど)
pik -v #pikのバージョン
pik ls #pikに入ってて切り替えられるリスト
pik ls -r -V #pikのバージョンと、そのバージョンで入れられるRubyのバージョン一覧
pik install 1.9.2-p290 #1.9.2を入れたいときはこうする



pik sw 187 #pikによってインストールされているRubyのバージョンを切り替える
ruby -v #切り替わったか確認する
gem list #1.8.7で入れたgem listがわかる
gem install pry
gem install pry-doc
gem list #確認
pry #pry起動


1.9.2も入れてたり、1.9.2でやる場合はこう

pik sw 192
ruby -v
gem list
gem install pry
gem install pry-doc
pry #pry起動



pryでは、

.コマンドが出来る。
ドットに続けてlsとかでコマンドが打てる。
irbでsystem("ls")とかやるのを、
.ls で出来る感じ。
.cd ディレクトリとか。

Windowsでもコンソールに色がつく。
irbの色づけはうまくいかなかったので、少し感動。

cd Pryとかで範囲を切り替えられる。
lsとかpryコマンドが色々あるみたい。


Pryで凄いと思ったのは、Rubyの実装コード、C言語レベルの実装コードを見れる所。

rubyの実装コードを見るときは
show-method method名

C言語レベルの実装コードを見るときは
show-method Object#extend とか。ただしこちらにはpry-docが必要。


使ってみた疑問点が下記
・pry用のirbrcを作れるのか?
windowsのコンソール上でバックスペース打つとirb以上に色々怪しい(readlineの問題か?)
・a = (1..10).to_aは出来るが、a = (1..100).to_aが出来なかったり
 methodsが出来なくてエラーが出る。
local_variable outputなんたら。
 windowsDOSコマンドにlessがないせいか?


なんか挙動が安定しなかった。
私の環境だけかな?

LinuxとかMax向けなのかも。
涙をのんでgem uninstallした(゚ーÅ)