【レビュー】マイクロソフトのエルゴノミクスキーボードがいい感じ Sculpt Ergonomic Desctop(L5V-00022)

マイクロソフトが出している、スカルプト エルゴノミック デスクトップを人目見て衝動買いしてしまったのでレビュー。
 
 
まずは外箱。比較のため500円玉を置いていますが、結構大きいです。
 

f:id:watarisein:20160101194232j:image
 
中身の一覧。キーボード、キーボードの支え、マウス、テンキーに説明書が同梱されています。
 
f:id:watarisein:20160101194947j:image
 
 
キーボードの支えは、こんな感じで磁石でくっつきます。
 
f:id:watarisein:20160101195127j:image
 
くっつけると、手前から奥に向かって緩やかに下る格好になります。

f:id:watarisein:20160101195633j:image
 
マウスはまるっとしていて、とても持ちやすいです。光沢があるので、指紋が目立つかもしれないです。

f:id:watarisein:20160101195826j:image
 
裏面。スイッチは、カチッとスライドしてオンオフを切り替えるようです。

f:id:watarisein:20160101200322j:image
 
自分的にはあまり使わない気がしますが、テンキーです。フィルムもついています。

f:id:watarisein:20160101200435j:image
 
 
電源ですが、すべて電池です。蓋は磁石でついているので、交換は割りと手軽にできそうです。
 
キーボードの電池。単4が2本です。

f:id:watarisein:20160101200632j:image
 
マウスの電池。ちなみに、ここにレシーバーがついています。こちらは単3が2本。
 
f:id:watarisein:20160101200831j:image
 
 
試しに、14型のノートPCに接続してみました。特に自分でドライバをインストールすることなく、レシーバ(USB)を差すだけで使えました。
 

f:id:watarisein:20160101202318j:image
 
感じんの使用感ですが、長時間使っていても疲れにくいです。人体工学に基づいているというだけあります。
 
通常のキーボードですと、端のキーなどを押す場合など、手首を曲げる動作があると思います。私はそのせいで腱鞘炎に…
 
しかし、本キーボードではキー配列が指の長さに沿って扇状に配置されているため手首を動かさずにキーを打てます。

f:id:watarisein:20160101202902j:image
 
手前のクッションもいい感じに手首を支えてくれます。
 
 
マウスには戻るボタンがついていますが、進むボタンがないのが残念です。写真では見にくいかもしれませんが、windowsボタンの左側にあるのが、戻るボタンです。

f:id:watarisein:20160101203244j:image
 
windowsボタンを押すとスタートメニューが開くのは地味に便利です。
 
 
一番気にしていたこの形状ですが、使ってみると以外とすんなり慣れてしまいました。
 
マウスも手にしっくりきて、使いやすいです。
 
総合的にはお値段通りの満足度といった感じです。
 
ギークな見た目が好きなかたは是非

ページのトップへスクロールするボタンを実装する

まずはデモ

http://workshops.ddns.net/albums/show_pictures/70#

以下に、コピペでそのまま使えるコードを貼ります

<style type="text/css">
   #topbutton {
      /* ▼表示位置を画面の右下に固定 */
      position: fixed; /* ←表示場所を固定 */
      bottom: 18px;   /* ←下端からの距離 */
      right: 18px;    /* ←右端からの距離 */
      width: 7em;     /* ←横幅 */

      /* ▼最初は非表示にしておく */
      display: none;

      /* ▼配色・配置・文字の装飾など */
      background-color: #2525aa; /* ←背景色 */
      opacity: 0.75;             /* ←透明度 */
      border-radius: 24px;       /* ←角丸の半径 */
      text-align: center;    /* ←文字の位置 */
      font-size: 120%;       /* ←文字サイズ */
      font-weight: bold;     /* ←文字の太さ */
      margin: 0px;    /* ←外側の余白 */
      padding: 10px;  /* ←内側の余白 */
   }
   #topbutton a {
      /* ▼リンクの装飾 */
      color: white;          /* ←文字色 */
      text-decoration: none; /* ←下線なし */
   }
   #topbutton a:hover {
      /* ▼マウスが載ったときの装飾 */
      color: yellow;              /* ←文字色 */
      text-decoration: underline; /* ←下線あり */
   }
</style>

<p id="topbutton">
   <a href="#top" onclick="$('html,body').animate({ scrollTop: 0 }); return false;">▲TOPへ戻る</a>
</p>

<script>
$(function() {
   // スクロールしたときに実行
   $(window).scroll(function () {
      // 目的のスクロール量を設定(px)
      var TargetPos = 350;
      // 現在のスクロール位置を取得
      var ScrollPos = $(window).scrollTop();
      // 現在位置が目的のスクロール量に達しているかどうかを判断
      if( ScrollPos >= TargetPos) {
         // 達していれば表示
         $("#topbutton").fadeIn();
      }
      else {
         // 達していなければ非表示
         $("#topbutton").fadeOut();
      }
   });
});
</script>

以上

