TECH.KAZEOR.NET

Better Full Screen Mode on Cocoa Emacs 24.3

UbuntuのEmacsを24系に上げてelspの管理を全てELPA(package.el)に任せ始めたので,Macの方のEmacsも24系に上げることにした.現状の最新版24.3のインストール方法とOSX Lion Styleでないfullscreenの設定について.

Emacs 24.3インストール

軽く調べると,emacs-24.3.tar.xzを落としてきて,インラインパッチを当てて手動でビルドしている例が多い.パッチをあてる理由を理解していないため,今回は普通にbrewから入れる.問題に直面したら入れ直すことにする.

brewによるインストールは以下のコマンドだが,本家のgitから落としてくるのでとても時間がかかる.お急ぎの場合はオプション外すのが良い(が,そっちでは下記のfullscreenの設定は試していない)

1
brew install emacs --cocoa --HEAD --use-git-head

以下のどちらかのコマンドで/Applicationsにインストールされる.

1
2
brew linkapps
ln -s /usr/local/Cellar/emacs/HEAD/Emacs.app /Applications

Full Screen Modeの設定

23系ではns-toggle-fullscreenがありtop barも消してフルスクリーン化してくれるので最高だった. 24系ではns-toggle-fullscreenは無くなり,OSX Lion Styleのフルスクリーン(toggle-frame-fullscreen)が標準になってしまっている. toggle-frame-maximizedというのもあるが,top barは残ったままだし,maximizeが控えめで画面いっぱいに広がってくれない(全然maximizeじゃない!).

「改悪じゃねーか」と思っていたが,ns-use-native-fullscreenでtoggle-frame-fullscreenの挙動を変えられた.

init.el辺りに以下を書いておくと,toggle-frame-fullscreenが23系のns-toggle-fullscreenと同じ挙動をしてくれて幸せEmacs生活が再始動する.

1
(setq ns-use-native-fullscreen nil)

右上の矢印も消えてくれる.

How to Organize Repositories Cloned From GitHub

GitHubで見つけたレポジトリはいつも~/dev/githubにcloneしているのですが,最近雑然として扱いにくっくなっていました.

ユーザー毎に~/dev/github/<username>/<repo>と分けてみたり,よくアクセスするものは~/dev/github/<repo>と直下に置いてみたりしていて,かなり見づらくなっていました.特にユーザー名とレポジトリ名がごっちゃで見づらい.

そんなことに悩んでいるときに,丁度良いツールを見つけました.

GitHub のリポジトリを管理する小さいツール ghq - NaN days - subtech

基本はユーザー毎に~/dev/github/@<username>/<repo>にcloneして,直下にはシンボリックリンクを作成.ユーザ名に@が付いているので見やすい.これはいい!

以下蛇足

どうせならhubコマンドみたいに

1
ghq [-clone] yaeda/ghq

という感じでcloneできれば楽だなと思い,試しに実装してみたのですが

1
ghq [-cd] @yaeda/ghq

と混乱しそうで微妙です.やめたほうがいいかも.

Improved GitLab Public Mode

先日GitLabの4.1がReleaseされ,ついにPublic Modeが導入されました.LDAPや同じく4.1から追加されたSign-up Pageを合わせて使えば,GitHubっぽいものをInternalに作れるようになりました.

と思って4.1にアップグレードしたのですが,Public Modeと言っても,レポジトリのタイトルとclone用のurlがリスト表示されるだけでした.ソースコードやコミットログを見ることはできません.

そこで,最近Railsを勉強し始めたので,腕試しに以下の機能拡張をしてみました.

  • dashboardに”Public”というナビゲーションタブを追加
  • PublicなレポジトリにはReporter相当の権限で誰でもアクセス可能

こんな感じでタブが追加されます.

Screen Shot 2013-01-25 at 1.04.45

ソースコードは以下にあります.

yaeda/gitlabhq at improve-public-mode · GitHub

GitLabのコードは規模が大きいですが,かなり読みやすいです.綺麗なコードだったので,修正も少なくすみました.なかなか参考になります.

自分で手を入れ始めると可愛くなりますね.LET’S HAPPY GITLAB LIFE!

GitLab 4.1 - GITLAB Blog

Ajax Flow in Rails

ドットインストールのチュートリアルでブログシステムを作っているときに,ブログポストの削除リンクを以下のコードで実装した.

1
<%= link_to 'Delete', post, :confirm => 'Sure?', :method => :delete, :remote => true %>

:confirmは確認用ダイアログのテキスト,:methodはアクセスするHTTPメソッド,:remoteはajaxアクセスするかしないか,の設定.

これは次のように展開される.

1
<a href="/posts/1" data-confirm="Sure?" data-method="delete" rel="nofollow">Delete</a>

これだけではクリックしたら/post/1にHTTP DELETEでアクセスするようにはならない.疑問が残ったので調べてみると,jquery_ujs.jsというスクリプトで色々やっていた.

