Cで未初期化のポインタ変数を使ってsizeofで確保すべきバイトを求めているコードがあって、実体が無いポインタを使ったsizeofの意味が一瞬分からなかった。サンプルコードは次のような感じ。

#include 

typedef struct {
    int test1;
    int test2;
    char *test3;
} test;

int main(void)
{
    test *ptr;
    printf("%lu\n", sizeof(*ptr));
}

この場合のsizeof(*ptr)はそのポインタが指す実体 (今回で言えば構造体testのサイズ) が計算される。ここまでは普通だが、その場合のポインタの指す実体は存在しない場合でも前述の通りsizeofはコンパイル時に計算されるので問題ないようだ。

なので、例えば

test *t_ptr = (test *)malloc(sizeof(*t_ptr));

のように使用する場合でも全く問題ない。へーへー

rureplをRuby2.1.0のるりまに対応しました。もしかするとるりまはまだ2.1.0に対応していないかもしれませんがしばらくは定期的に更新していきます。

合わせて、対応するRubyを1.9.3, 2.0.0, 2.1.0の3つに変更。ソースコードも若干修正をしてspec通してデプロイして完了。

るりまプロジェクトの皆さんいつもお疲れ様です。そのうち自分も何か貢献したいなぁ。

Herokuでのアプリケーションで使用しているデータベース上のデータをSQLite3等にダウンロードする場合、以前であればtapsというgemをインストール後に下記のコマンドを実行すればよかった。

heroku db:pull sqlite://<ファイル名> --app <アプリ名>

db:pull is not a heroku command

最近久しぶりにherokuコマンドを実行したところエラーが出てダウンロードが出来ない...そもそもdb:pullのコマンドがherokuから無くなっていた。どうやらdb:pulldb:pushはdeprecatedになってしまったようだ。

今後はpg:pullpg:pushを使ってねとの事だが、気軽にアプリを指定してローカルのsqliteにダウンロード出来ないのは面倒臭いなと思ってたら、どうやらpluginとして一応まだ使うことはできる模様。

heroku plugins:install https://github.com/heroku/heroku-legacy-taps.git

あとはいつも通り必要なGemを入れて終了。deprecatedなのがアレだけど一先良しとしよう。

helm-growthforecast.el

最近GrowthForecastを本格的に使い始めたのでEmacsから触れる用にhelm-growthforecast作ってる。 とりあえずグラフの絞込選択と指定秒数での自動更新ができてるので結構快適。

グラフが表示されるバッファはHelmGFモードがONになっててqで画面を閉じる、rで手動更新が定義されてる。

daic-h/helm-growthforecast

ScreenShot

設定のサンプル

(require 'helm-config)
(require 'helm-growthforecast)

(setq helm-growthforecast-url "http://example.growthforecast")

;; Query Params
(setq helm-growthforecast-complex-params
  '(("t" . "sh")
    ("sumup" . "0")
    ("border" . "0")
    ("legend" . "0")
    ("width". "300")
    ("background_color". "333333")
    ("canvas_color". "333333")
    ("font_color"."CCCCCC")
    ("axis_color". "666666")))

(setq helm-growthforecast-graph-params
      helm-growthforecast-complex-params)

そのうちbasic認証用の設定と、グラフの表示期間を簡単に切り替えれるようにしたい(してほしい)。

おわり

VimShellが動的プロンプトに対応しました(やばい)

[vim]【Vim Advent Calendar 2011】unite.vim でアニメーション【33日目】

いいね! zshでも設定してみましょう。

setopt prompt_subst
autoload colors; colors;
autoload -Uz add-zsh-hook

local RANDOM_COLOR=$'%F{$[1+RANDOM%7]}'

p_anim_counter=0
p_anim=(
    "(´ ・ω ・\` )"
    "(  ´ ・ω ・)"
    "(    ´ ・ω )"
    "(      ´ ・)"
    "(          )"
    "(・\`       )"
    "(ω ・\`     )"
    "(・ω ・\`   )"
)

function _precmd_anim () {
    psvar[1]=$p_anim[`expr $p_anim_counter % ${#p_anim[*]} + 1`]
    p_anim_counter=`expr $p_anim_counter + 1`
}
add-zsh-hook precmd _precmd_anim

local ANIM_PROMPT="$RANDOM_COLOR%1v%f"

PROMPT="$ANIM_PROMPT < "

やったね! 七色なのはオマケです。

前回のEmacsのレイアウトをtmux風に変更するrotate.elで、スクリーンショットをGIFアニメーションに変換した時、ImageMagickのconvertコマンドが手軽で簡単だったのでメモ。

  convert -delay 100 *.png output.gif

-delayの値は1が10ms、100だと1000msで1秒の感覚で画像が切り替わります。後は適当にスクリーンショット撮ってconvertで変換すれば手軽にGIFアニメーションを作成出来ます。

ImageMagickはもっともっと強力な画像加工が出来るんですがそれはまたの機会に ;)