【Ruby On Rails】コントローラーのメソッドに直接APIを発行した際の引数の渡し方

以下コントローラーのメソッド

class Api::V1::AlbumsController < ApplicationController
  respond_to :json

  def get_params(selectedTags=["旅行", "観光"])
    if params[:tags].present?
      selectedTags = params[:tags]
    end
  end

end

デフォルトでselectedTags配列には["旅行", "観光"]が入るようにしている。 リクエスト時にtagを指定した場合は、その指定した値が入るようになっている。

以下、タグを指定した場合のリクエストURL

http://example.com/api/v1/albums/get_params?tags[]='テスト'&tags[]='test'

レスポンス例

BODY
[
  "'テスト'",
  "'test'"
]

タグを指定しない場合

http://example.com/api/v1/albums/get_params

レスポンス例

BODY
[
  "旅行",
  "観光"
]

ちなみに、routes.rbには以下のように記述しておく

get "api/v1/albums/get_params"

参考

Action Controller の概要 | Rails ガイド

ruby on railsで関連レコードを集計する

目的

例えば、以下の場合

models/Album.rb

has_many: pictures

models/Picture.rb

belogns_to: albums

Album.pictures_countでAlbumの持つPictureを取得できるようにする。

Gem

gem 'counter_culture'

モデルの構造

アルバムが複数の写真を持つイメージ

# vi app/models/album.rb

class Album < ActiveRecord::Base
  has_many :pictures, :dependent => :destroy
end

# vi app/models/picture.rb

class Picture < ActiveRecord::Base
  belongs_to :album
  counter_culture :album
end

カラムの追加

# rails g counter_culture Album pictures_count
# rake db:migrate RAILS_ENV=production

既存の状態を反映

# rails c -e production  # 例ではproduction環境
# irb(main):001:0> Picture.counter_culture_fix_counts

確認

# irb(main):002:0> Album.first.pictures_count
=> 4

ここで、Album.first.pictures.countで出力される結果と同じならOK

また、中間テーブルがある場合は、中間テーブルのモデルに以下のように記述する。

class RoutePicture < ActiveRecord::Base
  belongs_to :route
  belongs_to :picture

  counter_culture :route, column_name: "pictures_count"
end

参考

関連レコード数の集計(カウンターキャッシュ) - Qiita

http://wonderwall.hatenablog.com/entry/2015/08/16/225116

gitのエラー error: RPC failed; result=18, HTTP code = 200 の対応

Gitの整理をしてたら、Git Cloneできないものがあった。 エラーはこんなの

error: RPC failed; result=18, HTTP code = 200| 29.99 MiB/s      
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

gitでPOST通信のバッファ制限に捕まったみたい。 容量が大きすぎることが原因。

バッファーを増やすことで回避できる

# git config --global http.postBuffer 524288000

python エンコード指定でファイルに出力

pythonで日本語を扱っていると以下のようなエラーに遭遇することが多い

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

コーデックを指定することで、回避できる

ファイルに主力する場合は以下のようにする

import codecs

file = codecs.open('filename', 'ab', 'utf-8')
file.write(a + '\n')
file.close()

Google Mapでヒートマップを作成

Google Mapでヒートマップを作成する

Google Map APIを使うと、簡単にヒートマップを作成できます。

まずはサンプル

http://workshops.ddns.net/map/heat_map

さくっとサンプルコードを載せます

<div id="map_canvas"></div>
<script>

data =  [
{"Weight":31500,pos:[138.549837,36.534579]},
{"Weight":19600,pos:[138.552933,36.537296]},
{"Weight":4950,pos:[138.564714,36.461183]},
];


var data = gon.heat_map_data;

function initialize() {
    //地図初期化
    var initPos = new google.maps.LatLng(39.703531,141.152667); //地図の初期位置
    var myOptions = {
      noClear : true,
      center : initPos,
      zoom : 10,
      mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    var map_canvas = new google.maps.Map(document.getElementById("map_canvas"), myOptions);    



    //ヒートマップ用のデータの作成
    var bounds = new google.maps.LatLngBounds();
    var  pos, populations = [];
    for (var i=0; i < data.length; i++) {
    pos = new google.maps.LatLng(data[i].pos[0], data[i].pos[1]);
    populations.push({
        location : pos,
        weight : data[i].picture_num //ヒートマップの重み付けに使用するデータを指定(写真数)
    })
    bounds.extend(pos); 
    }
    map_canvas.fitBounds(bounds); //全てのデータが画面に収まる様に表示を変更

    //ヒートマップレイヤの作成
    var heatmap = new google.maps.visualization.HeatmapLayer({
        radius:25 //ヒートマップの各ポイントの大きさ
    });

    heatmap.setData(populations);
    heatmap.setMap(map_canvas);


}
google.maps.event.addDomListener(window, "load", initialize);
</script>

Googleは、Weightをサーバーサイドで計算することを想定しているようです。

参考

Layers  |  Google Maps Javascript API  |  Google Developers