jquery_ujs.jsはGemfileでjquery-railsを設定していると直接読み込まれるようで,railsアプリケーションのディレクトリに見つけることは出来ない.私の環境だと~/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jquery-rails-2.1.4/vendor/assets/javascripts/jquery_ujs.jsにあったが,Githubのレポジトリ(rails/jquery-ujs · GitHub)かDeveloper Toolsなどで直接中身をみるのが早い.何故か圧縮されていないので簡単にコードを追うことができる.(因みにjquery本体も圧縮されていない)

data-methodについてはjquery_ujs.jsの185行目のhandleMethod以下で,data-methodに合わせてformを作ってsubmitしているのが分かる.

ちなみに,jquery_ujs.jsの149行目からのoptionの設定で,ajaxが成功したときにajax:successがtriggerされることが分かる.ここまできてようやく以下のようにして結果を取得できることが分かる.(ここでは削除に成功した項目をfadeOutで消している)

1
2
3
$('a[data-method="delete"]').on('ajax:success', function(e, data, status, xhr) {
  $('#post_' + data.post.id).fadeOut("slow");
});

古いバージョンはちょっと話が違うようだが,Rails 3.2ではjqueryが標準で利用できるようになっていて,jquery_ujsというライブラリでajax周りの実装が簡単に行うことができるようになっているのが分かった.Web Frameworkってすげー.

I Started Learning Ruby and Rails

ふとウェブサービスのアイデアが浮かんだので実装を考えていたら,Ruby on Railsで実装すると楽そうだということに気付き,RubyとRailsの勉強を始めました.

とりあえず,ドットインストールでRubyとRuby on Railsのレッスンを完了してみた.感じたことをつらつら

  • Ruby
    • =begin=endによるコメントやRational型が新鮮
    • 大文字宣言したらCONST定数になるの素敵
    • elseifでもelifでもなくelsifなのが間違えそう
    • end書くの面倒
    • i += 1は使えるがi++は使えない

  • Ruby on Rails
    • PythonでもFlaskしか使ったことないので,それに比べると機能盛り盛り
    • 便利な半面,ちゃんと中まで調べないと気持ち悪いし応用きかない
    • DBからクライアント側のjsまでいろいろと面倒をみているフレームワーク
    • いろいろとルールがあるので,複数人で大きなサービス作るような時は便利だと思う.

  • ドットインストール
    • 3分動画は見やすくてとても良い
    • Rubyのレッスンにシンボルの説明が無いので,Ruby on Railsのレッスン始めるといきなり面食らう.Ruby中級みたいなレッスンが必要.

いろいろ疑問点を調べながら,二日くらいかけて両レッスン終了.終了する頃には当初の目的であるウェブサービスの実装意欲は無くなっていましたとさ.

Git Protocol Access Over Http Proxy

Git protocol(git://) is the fastest way to access to a git repository. However, firewall sometime prevent this protocol.

Recently we can use ssh protocol instead of git protocol to the Github repositories. However many other git repositories don’t have such alternatives.

In that case, ‘corkscrew’ enable you to use git protocol over http proxy.

Install corkscrew.

1
sudo apt-get install corkscrew

Create a script called ‘git-proxy.sh’.

1
2
#!/bin/sh
corkscrew <proxy host> <proxy port> $1 $2

Setup environment variable called GIT_PROXY_COMMAND.

1
2
chmod 755 /path/to/git-proxy.sh
export GIT_PROXY_COMMAND=/path/to/git-proxy.sh

Another approach is using ‘socat’. I havn’t yet tried that so refer to the following links, please.

Customize Octopress Layout

タイトルが長く,iPhoneのブラウザで表示するとはみ出してしまうのが気になったので,レイアウトを修正してみた.

OctopressのレイアウトはSassで書かれている.sass/custom/_style.scssが最後にimportされるので,ここに書けばスタイルを上書きすることができる.

iPhone用にこんな感じにしてみた.

1
2
3
@media only screen and (max-device-width: 480px) {
    body > header { font-size: .85em; }
}

こんな感じになった.

BEFORE <--> AFTER

Untitled Untitled

とはいうものの (この画像のレイアウトもそうだけど)デフォルトテーマはちょっと微妙ですね.次はThemeでも変えてみるかな.

Custom Domain With Github Pages

yaeda.github.comのままではあれなので,持っているドメインを設定してみた. ここには技術的な話を書いていこうと思うので,tech.kazeor.netに設定.

Octopress側はDocument通りにCNAMEファイルを作り,git push

1
echo 'tech.kazeor.net' >> source/CNAME

VALU-DOMAIN側は以下のようにしてcnameを設定.最後のコンマを忘れずに.

1
cname tech pages.github.com.

この調子で今日からOctopressで一人Advent Calendarでもやるかな.

Hello Octopress!

引越し以来止めているブログですが,そろそろ復帰しようと思っています. 電源やバックアップなど様々なコストを考えて,サーバを外に出そうと思っていて,候補の一つとしてOctopressを試し中.

素のJekyllにしようかOctopressにしようかとても悩んだけれど,この間なら気軽にswitchできそうだなと思ってとりあえずOctopressで開始.

markdownで書けるのとてもいいですね.タイトルに!マーク(exclamation mark)を入れるときは以下の様な感じでエスケープが必要でした.

1
rake new_post\["Hello Octopress\!"\]