Vortex ViBE has come

youtubeで動画見てると右側にいろいろおススメの動画が表示されるじゃないですか。たまたまCPUとか自作系の動画を見てたら、Vortex ViBEという良さげなキーボードのレビュー動画が出てきて英語で何しゃべってるのかあんまり分かんなかったけど(^^;;;;

「あ、これ欲しいな~・・・」と。この変態的キー配列が・・・イイ!

通販サイトで売ってんのかな・・・?と思っていろいろググってみたけど、結局海外の通販サイトしかなくて、注文するの躊躇すること1か月・・・。たまたまヤフオクで検索してみたら・・・出品されてた! あと22時間で終わる! 今のところ一人も入札居ねぇ・・・・ってことで速攻でちょっと高めに入札して待ってたらギリギリで落札(ホッ) 発送に1週間かかるって書いてあったけど、3日ぐらいで送ってくれた。

前置きが長くなりましたが、会社に持って行って使い始めてみました。いままでHHKB使ってたので、若干慣れが必要でしたが、数時間で慣れた(^^

とりあえず上から横から裏から附属キートップ。

NUMキー、CAPSキーを押すとLEDが光るはずだけど、光らず・・・ハズレを引いたか・・・と思ったけどファームウェアを更新したら正常に動作した!!!

プレートにLEDらしき光源。

製品名でググってみたけど、日本の人がレビューされているのが一つしか見つからず、英語記事ばかり。海外サイトで新品だと140~150ドルぐらい。送料とか考えると1万8千円ぐらいになってしまうかも・・・テンキー付きでこのキー配列だとあまり需要がないかもしれませんね。

早速使ってみた感じ、高さというか、そのままだと指を置いた時、かなり打ちづらい。しょうがないので、消しゴムを両面テープで貼り付けて傾斜を調整(^^;;;

それと、ホームポジションが分かりにくい・・・。F・Jキーのくぼみが若干深い程度なので慣れるのに時間かかりそう。F/JキーだけESCキーみたいにラッカーで真っ赤に使用するか、ちっさい突起を接着剤でくっつけようかな・・・。

スイッチは CherryMX 赤軸。東プレ製品を使っていた時の打鍵感がなく、スコスコスコッっていう感じで入力してる!って感じがあまりしない・・・。でも・・・僕的にこれもアリかな。しばらく使ってみよう。

一点、惜しむらくは、USBコネクタが HHKBと微妙に違う・・・ケーブル使いまわせるかなと思ってたんですけど・・・思惑が外れ、HHKBは MiniBタイプ で Vortex ViBEは MicroBタイプ・・・。海外はMicroBが主流なのか????

壊れやすし

机の上にFostex PM0.3(白)を置いて、Fostex PC100USB-HR(USB-DAC)経由で音を出しているのですが、このボリュームコントローラ兼USBDACがよく壊れる・・・。これで3回目。
1回目は、HR(ハイレゾ)版じゃかった無印 PC100USB が PCとのリンクが突然切れてリンクしなくなった。
2回目は、HR版に買い替えて半年ほどで1回目と同じく前触れもなく突然USB接続出来なくなった。
そして、今回3回目。。。
今度は、OUTPUTのRCA端子のR側から音が出なくなった・・・。ミニプラグ用のOUTPUTは正常に出力されているので、たぶん配線が切れたかなんかだろうか・・・?

こんなに壊れる製品も珍しい(^^;; 普通ならもう他の製品に乗り換えるところですが・・・Foxtexのボリュームコントローラって小さくて使いやすいし、デザインが好きなんですよね・・・。

ってことで? 同じ色を探したけど、壊れた型番のやつはディスコンで、PC100USB-HR2とのこと・・・が、同じ色(シルバー)がない!!!似たようなシャンパンゴールドってのがあるみたいですが・・・ゴールドは好かんし、結局黒色買う。

左が壊れた HR、右が買いなおした HR2。

筐体の寸法、ネジ位置が同じみたいなので、ガワだけ取り替えたろうかな・・・。

iOS版chromeで・・・

備忘録

iPhoneでサイト見るときは、主にchrome使ってます。
iOS10(だったっけ?)から <meta name=”viewport”>に user-scalable=no とか、maximum-scale=1 とか設定されてても、mobile safariではピンチアウトで拡大できるようになったと思うんですが、iOS版chromeだと拡大できませんでした・・・。なんか設定あるのかなーーーー。
小さい字が見づらい時があるので、拡大できないのは不便・・・その時はURLをsafariにコピペして safariで開いて見るんですが・・・メンドクサイ・・・。

いちいちメンドクサイので、ブックマークレット作って登録しておく。

ブックマークレット本体

(function()
  {
    var col=document.getElementsByTagName('meta');
    for(var k in col)
    {
      var name = col[k].getAttribute('name');
      if(name && name.match(/viewport/i))
      {
        var content = col[k].getAttribute('content'); 
        col[k].setAttribute('content',content.replace(/,?user-scalable=\w+/g,'').replace(/,?maximum-scale=[\w\.]/g,''));
        break;
      }
    }
  }
)();

要は、metaタグのviewportから、user-scalable,maximum-scaleを削除するだけ。

で登録用にミニファイしたのは、

javascript:(function(){var col=document.getElementsByTagName('meta');for(var k in col){var name=col[k].getAttribute('name');if(name && name.match(/viewport/i)){var content=col[k].getAttribute('content');col[k].setAttribute('content',content.replace(/,?user-scalable=\w+/g,'').replace(/,?maximum-scale=[\w\.]/g,''));break;}}})();

登録用

PHPでのExcel吐き出しCSVファイルの処理

何度となくハマったPHPでのCSV処理・・・もういやだ。
最初は、fgetcsv で setlocaleし忘れでハマり、改行を含むセルでSplFileObjectを知り、SJIS-WIN でハマり・・・もういやだ。

もうCSVで涙目になるのは嫌なので、一個クラスを作る。

要はCP932エンコードされたCSVファイル用の SplFileObject が欲しい!ってことなんですけどね。
マルチバイト用のSplFileObject、mb_SplFileObjectみたいなもの標準で入れてくんないのかな・・・。

ってなわけで?、
SplFileObjectから派生したクラスを定義。ついでに、read / readAll / each メソッドを追加。これは自己満。
コンストラクタでCP932なCSVファイルを引き受けて、UTF-8に変換した作業用ファイルを作成して、デストラクタで消去。
はじめは file_get_contentsで一気に変換しようかと思ったが、巨大サイズのファイルを渡されるとmemory_limitに引っかかるので・・・(^^;
/usr/bin/nkf とか /usr/bin/iconv とかに丸投げしようかと思ったけど、Windows環境だとメンドーだし。

とりあえず、 jQuery のeachみたいな感じのものが欲しかったので・・・

<?php
//エクセルから排出したCSVは・・・
$csv = new Csv($csvpath); 

//CSVがUTF-8なら文字コード変換はスルーする
// というか、CSVファイルがUTF-8の場合は、SplFileObjectをそのまま使えばいいじゃん! ってことなんですけどね。
$csv = new Csv($utf8_csvpath,array('encoding' => 'UTF-8'));

//テスト出力
$csv->each(function($num,$i,$row) { printf("%03d : %03d : %s\n",$num,$i,$row[1]); });

クラス作るほどのものじゃないんだけどなー・・・・

<?php 
/*
  あんまテストしてない。動けばいいや的な。
*/
class Csv extends SplFileObject
{
  private static $DEFAULT_OPTIONS = array( 'remove' => false,
                                           'encoding' => 'SJIS-WIN',
                                           'mode'   => 'r');

  protected static function prepare(&$filepath,&$options)
  {
    $path = $filepath . '.utf8';
    $fout = new SplFileObject($path,'w');
    $fin = new SplFileObject($filepath);
    $fin->rewind();
    foreach($fin as $line)
      $fout->fwrite(mb_convert_encoding($line,'UTF-8',$options['encoding']));

    $fout->fflush();
    unset($fin,$fout);

    $filepath = $path;
    $options['remove'] = true;
  }
  
  protected $path;
  protected $options;

  // constructor & destructor
  public function __construct($csvpath,$options = array())
  {
    if(!is_array($options))
      throw new Exception("second argument is invalid type");
    $this->options = array_merge(self::$DEFAULT_OPTIONS,$options);
    $this->path = $csvpath;
    if(strlen($this->path) == 0)
      throw new Exception('CSV file path is required.');

    // change encoding...
    if(!preg_match('/utf-?8/i',$this->options['encoding']) && file_exists($this->path))
      self::prepare($this->path,$this->options);

    parent::__construct($this->path,$this->options['mode']);
    $this->setFlags(SplFileObject::READ_CSV);
  }
  public function __destruct()
  {
    if($this->options['remove'])
      unlink($this->path);
  }

  /**************************************************************************
    * read all and returns array of rows ( helper method )
  **************************************************************************/
  public function readAll($ignore_first = false)
  {
    return $this->read($ignore_first ? 1 : 0,-1);
  }

  /*********************************************************************
   * read and call $callable with CSV row.
   * $callable must be function with 3 arguments.
   * first argument is line number,
   * second argument is index number of loop,
   * third argument is array of row.
   *    placefolder:  function callable($linenumber,index,$row); 
   *  and if $callable returns -1, loop process is stop immediately.
  *********************************************************************/
  public function each($callable, $offset = 0)
  {
    return $this->read($offset,-1,$callable);
  }


  /***********************************************************************
   * read csv 
    if $length is -1, returns all. 
    if $callable is set, call $callable and return value num of calls
  ***********************************************************************/
  public function read($offset = 0,$length = 0,$callable = null)
  {
    $rv = false;
    if($length)
      {
        $is_call = $callable && is_callable($callable);
        $count = 0;
        $num = $offset;
        $ite = new LimitIterator($this, $offset, $length);
        foreach($ite as $row)
        {
          $num++;
          if(is_null($row[0]))
            continue;

          if($is_call)
            {
              if(!is_int($rv))
                $rv = 0;

              $result = call_user_func_array($callable,array($num,$count++,$row));
              $rv++;
              if(intval($result) < 0)
                break;
            }
          else
            {
              if(!is_array($rv))
                $rv = array();

              $rv[] = $row;
            }
        }
      }

    return $rv;
  }
}

なんやかんやでエディタ宗旨変え

いろいろあって転職を思案中。持病持ち・身障者オッサンの転職は正直厳しく難しい。後片付けしながら就活するか、雇用保険もらいながらダラダラとやるか・・・。年度内で一区切りしようと思っているけど、どっちにしろメンドっちーなー。

そんなことはともかく。。。

10数年以上、テキストエディタはxyzzyを使っていました。
なんの不満もなく、僕的には最強のエディタだと、自分に言い聞かせ(^^;使っていました。ここ最近は Linuxなどの非WindowsなOSをいじることが多くなって、そういう時は操作感が非常に似通っているEmacsを、と使い分けていたのですが・・・Emacsを使えないサーバーが多々あり、やむなく 端末上で vim を使う練習・・・というか修行をここ1年ほどしてました。

最近・・・xyzzy で CTRL-N,CTRL-P,CTRL-B,CTRL-F でカーソル移動するところを・・・気付けば J,K,H,L と、打ち間違うことが多発 トホホ(笑)

で!、なんの気なしに『Windows版のGUIなvim ってあるのかな・・・?』と探している自分が居まして・・・、Kaoriya版のWindows向けvimをインストールして、まずはシェルスクリプトを編集するときだけ、gvim を極たまに使っておりました。
この頃はまだ、xyzzy 最強ー、と思ってました。vimってやっぱ、使いにくい!!! なんだ、あの、ノーマルモードやら挿入モードやらコマンドモードやらを行ったり来たりめんどくせーーーー、って。

でも、amazonで買ったkindle版の解説本で紹介されていた、vim-surroundというプラグインを知り、このプラグイン、すげー、カッコやら引用符やら、波カッコの挿入、変更、削除が一発でできるやん!!!ってことにコロッと一目ぼれして、気づけば、ソースコードファイルの拡張子をレジストリいじって gvim に関連付けしてた(ーー;

僕的に↓良書。

でもWindows版 だと外部コマンド実行の時、コンソールウィンドウが開いてダサーーってなる。
んー、まぁ、このダサさもWindowsの味なんで・・・(^^;

あと、エディタで使うフォントでしっくりくるものが未だに見つからない。

それに英語配列以外のキーボードだと激しく使いづらい。。。まぁこれは慣れの問題だけども。

それと、vim使ってない時の他のアプリでテキスト入力するとき時で、入力が終わった後なんでもかんでもCTRL-[ をタイプしてしまうという謎の癖がついてしまった・・・orz