memcached-toolが無いときにmemcacheのキー一覧を持ってくるスクリプト

いや、memcached-tool使おうよって話なんだけど
サーバーに手が出せないことってあってですね・・・・

#!/bin/sh
SLEEP_INTERVAL=0.1
MEMCACHED_HOST=localhost
MEMCACHED_PORT=11211
sh -c 'echo "stats items"; sleep '$SLEEP_INTERVAL' ; echo "quit"' | telnet $MEMCACHED_HOST $MEMCACHED_PORT 2> /dev/null | grep number | sed 's/^STAT items\:\(.*\)\:number \(.*\).*/echo "stats cachedump \1 \2" ; sleep '$SLEEP_INTERVAL'/g'  | sh | telnet $MEMCACHED_HOST $MEMCACHED_PORT 2> /dev/null | egrep '^ITEM'

IE9で表示崩れするが、開発者モードを立ち上げると表示崩れがなくなる。

IE9で表示崩れがおきると報告を受けたけど 自分のIE9(開発者モード立ち上げ時)では表示崩れが起きないという事例。

実行されているjavascriptのコードにこんなコードがあり

"use strict"

...

if(console.log) {
  ...
}

IE9ではconsole APIに対応していないらしく、console自体がundefinedだったため
このコードの実行時にエラーが出てしまい、以後の整形を行うスクリプトが実行されずに
表示崩れを起こしているというオチでした。

厄介なところは開発者モードだとconsoleが定義されて
正しく動いてしまうというところ。

  1. IEの開発者ツールからスクリプトデバッガを起動
  2. 開発者ツールを閉じる
  3. IEを閉じる
  4. IEを起動
  5. 該当のページを表示する

という手順を踏んで、スクリプトでエラーが起きたら
エラーダイアログが表示されるような状態にしてページを表示することによって
やっと原因が突き止められた。

参考:

そういえば、はてブロって最近は埋め込みのリンクなんか貼れるようになったんですね。 便利な世の中になったもんだ

Ubuntu14.04でThinkPadのキーボードを使うときの設定

/usr/share/X11/xorg.conf.d/20-thinkpad.confを作成して以下を記述

Section "InputClass"
    Identifier "Trackpoint Wheel Emulation"
    MatchProduct "TrackPoint"
    MatchDevicePath "/dev/input/event*"
    Driver "evdev"
    Option "EmulateWheel" "true"
    Option "EmulateWheelButton" "2"
    Option "Emulate3Buttons" "false"
    Option "XAxisMapping" "6 7"
    Option "YAxisMapping" "4 5"
EndSection

この14.04

.bashrcに以下を追加。

# デフォルトは以下
# pointer = 1 2 3 4 5 6 7 8 9
xmodmap -e 'pointer = 1 7 3 4 5 6 2 8 9'

デフォルトの設定で
8,9はChromeの進む、戻る(逆かも。)に割り当てられていて
2はターミナルでの貼り付けに割り当てられているみたい。

とりあえず、使い道がわかっていない7をもともと2があった位置に置いて
センターボタンで何かしらのアクションが行われないようにしている。 7がどこかで使われていたら6あたりを割り当ててみる。
割り当て無しってできないのかな?

~/.Xmodmapに書けばいいとかいう記述を見たけど
やり方がよくわからなかったのでとりあえずこれでお茶を濁す。

参考URL

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1282956482 http://d.hatena.ne.jp/hiro_nemu/20101024/1287898287

Drupalのタブを新しく追加する方法

f:id:cyubachi:20140424144134p:plain

↑こんな感じに追加する方法。

$item = array(
  'link_path' => 'sandbox',
  'link_title' => 'sandbox',  // リンクのタイトル
  'menu_name' => 'main-menu', // main-menuに追加
  'module' => 'mymodule',
  'router_path' => 'sandbox'
);
menu_link_save($item);

.installファイルのhook_installあたりに書いておけば、
モジュールをインストールするとタブが新しく作られるなんて事も出来そう。
消し方はまた別途調査。

追記:
モジュールインストール時に実行する際は
router_pathに存在するパス(自身のものでもいいらしい)を設定しておかないと
ちゃんと登録されなかった。

メニューの消し方

  $menuItem = menu_link_get_preferred('sandbox', 'main-menu');
  menu_link_delete($menuItem['mlid']);

追記:
モジュールのinstall時、enable時に有効にする方法。
hook_modules_enabled時にメニューを構築してやる。

function mymodule_modules_enabled($modules){
  if(in_array('mymodule', $modules)){

    menu_rebuild();               // この段階でメニューを構築する。

    $item = array(
      'link_path' => 'sandbox',
      'link_title' => 'sandbox',  // リンクのタイトル
      'menu_name' => 'main-menu', // main-menuに追加
      'module' => 'mymodule',
      'router_path' => 'sandbox'
    );
    menu_link_save($item);
  }
}

なんか、menu_rebuild()で最初にモジュール特有のメニューを
menu_routerに登録してやらないと孤立したメニューとみなされて
登録したメニューが消されてしまい、正しく登録できないみたい。

調べるのに4-5時間くらいかかった。Drupalツレーなー。

カスタムモジュールを定義する際の.infoファイル内のfiles[]

.infoファイルに

files[] = test.inc

と書いた場合にはクラスかインターフェースの宣言しか
読み込まれないらしい。
フツーのfunction読もうとしたら「そんな関数ねーから」って怒られた。

参考:

https://drupal.org/node/542202#files

Windows8にknife-soloをインストールする。

win32-apiのくだりでハマって2時間ほど消費。
下のサイトがどストライクで役に立った。
マジでありがとうございます。
それにしても、Windowsrubyってホントにつらい。

参考:

http://ict.matchy.net/2014/04/windows-vagrant-knife-solo-20144.html

4/21追記:

  1. ruby,Devkitは32ビットのものでないと成功しない模様。
  2. bundle install時にmakeがないといわれて怒られる場合は
    rubyのdevkitをインストールして実行してみる。
    それでも怒られる場合はdevkit展開ディレクトリにある
    devkitvars.batを実行してから再度実行してみる。大体これでうまくいくはず。