Emacsの画面分割に関して、これまではid:shiba_yu36さんのemacsのwindow幅に合わせて、分割数を変えるを便利に使わせてもらっていました。ですが、コードを書いている時には等分以外にも結構頻繁にレイアウトを変更することが多いと思います。

画面のレイアウト管理系ではid:kiwanamiさんのe2wmが高機能で良さそうな感じでしたが、こまめにwindowを1つにしたり分割したりしているのでもう少し軽い感じのものを探していました。

理想はtmuxのペインのプリセットのレイアウトがぐるぐるまわるような奴が欲しかったのですが見当たらなかったため簡単な物を作成しました。

rotate.el

daic-h/emacs-rotate

機能はプリセットで用意されているレイアウトを現在分割しているwindowの数に合わせて切替えるrotate-layoutと、レイアウトはそのまま中のbufferだけをグルグル回すrotate-windowです。プリセットの種類はtmuxと同じ、

  • even-horizontal
  • even-vertical
  • main-horizontal
  • main-vertical
  • tiled

の5種類で、rotate-layoutという関数を実行するたびに上から順番にlayoutが切り替わります。自分は下記の様に設定してます。

  (require 'rotate)
  (global-set-key (kbd "C-t") 'rotate-layout)
  (global-set-key (kbd "M-t") 'rotate-window)

これで、C-tを押すと順番にレイアウトが切り替わっていき、M-tでレイアウトの中のバッファーが順番にまわります。単体ではしっくり来なかった、分割したwindowを黄金比で拡大してくれるroman/golden-ratio.elと合わせて使うと意外と良い感じかもしれない。

動作の様子

rotate-window

rotate-layout、2 window

rotate-layout、4 window

rotate-layout、9 window

MacbookAirの充電ができない日が最近続き、ついに昨日全く充電できなくなりました。

普段は会社のiMacに接続する必要がある場合は会社のSSHゲートウェイにトンネルを貼ってあとは画面共有で接続していたんですが、 Air使えなくても画面共有ってVNCならWindowsのVNCクライアントからでも接続できるからいいやと思っていたら、

画面共有以外のVNCクライアントから接続する場合はこの「VNC使用者が画面を操作することを許可」ってのをオンにしていないとダメらしい・・・

さすがにこれをオンにするために休日会社に行くのは本末転倒なので、SSHで接続することはできるのでCLIでオンにする方法をググってたらやっぱりありました。

  sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -access -on -clientopts -setvnclegacy -vnclegacy yes -clientopts -setvncpw -vncpw mypasswd -restart -agent -privs -all

この kickstart ってやつで色々操作できるみたいです。ちなみにオフにするには

  sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -deactivate -configure -access -off

ちなみにMacBookAirは今日渋谷のジーニアスバーいったらアップルケアなかったけど無償でアダプタくれました! : )

Gitについて今までわりと適当に把握してたけどいい整理になった。 特にmergeの際の動きでブランチやコミットオブジェクトについて前よりは理解できたと思う。

後、今回初めてKeynote使ってみたけどかなり使いやすかったので満足。

コードリーディングに最適!たった200行で作れるHTML5製テトリスのプログラミング学習ムービー | Chrome Lifeが面白そうだったので、Rubyで書いてみた。

200行テトリス

ソースコードはGithubから。

daic-h/tetris-rb 行数は200行ピッタリ。偶然()

イテレータの部分等でfor文で配列アクセスなんかやってられないので微妙に違いますが、だいたい元ネタの機能や実装方法なんかそのまま移してあります。

Continue reading...