<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4392387697402242411</id><updated>2012-03-02T07:35:32.244+09:00</updated><category term='auto-complete-clang'/><category term='linux'/><category term='C++'/><category term='Lisp Scheme'/><category term='Python'/><category term='clang'/><category term='emacs'/><category term='java'/><category term='linux emacs python suspend'/><category term='ajc-java-complete'/><category term='kernel'/><category term='emacs python'/><category term='Radeon Python Rademon'/><category term='auto-complete'/><category term='Radeon'/><category term='ubuntu'/><category term='Civ4'/><title type='text'>小人閑居して</title><subtitle type='html'>ぼろんじさんのBlog。140字じゃ足りないことのために。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2172098710740930735</id><published>2012-02-27T11:37:00.005+09:00</published><updated>2012-02-27T11:37:57.300+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='auto-complete'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Emacsのauto-completeの表示がおかしい</title><content type='html'>時々Emacsのauto-completeのポップアップが崩壊して困っていた。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-065HNDxu-VI/T0rql_bRteI/AAAAAAAAAHM/FMJt8UhKAsw/s1600/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://1.bp.blogspot.com/-065HNDxu-VI/T0rql_bRteI/AAAAAAAAAHM/FMJt8UhKAsw/s400/screenshot.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;こんな感じである。&lt;br /&gt;使えないわけではないけど見づらいのなんのってことで対策を調べてみた。&lt;br /&gt;&lt;br /&gt;ググってもTwitterで聞いてもわからなかった答えは、意外にもauto-completeの本拠地のGitHubで見つかった。&lt;br /&gt;&lt;a href="https://github.com/m2ym/auto-complete/issues/18"&gt;m2ym/auto-complete Renders incorrectly&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;要するにac-quick-help-delayを0にしてるのが問題だと。&lt;br /&gt;&lt;br /&gt;ここに書いてる通りに設定を書き直して……&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-scB0U9y7gSs/T0rqml3otRI/AAAAAAAAAHQ/or0ynih5N9w/s1600/Screenshot-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://2.bp.blogspot.com/-scB0U9y7gSs/T0rqml3otRI/AAAAAAAAAHQ/or0ynih5N9w/s400/Screenshot-2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;strong&gt;&lt;span style="font-size: x-large;"&gt;解決！&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;あっけない決着だった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2172098710740930735?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2172098710740930735/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacsauto-complete.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2172098710740930735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2172098710740930735'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacsauto-complete.html' title='Emacsのauto-completeの表示がおかしい'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-065HNDxu-VI/T0rql_bRteI/AAAAAAAAAHM/FMJt8UhKAsw/s72-c/screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-8992764913282047297</id><published>2012-02-25T22:12:00.001+09:00</published><updated>2012-02-25T22:12:25.514+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>.emacs晒し</title><content type='html'>Twitterで「EmacsでC++書きたい！」というひとがいたので自分のBlogを案内した。&lt;br /&gt;この際自分がどんな環境でEmacsを使っているか公開すべく、.emacsをそのまま張ってしまおうという考えに至ったのでさくっと貼っておく。&lt;br /&gt;&lt;br /&gt;&lt;script class="brush: elisp gutter:false" type="syntaxhighlighter"&gt;&lt;![CDATA[;;ロードパス(setq load-path (append   (list    (expand-file-name "~/.emacs.d/auto-install")    (expand-file-name "~/.emacs.d/auto-complete")    (expand-file-name "~/.emacs.d/ajc-java-complete")    (expand-file-name "~/.emacs.d/")    (expand-file-name "~/.emacs.d/groovy-mode")    )   load-path));;GCのタイミング(setq gc-cons-threshold 4096000);;画像を表示(auto-image-file-mode t);;最終行に自動的に新しい行を追加(setq require-final-newline t);;起動時のスプラッシュ画面を表示しない(setq inhibit-startup-screen t);;デフォルトのディレクトリ(setq default-directory "~/Documents/");;auto-complete-modeの設定(require 'auto-complete-config)(global-auto-complete-mode t)(add-to-list 'ac-sources 'ac-source-filename)(setq ac-quick-help-delay 0);;elisp-modeでのauto-complete(add-hook 'emacs-lisp-mode-hook   (lambda ()     (add-to-list 'ac-sources 'ac-source-symbols))) ;;auto-complete-clangの設定(require 'auto-complete-clang)(setq ac-auto-start nil)(ac-set-trigger-key "TAB")(defun my-ac-config ()  (setq-default ac-sources '(ac-source-abbrev        ac-source-dictionary        ac-source-words-in-same-mode-buffers))  (add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)  (global-auto-complete-mode t))(defun my-ac-cc-mode-setup ()  (setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources))  (setq ac-clang-prefix-header "~/stdafx.pch")  (setq ac-clang-flags '("-w" "-ferror-limit" "1")))(add-hook 'c++-mode-hook 'my-ac-cc-mode-setup)(my-ac-config);;対になっている括弧をハイライト(show-paren-mode t);;行数を表示(require 'linum)(global-linum-mode t)(setq linum-format "%5d");;外観を設定(line-number-mode 1)(column-number-mode 1)(display-battery-mode 1)(setq scroll-step 1)(if window-system    (progn      (set-frame-parameter nil 'fullscreen 'maximized)      (color-theme-initialize)      (color-theme-euphoria)      (add-to-list 'default-frame-alist '(alpha . 85))      (set-default-font "Monospace-13")));;改行の設定(global-set-key "\C-m" 'newline-and-indent)(global-set-key "\C-j" 'newline);;C++-modeの設定(add-hook 'c++-mode-hook   '(lambda ()      (progn        (c-set-style "ellemtel")        (setq c-auto-newline t)        (setq compile-command       (concat "g++ -Wall -W -std=c++0x "        (file-name-nondirectory (buffer-file-name)))))));;java-modeの設定(require 'ajc-java-complete-config)(setq ajc-tag-file "~/java_base.tag")(add-hook 'java-mode-hook   '(lambda ()      (progn        (ajc-java-complete-mode)        (c-set-style "java")        (setq c-auto-newline t)        (setq compile-command       (concat "javac "        (file-name-nondirectory (buffer-file-name)))))))(require 'auto-install);;shell-pop-elの設定(require 'shell-pop)(global-set-key [f8] 'shell-pop)(shell-pop-set-internal-mode "ansi-term")(shell-pop-set-internal-mode-shell "/bin/bash")(shell-pop-set-window-height 60);;twittering-modeの設定(require 'twittering-mode)(setq twittering-auth-method 'xauth);;Python-modeの設定(require 'python-mode)(add-hook 'python-mode-hook   '(lambda ()      (ac-python-mode-setup)      (setq indent-tabs-mode t)      (setq tab-width 4)))(add-hook 'python-mode-hook '(lambda () (require 'pycomplete)))(defvar ac-source-pycomplete  '((prefix "\\(?:\\.\\|-&gt;\\)\\(\\(?:[a-zA-Z_][a-zA-Z0-9_]*\\)?\\)" nil 1)    (candidates . ac-pycomplete-candidates)    (require . 0)))(defun ac-pycomplete-candidates ()  (pycomplete-get-all-completions (py-symbol-near-point) (py-find-global-imports)))(add-to-list 'ac-modes 'python-mode)(defun ac-python-mode-setup ()  (setq ac-sources (append '(ac-source-pycomplete)      ac-sources)));;groovy-modeの設定(require 'groovy-mode)(add-to-list 'auto-mode-alist '("\.groovy$" . groovy-mode))(add-to-list 'interpreter-mode-alist '("groovy" . groovy-mode))(add-hook 'groovy-mode-hook '(lambda ()          (require 'groovy-electric)          (groovy-electric-mode)));;compileを使った際に開くウィンドウの高さを設定(setq compilation-window-height 8);;org-modeの設定(require 'org-install)(setq org-default-notes-file "~/Documents/notes.org")(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))(define-key global-map "\C-cl" 'org-store-link)(define-key global-map "\C-ca" 'org-agenda)(define-key global-map "\C-cb" 'org-switchb)(add-hook 'org-mode-hook 'turn-on-font-lock)(org-remember-insinuate)(setq org-directory "~/Documents/")(add-hook 'remember-mode-hook 'org-remember-apply-template)(define-key global-map "\C-cr" 'org-remember)(setq org-remember-templates      '( ("Todo" ?t "** %^{What_to_do} %T\n %i\n %a" nil "Todo") ("Note" ?n "** %T\n %i\n %a" nil "Note") ("Book" ?b "** %^{Book_Title}\nAuther:\nPublisher:\nComment:\n" nil "Book") ));;buffer-listの設定(global-set-key "\C-x\C-b" 'electric-buffer-list)]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;こんな感じ。&lt;br /&gt;特にC++とかPythonとかの設定がちゃんとまとまってなくて見づらいけど"Done is better than perfect"ということで許してください。ヾ(゜w。ヽ三ノ゜w。)ノ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-8992764913282047297?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/8992764913282047297/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8992764913282047297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8992764913282047297'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacs.html' title='.emacs晒し'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2745523469509559445</id><published>2012-02-23T15:39:00.001+09:00</published><updated>2012-02-25T22:13:03.425+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajc-java-complete'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>【Emacs】ajc-java-completeの使いやすさと限界【Java】</title><content type='html'>&lt;a href="http://b0r0nji.blogspot.com/2012/01/emacsjavaajc-java-complete.html"&gt;こちらの記事でEmacsにajc-java-completeを導入して&lt;/a&gt;Javaのソースコードで補完をできるようにした。&lt;br /&gt;というわけで今回はこの機能で何ができるか確認してみようと思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script class="brush: java" type="syntaxhighlighter"&gt;&lt;![CDATA[System.o//ここでTABを押すとSystem.out//が補完される]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;このように標準のjava.langのメソッドは（当然ながら）補完できる。&lt;br /&gt;&lt;br /&gt;ではこんなのはどうだろう？&lt;br /&gt;&lt;br /&gt;&lt;script class="brush: java" type="syntaxhighlighter"&gt;&lt;![CDATA[Map&lt;String,List&lt;object&gt;&gt; hoge = new Map&lt;String,List&lt;object&gt;&gt;();//こんなMapを宣言するhoge.//ここでTABを押すとsize(),clear(),values(),等々が補完候補に現れる//importされていなければjava.util.Mapとjava.help.Mapをimportしてくれる//素晴らしい！でも……hoge.get().//ここでTABを押すとwait(),notify(),toString()等々しか補完候補に現れない……hoge.get().toString().//そしてここで補完を実行するとString型に応じた候補が出る]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;メソッドの戻り値に応じたメソッドを候補に出してくれてはいるものの、奥までたどってくれているわけではない。&lt;br /&gt;ここではget()がObject型なのでObject型に応じた候補しか出してくれていないようだ。&lt;br /&gt;&lt;br /&gt;クラスは？&lt;br /&gt;&lt;br /&gt;&lt;script class="brush: java" type="syntaxhighlighter"&gt;&lt;![CDATA[class MyThread extends Thread{    public MyThread(){super();}    public MyThread(String str){super(str);}    public void run(){}}//こんなのを宣言してMyThread t = new MyThread("hoge");//インスタンス作ってt.//ここで補完を実行すると……何も出ない！Thread.//ここで補完するといろいろ候補が出てくる]]&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;各種組み込みの型に応じた補完はできるけど、それ以外はだめ。&lt;br /&gt;継承したのも含め自分で定義したクラスのメソッド補完はできない。&lt;br /&gt;&lt;br /&gt;考えてみれば当然のことで、ajc-java-completeは使う前にTags.javaを使ってタグファイルを生成する。そのタグファイルを参照して補完してるだけなので（auto-complete-clangのようにリアルタイムにソースを解析してるわけではない）タグファイルにない自前のクラスは補完できないのだろう。&lt;br /&gt;&lt;br /&gt;じゃあタグファイル作るときにパス追加しちゃえばいいんじゃない？&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;その方法は今調べてるのでまた次回に……。&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;タグファイルを作るときに&lt;br /&gt;$ java -cp （追加するクラスパス）:. Tags&lt;br /&gt;とすればいいらしい。というかドキュメントに書いてた。ごめんなさい。&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2745523469509559445?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2745523469509559445/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacsajc-java-completejava.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2745523469509559445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2745523469509559445'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/02/emacsajc-java-completejava.html' title='【Emacs】ajc-java-completeの使いやすさと限界【Java】'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2797928906405141363</id><published>2012-01-31T19:40:00.000+09:00</published><updated>2012-02-25T22:13:23.802+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>【メモ】Emacsのcompileの利便性を上げる</title><content type='html'>Emacs、M-x compileでコンパイルを走らせられるのは常識中の常識。&lt;br /&gt;だけど毎回デフォルトのコマンドがmake -kなのがめんどくさい。毎度Makefileなんて用意しないしそもそもJavaのときはどーするんだ、と。&lt;br /&gt;&lt;br /&gt;そこでcompile-から始まるシンボルを見ていたらcompile-commandなるものがみつかって、どうやらこれをいじればいいらしい。というわけでぽちぽちと設定を書いてみた。&lt;br /&gt;&lt;br /&gt;やることは簡単。言語ごとのhookに引っかけてcompile-commandを設定すればいい。例えばJavaなら&lt;br /&gt;&lt;br /&gt;&lt;script class="brush: elisp" type="syntaxhighlighter"&gt;&lt;![CDATA[(add-hook 'java-mode-hook     '(lambda () (progn         (ajc-java-complete-mode)         (c-set-style "java")         (setq c-auto-newline t)         ;;ここからcompile-commandの設定         (setq compile-command               (concat "javac "                (file-name-nondirectory (buffer-file-name)))))))]]&gt;&lt;/script&gt;&lt;br /&gt;またC++ならこんな感じ。&lt;br /&gt;&lt;script class="brush: elisp" type="syntaxhighlighter"&gt;&lt;![CDATA[(add-hook 'c++-mode-hook   '(lambda () (progn       (c-set-style "ellemtel")       (setq c-auto-newline t)       ;;ここからcompile-commandの設定       (setq compile-command (concat "g++ -Wall -std=c++0x "                (file-name-nondirectory (buffer-file-name)))))))]]&gt;&lt;/script&gt;&lt;br /&gt;こんな感じでhookにひっかける他の設定に混ぜておけばおっけー。&lt;br /&gt;なにやってるかというと"コンパイルコマンド+半角スペース"と"今開いてるファイル名"をconcatで結合させてcompile-commandに代入してるだけ。&lt;br /&gt;……これを書いた後で&lt;a href="http://homepage.mac.com/zenitani/elisp-j.html#smart-compile"&gt;smart-compileというElisp&lt;/a&gt;があることに気づいたのはまた別の話。&lt;br /&gt;2月1日追記：Syntax Highlighterをつかってみた&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2797928906405141363?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2797928906405141363/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/emacscompile.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2797928906405141363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2797928906405141363'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/emacscompile.html' title='【メモ】Emacsのcompileの利便性を上げる'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-7138773972911445704</id><published>2012-01-30T00:20:00.001+09:00</published><updated>2012-02-25T22:13:44.768+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajc-java-complete'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>EmacsでJava～ajc-java-completeを使う</title><content type='html'>C++に続いてJavaもスマートな補完を実現すべく今度はajc-java-completeを試してみた。しばらく前に試したmalavar-modeはうまく動かなかったのさらに別のものを探した結果こちらにたどり着いた。&lt;br /&gt;&lt;br /&gt;まずは&lt;a href="https://github.com/jixiuf/ajc-java-complete"&gt;Githubからajc-java-complete&lt;/a&gt;をcloneしてくる。&lt;br /&gt;&lt;br /&gt;必要な作業はほんの少しだけ。&lt;br /&gt;1，auto-completeのpopup.elをajc付属のものに置き換える。&lt;br /&gt;&lt;br /&gt;2，Tags.javaを使ってタグファイルを作る。ファイルはユーザーディレクトリ直下に生成される。&lt;br /&gt;（javac Tags.javaでコンパイルしたあとでjava Tagsで実行すればOK）&lt;br /&gt;&lt;br /&gt;3，.emacsでajcにパスを通し、以下を記述する。&lt;br /&gt;(require 'ajc-java-complete-config)&lt;br /&gt;(setq ajc-tag-file "/home/ユーザー名/java_base.tag")&lt;br /&gt;(add-hook 'java-mode-hook 'ajc-java-complete-mode)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これでJava-modeでajcによる補完ができるようになるはず。&lt;br /&gt;ただ起動時に&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-Qmb8neeycFc/TyVh2JEkzkI/AAAAAAAAAGo/H7fBrkECyis/s1600/Screenshot+at+2012-01-30+00_03_15.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="72" src="http://4.bp.blogspot.com/-Qmb8neeycFc/TyVh2JEkzkI/AAAAAAAAAGo/H7fBrkECyis/s640/Screenshot+at+2012-01-30+00_03_15.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;「タグファイルでかいけど本気でロードするつもり？」と文句を言われる。&lt;/div&gt;無視してy。&lt;br /&gt;&lt;br /&gt;ではためしに使ってみるとすると……&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uqAL2-qW-6g/TyVh2EshUcI/AAAAAAAAAGw/b-rB1tvh5t0/s1600/Screenshot+at+2012-01-30+00_07_11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-uqAL2-qW-6g/TyVh2EshUcI/AAAAAAAAAGw/b-rB1tvh5t0/s1600/Screenshot+at+2012-01-30+00_07_11.png" /&gt;&lt;/a&gt;&lt;/div&gt;この状態でTabを押す。&lt;br /&gt;すると&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-esg7QJSqz1o/TyVh2dC41uI/AAAAAAAAAGs/nIINCzW-vto/s1600/Screenshot+at+2012-01-30+00_07_17.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://4.bp.blogspot.com/-esg7QJSqz1o/TyVh2dC41uI/AAAAAAAAAGs/nIINCzW-vto/s640/Screenshot+at+2012-01-30+00_07_17.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;こんな感じで候補が表示される。きっと便利なはず。&lt;br /&gt;&lt;br /&gt;実はJavaはあまりわからないのでひとまずここまで……&lt;br /&gt;&lt;br /&gt;(ノ゜w。)ノ｡oO（なんのためにJavaの環境整えてるんだ&lt;br /&gt;ヾ(゜w。ヽ)｡oO（4月から仕事で使うからだよ&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-7138773972911445704?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/7138773972911445704/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/emacsjavaajc-java-complete.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7138773972911445704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7138773972911445704'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/emacsjavaajc-java-complete.html' title='EmacsでJava～ajc-java-completeを使う'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Qmb8neeycFc/TyVh2JEkzkI/AAAAAAAAAGo/H7fBrkECyis/s72-c/Screenshot+at+2012-01-30+00_03_15.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-8628775089438940612</id><published>2012-01-27T14:34:00.002+09:00</published><updated>2012-02-25T22:14:20.479+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clang'/><category scheme='http://www.blogger.com/atom/ns#' term='auto-complete-clang'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>auto-complete-clangを用いてEmacsでC++のスマートな補完</title><content type='html'>ようやく『ストラウストラップのプログラミング入門』を読み終わった。入門なんていってるけど原題は"Principle and Practice"、「原則と実践」じゃないか！どこにも「入門」なんて書いてないぞ！&lt;br /&gt;&lt;br /&gt;……いえ、良い本でしたよ？おかげで最初の「C++わからん」の段階は突破できた気がします。上級者は上級者で「C++わからん」というそうですが。&lt;br /&gt;&lt;br /&gt;さて今回はEmacsでC++プログラミングをするための準備。&lt;br /&gt;普通のauto-complete-elではオブジェクトに応じたメソッドの補完や名前空間に応じた動的な補完、いわゆる「オムニ補完」ができない。オムニ補完というとvim！という気もするが今更vim派に転向する気もない。そこで調べたところclangの構文解析を使用したauto-complete-clangというelispがあることがわかった。しかしなかなかうまくいかなかったのでここにメモを残すことにする。&lt;br /&gt;&lt;br /&gt;使用した環境はLinux Mint12。Ubuntu11.10でも同様にできるはずである。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;用意した物&lt;/span&gt;&lt;br /&gt;&lt;a href="https://github.com/brianjcj/auto-complete-clang"&gt;auto-complete-clang&lt;/a&gt;&lt;br /&gt;&lt;a href="https://github.com/m2ym/auto-complete"&gt;auto-complete-el&lt;/a&gt;&lt;br /&gt;yasnippet&lt;br /&gt;clang&lt;br /&gt;llvm&lt;br /&gt;&lt;br /&gt;まずyasnippet、clang-2.9、llvm-2.9をインストールする。別に自分でコンパイルする必要はなく、aptでインストールできる。&lt;br /&gt;&lt;br /&gt;続いてauto-complete-elとauto-complete-clangを落としてくる。auto-complete-elはaptでもインストールでき、おそらくそちらでも動作するのでそちらを使ってもいいと思う。&lt;br /&gt;&lt;br /&gt;次は.emacsの編集。auto-complete-clangとauto-complete-elにパスを通すところは省略。&lt;br /&gt;あとは&lt;br /&gt;&lt;a href="https://github.com/brianjcj/auto-complete-clang"&gt;https://github.com/brianjcj/auto-complete-clang&lt;/a&gt;&lt;br /&gt;を参照してauto-complete-clangを使う設定をしていくだけ。国内のBlog記事ですでにいくらか紹介されているがどうもそれに従って書いても動かなかったのだ。&lt;br /&gt;最低限必要そうなのは以下の通り。&lt;br /&gt;&lt;br /&gt;(require 'auto-complete-config)&lt;br /&gt;(require 'auto-complete-clang)&lt;br /&gt;&lt;br /&gt;;;自動で補完画面を出すならt。補完キーを押すまで補完画面を出さないならnil&lt;br /&gt;(setq ac-auto-start nil)&lt;br /&gt;&lt;br /&gt;;;補完キー指定。お好みで。&lt;br /&gt;(ac-set-trigger-key "TAB")&lt;br /&gt;;;補完画面からさらにそのヘルプ画面が出るまでの遅延（秒）&lt;br /&gt;(setq ac-quick-help-delay 0)&lt;br /&gt;&lt;br /&gt;(defun my-ac-config ()&lt;br /&gt;&amp;nbsp;     &amp;nbsp; &amp;nbsp; (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))&lt;br /&gt;&lt;br /&gt;(add-hook 'c++-mode-hook 'ac-cc-mode-setup)&lt;br /&gt;(global-auto-complete-mode t))&lt;br /&gt;(defun my-ac-cc-mode-setup ()&lt;br /&gt;&amp;nbsp; &amp;nbsp; (setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources))&lt;br /&gt;&amp;nbsp; &amp;nbsp; (setq ac-clang-prefix-header "/プリコンパイル済みヘッダの場所/stdafx.pch")&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;br /&gt;&lt;br /&gt;(my-ac-config)&lt;br /&gt;&lt;br /&gt;なぜかオリジナルにはruby-modeやcss-modeのhookが書かれていたのでばっさり削除。そのあたりは必要に応じて。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;プリコンパイル済みヘッダについて。&lt;br /&gt;「&lt;a href="http://www.nomtats.com/2010/11/auto-completeelemacs.html"&gt;auto-complete.elを使ってEmacsで自動補完&lt;/a&gt;」によるとclangは補完のたびにヘッダファイルを解析しているので巨大なライブラリをincludeすると補完の度に待たされることになるらしい。しかしちゃんと対策はあり、よく使うライブラリをまとめたヘッダを作りそれをプリコンパイルしておくことでそちらを参照して補完を高速化することができるということだ。&lt;br /&gt;&lt;br /&gt;とりあえず標準ライブラリをごっそりincludeしただけのヘッダファイル（ここではhoge.hとする）を作り、前述の記事にならって&lt;br /&gt;&lt;br /&gt;# clang++ -cc1 -emit-pch -x c++-header ./hoge.h -o stdafx.pch&lt;br /&gt;&lt;br /&gt;を実行するとstdafx.pchが出力される。これにパスを通せばよい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下はサンプル画像。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Y46CFeYSJo8/TyIzEvlDL8I/AAAAAAAAAGI/Fa27_otSUQI/s1600/Screenshot+at+2012-01-27+13_58_55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Y46CFeYSJo8/TyIzEvlDL8I/AAAAAAAAAGI/Fa27_otSUQI/s1600/Screenshot+at+2012-01-27+13_58_55.png" /&gt;&lt;/a&gt;&lt;/div&gt;グレーのが補完画面。こんな風に出てくる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RroQDQ78KoI/TyIzETXv-mI/AAAAAAAAAGM/ff1EA1deU9k/s1600/Screenshot+at+2012-01-27+13_58_46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-RroQDQ78KoI/TyIzETXv-mI/AAAAAAAAAGM/ff1EA1deU9k/s1600/Screenshot+at+2012-01-27+13_58_46.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;右側の黄色いのがヘルプ画面。 setq ac-quick-help-delayで「補完画面である項目にカーソルを合わせてからその項目のヘルプが出るまでの遅延」。0でいい気もするし、別に表示されなくてもいい気もする。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kEEaeHeQR7M/TyIzEQm-eoI/AAAAAAAAAGE/maauCX70-rI/s1600/Screenshot+at+2012-01-27+14_01_16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-kEEaeHeQR7M/TyIzEQm-eoI/AAAAAAAAAGE/maauCX70-rI/s1600/Screenshot+at+2012-01-27+14_01_16.png" /&gt;&lt;/a&gt;&lt;/div&gt;こんなふうに名前空間stdに応じて補完も。&lt;br /&gt;ちなみに上のstd::vector&amp;lt;int&amp;gt;::iteratorもちゃんと補完できている。&lt;br /&gt;こんな書き方でvectorのループ回さないだろというツッコミはなしでお願いします。&lt;br /&gt;&lt;br /&gt;結論&lt;br /&gt;Eclipseなんていらなかったんy（手記はここで途切れている……&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-8628775089438940612?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/8628775089438940612/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/auto-complete-clangemacsc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8628775089438940612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8628775089438940612'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2012/01/auto-complete-clangemacsc.html' title='auto-complete-clangを用いてEmacsでC++のスマートな補完'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Y46CFeYSJo8/TyIzEvlDL8I/AAAAAAAAAGI/Fa27_otSUQI/s72-c/Screenshot+at+2012-01-27+13_58_55.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-6544734140052367150</id><published>2011-12-06T09:01:00.001+09:00</published><updated>2011-12-07T14:18:25.524+09:00</updated><title type='text'>「ぐへへお姉ちゃんパンツ何色」から始めるクラス解説</title><content type='html'>「ぐへへお姉ちゃんパンツ何色」はこれ以上ないほどオブジェクト指向であり、しかも理想的な実装をしていることに気づきました。これを用いてオブジェクト指向を説明してみようと思います。&lt;br /&gt;&lt;br /&gt;ある人が「ぐへへお姉ちゃんパンツ何色」と質問するのは、お姉ちゃんオブジェクトの保持するpants_color変数を取得しようとする手続きと見ることが出来ます。つまり&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;oneechan.pants_color&lt;/blockquote&gt;を取得しようとしているわけです。&lt;br /&gt;ではどうすればいいのでしょうか？&lt;br /&gt;&lt;br /&gt;考えてみましょう。直接パンツを見ればpants_colorを取得することができますね。&lt;br /&gt;クラスを使わないとすればこんな書き方が考えられます。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;struct oneechan{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pants_color;&lt;br /&gt;};&lt;/blockquote&gt;構造体でひな形を宣言します。そして&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;oneechan homuhomu;&lt;/blockquote&gt;こんな感じでしょうか。 ほむほむを宣言します。&lt;br /&gt;するとhomuhomu.pants_colorでほむほむのパンツの色にアクセスできます。&lt;br /&gt;しかしこれには致命的な欠点があります。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;homuhomu.pants_color = 0xFFFFFF;&lt;/blockquote&gt;……そう、色を勝手に変えられてしまうのです！&lt;br /&gt;たとえばこんなミスをしたらどうなってしまうでしょうか？&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;if(homuhomu.pants_color = 0x000000){なんかかんか}&lt;/blockquote&gt;&lt;span style="color: blue;"&gt;&lt;b&gt;パンツの色が黒かどうか確認しようとして、黒のパンツを履かせてしまうという致命的なバグを引き起こしてしまいます！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;b&gt;そのうえ構造体はその性質上、内部の値がすべてどこからでも参照できてしまします！&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;これは非常によろしくない。そのために、クラスです。&lt;br /&gt;クラスは「カプセル化」として隠蔽の仕組みを備えています。というわけでクラスを用いてひな形を作ってみましょう。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;class oneechan{&lt;br /&gt;private:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pants_color;&lt;br /&gt;};&amp;nbsp;&lt;/blockquote&gt;こうなります。&lt;br /&gt;パンツの色はプライベート変数になったため、&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;oneechan homuhomu;&lt;br /&gt;homuhomu.pants_color = 0x000000;&lt;/blockquote&gt;こんなコードを書いてもコンパイラが怒ってくれます。&lt;br /&gt;具体的に言うと「&lt;b&gt;&lt;span style="color: red;"&gt;お姉ちゃんのパンツの色はプライベートなのでアクセスできないぞっ（意訳）&lt;/span&gt;&lt;/b&gt;」と叱ってくれるはずです。&lt;br /&gt;これでお姉ちゃんのパンツの色を勝手に変更されてしまう問題は無くなったかに見えます。&lt;br /&gt;けれどももう一つ、別の問題が生まれたことに気づくでしょうか？&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp;std::cout &amp;lt;&amp;lt; std::hex &amp;lt;&amp;lt; std::showbase &amp;lt;&amp;lt; homuhomu.pants_color &amp;lt;&amp;lt; std::endl;&lt;/blockquote&gt;お姉ちゃんのパンツの色を16進数で表示してね！というと……再びコンパイラが「&lt;b&gt;&lt;span style="color: red;"&gt;お姉ちゃんのパンツの色はプライベートなのでアクセスできないぞっ&lt;/span&gt;&lt;/b&gt;」 と怒ります。そう、隠蔽されてしまったパンツの色を確認するにはどうしたらいいのでしょうか？&lt;br /&gt;&lt;br /&gt;こうしましょう。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;class oneechan{&lt;br /&gt;public:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int get_pants_color() const;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void set_pants_color(int color);&lt;br /&gt;private:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int pants_color;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int oneechan::get_pants_color() const {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return pants_color;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void oneechan::set_pants_color(int color) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; pants_color = int color;&lt;br /&gt;};&lt;/blockquote&gt;&amp;nbsp;パブリックにset_pants_color()メソッドとget_pants_color()メソッドを追加しました。&lt;br /&gt;パンツの色にアクセスするためにはこのメソッドを利用します。&lt;br /&gt;（2011/12/07追記：getterにはconstを付けるように！との指摘を受けました。ありがとうございます。）&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;homuhomu.get_pants_color()&lt;/blockquote&gt;これでパンツの色を取得できます。パンツの色はprivate なので「外部から勝手にアクセスする」ことはできません。しかしお姉ちゃん自身からは参照することができるのです。だからお姉ちゃんにいったん質問を投げ、値を教えてもらうという手順をふむのです。&lt;br /&gt;&lt;br /&gt;こうしてお姉ちゃんのパンツの色の安全は確保されました。&lt;br /&gt;&lt;br /&gt;C++においてクラスの変数は明示的にpublicを付けない限りprivateです。よほど熱心にパンツの色を公開しようとしているお姉ちゃんでない限り、スカートを身につけてパンツの色を隠蔽していますし、勝手に履き替えさせたりしてくれません。&lt;br /&gt;&lt;br /&gt;「ぐへへお姉ちゃんパンツ何色」という質問、これは非常に行儀のよい手続きです。まずお姉ちゃんはパンツの色をカプセル化して隠蔽しています。お姉ちゃん本人以外が勝手にアクセスすることはできません。&lt;br /&gt;質問者はそれを理解してお姉ちゃんのプライベートなパンツの色にアクセスするメソッドを「ぐへへお姉ちゃんパンツ何色」「ぐへへお姉ちゃん○色のパンツ履いて」と言って呼んでいるのです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;……ですが注意してください。oneechan::get_pants_color()が実際に何をするかまではわかりません。内部ではoneechan::call_police()と同じ処理をやっている可能性は高いとおもわれます。&lt;br /&gt;また、oneechan::get_pants_color()を利用する際には&lt;strike&gt;nullptrが返ってくる可能性、つまり「履いてません」エラーが出てくる可能性もあるということに……&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;（2011/12/07追記）&lt;br /&gt;nullptrはintに型変換されないのでコンパイルエラーになるとの指摘を受けました。しかしNULLだと0に変換されるので黒のパンツになってしまう……これもゆゆしき問題です！なんとかしなければ……次の記事までに理想的なお姉ちゃんクラスとパンツの色について考え直すことにします。&lt;br /&gt;&lt;br /&gt;まとめです&lt;br /&gt;・お姉ちゃんのパンツの色を表現するのに構造体を使ってはならない（お姉ちゃんは露出狂ではない）&lt;br /&gt;・お姉ちゃんのパンツの色はスカートで隠されている（隠蔽！）&lt;br /&gt;・基本的にお姉ちゃんの情報はprivate（public以外は隠蔽！）&lt;br /&gt;・privateな情報でもお姉ちゃん本人はアクセスできる&lt;br /&gt;・private変数にpublicなメソッドを使ってアクセスする&lt;br /&gt;・関数やメソッドの名前だけで内部の処理を見積もってはならない&lt;br /&gt;・お姉ちゃんは偉大。&lt;br /&gt;・白銀朱音は俺の姉（ry&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;クラスの重要さはお姉ちゃんのパンツにあらわれていました。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;以上！！！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-6544734140052367150?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/6544734140052367150/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/12/blog-post.html#comment-form' title='15 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6544734140052367150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6544734140052367150'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/12/blog-post.html' title='「ぐへへお姉ちゃんパンツ何色」から始めるクラス解説'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-3916501156528223663</id><published>2011-12-01T11:06:00.001+09:00</published><updated>2012-01-30T10:39:48.372+09:00</updated><title type='text'>EmacsをJava用に～malabar-modeを使う～</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;strong&gt;2012/1/30追記&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;後日ajc-java-completeについて扱い、そちらはしっかり動作したので単にEmacsにJava環境を導入したいという方は&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://b0r0nji.blogspot.com/2012/01/emacsjavaajc-java-complete.html"&gt;EmacsでJava～ajc-java-completeを使う&lt;/a&gt;&lt;/h3&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;をご覧ください。&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EmacsでJava開発を行う際のElispはJava-modeやJDEEかとおもっていたら、今はそうではないらしい。&lt;br /&gt;なるほどJDEEはかつては主流だったものの、Java5以降の文法に対応できていないまま開発が止まってしまっているとのことだ。&lt;br /&gt;なら代わりを探そう、ということで見つけたのがmalavar-mode、Linux Mint 12に導入してみたのでメモをのこしておく。&lt;br /&gt;&lt;br /&gt;最低限必要なパッケージ&lt;br /&gt;・Java（趣味でSun-java6を入れた）&lt;br /&gt;・maven2&lt;br /&gt;&lt;br /&gt;まず適当なディレクトリでmalavar-modeをチェックアウトする。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;git clone git://github.com/espenhw/malabar-mode.git&lt;/blockquote&gt;続いてこのディレクトリに展開されたpom.xmlを編集する。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&amp;nbsp; &amp;lt;properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;br /&gt;-&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;maven.version&amp;gt;3.0-SNAPSHOT&amp;lt;/maven.version&amp;gt;&lt;br /&gt;+&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;maven.version&amp;gt;3.0.2&amp;lt;/maven.version&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;lt;dependencies&amp;gt;&lt;/blockquote&gt;ここまで&lt;a href="http://www.hepo.jp/bbn/diary/?date=20110222"&gt;飼育係（べべ）日記&lt;/a&gt;こちらの記事を参考にした。&lt;br /&gt;&lt;br /&gt;これでmvn packageしたらビルドしてくれる……とおもったらそうはいかなかった。&lt;br /&gt;エラー文を見るとjava-6-openjdkがどうたらといっているのでどうやらデフォルトではSunのJavaを使うようになっていなかったらしい。&lt;br /&gt;というわけで&lt;a href="http://magicalrabbit.moe-nifty.com/diary/2011/01/serversmanvps-d.html"&gt;哀と欲望の日々。&lt;/a&gt;の記事を見て環境変数を設定。ついでに.bashrcにも書いておく。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;export JAVA_HOME="/usr/lib/jvm/java-6-sun/"&lt;/blockquote&gt;こうしたうえでmvn packageを実行したらビルドに成功した。 &lt;br /&gt;&lt;br /&gt;targetにできたZIPを回答してEmacsのパスを通し、さらにReadmeに従ってGroovyのパスを通せばおっけー。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;……なのだけど、まだ使い方はわかってないので詳しくはまた後で。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-3916501156528223663?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/3916501156528223663/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/12/emacsjavamalabar-mode.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3916501156528223663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3916501156528223663'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/12/emacsjavamalabar-mode.html' title='EmacsをJava用に～malabar-modeを使う～'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-8598757209186678655</id><published>2011-11-30T00:59:00.000+09:00</published><updated>2011-11-30T00:59:04.621+09:00</updated><title type='text'>L-04Cいじいじ</title><content type='html'>&amp;nbsp;・1年以上前にXperia（X10）を契約していた場合、機種代の2年縛りの解約料をキャッシュバックしてもらえるキャンペーン&lt;br /&gt;・Optimus Chat（L-04C）が投げ売り価格で機種変一括0円&lt;br /&gt;&lt;br /&gt;そう聞いたら居ても立ってもいられなくなってDoCoMoの安売り店にいってきました。そしてゲットしたのがこのOptimus Chat。&lt;br /&gt;&lt;br /&gt;これで予備が手に入ったとばかりまずXperiaにGingerbreadを入れる。これはあっさり成功。&lt;br /&gt;Xperiaの安定稼働を確認したので次にOptimus Chatを弄ることにした。&lt;br /&gt;しかしここで問題発生。さくっとフォント入れ替えたら文鎮になってしまった。&lt;br /&gt;調べてると復旧は楽らしい。そしてCyanogenのカスタムROMがあるらしい。&lt;br /&gt;&lt;br /&gt;というわけで入れたので、引っかかりそうなところだけメモ。&lt;br /&gt;1，文鎮になったときは&lt;br /&gt;http://www22.atwiki.jp/optimus-chat/pages/15.html&lt;br /&gt;焦らず騒がずこちらを参照して&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;div&gt; 649 ： SIM無しさん [sage] ：2011/08/28(日) 19:51:04.25 ID:on0RsQiK  &lt;br /&gt;Flashの夢は断たれましたが、昨日文鎮から復活できたんでその方法を書いておきますね。  &lt;br /&gt;（確実に復旧できる保証が無いので、最終手段で）   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; １．xdaからKDZ Updaterをダウンロード  &lt;br /&gt;ttp://forum.xda-developers.com/showthread.php?t=1060121   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; ２．LGのサイトからファームを落とす  &lt;br /&gt;ttp://csmg.lgmobile.com:9002/csmg/b2c/client/auth_model_check2.jsp?esn=の後ろにIMEIをハイフンなしで付けてアクセスするか、  &lt;br /&gt;ttp://csmg.lgmobile.com:9002/swdata/WEBSW/L04C/ANTTWV/V10d_00/V10D_00.kdz からダウンロード   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; ３．電源を落とした状態で、音量+/-を同時押し＋USBケーブルを挿入して黄色背景にUpdating...と表示されることを確認   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; ４．KDZ Updaterでファームを指定した上で、Typeに3GQCT、PhoneModeにRECOVERYを設定  &lt;br /&gt;CS-RECOVERYでもいけるかもしれない（要検証）   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; ５．Launch software updateボタンを押せば焼けるはず！   &lt;/div&gt;&lt;br /&gt;&lt;div&gt; これでdata以外のパーティションが焼けるため、復旧できるはず。  &lt;br /&gt;当然rootedの場合はroot化が解除されてるため、root化しなおす必要があります  &lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;これでOK。&lt;br /&gt;&lt;br /&gt;2，フォントを入れ替えるときは&lt;br /&gt;/system/fontsにDroidSansJapanese.ttfにリネームしたフォントファイルを投げ込めばOK、&lt;br /&gt;のはずなのだけどなぜか適用されない。&lt;br /&gt;MTLc3m.ttfのほうがDroidSansJapanese.ttfより優先順位が高いためらしい。&lt;br /&gt;こいつを削除して再起動すれば新しいフォントが適用される。&lt;br /&gt;僕は&lt;a href="http://hp.vector.co.jp/authors/VA039499/"&gt;ふい字&lt;/a&gt;フォントを使用することにした。 &lt;br /&gt;&lt;br /&gt;3，オーバークロック&lt;br /&gt;CyanogenModは改造カーネル入れてるのでオーバークロックができる。&lt;br /&gt;もちろん限界というものはあるが、それでも性能は大幅に向上する。&lt;br /&gt;&lt;strike&gt;もとがたった600MHzだしね。&lt;/strike&gt;&lt;br /&gt;限界は800MHzくらい。これを超えると不安定になって勝手に再起動が多発した。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qW0oCCjdCLk/TtUAluzmnKI/AAAAAAAAAFw/LBrg9DBwdsc/s1600/459416212.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-qW0oCCjdCLk/TtUAluzmnKI/AAAAAAAAAFw/LBrg9DBwdsc/s320/459416212.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;OCしてのベンチ結果はこんなかんじ。十分すぎるスコアだとおもう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;なぜOptimus Chatの記事だけ書いてXperiaのこと書かないのかって？&lt;br /&gt;Xperiaの記事はそこらじゅうに転がってるからね……&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-8598757209186678655?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/8598757209186678655/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/11/l-04c.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8598757209186678655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8598757209186678655'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/11/l-04c.html' title='L-04Cいじいじ'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qW0oCCjdCLk/TtUAluzmnKI/AAAAAAAAAFw/LBrg9DBwdsc/s72-c/459416212.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-4527253684968229744</id><published>2011-11-22T01:25:00.000+09:00</published><updated>2011-11-22T01:25:51.808+09:00</updated><title type='text'>PC貸し出し中につき</title><content type='html'>ノートパソコンをしばらく友人に貸し出すことにしたためLinux弄りはしばらく中断。&lt;br /&gt;帰ってくる頃にはLinux Mint12が登場しているだろうから、それを試すことにしよう。&lt;br /&gt;&lt;br /&gt;最近読んでる本。『ゲーデル・エッシャー・バッハ』。Lispのすばらしさを実感できる。&lt;br /&gt;以前Haskellは数学の言語ではないか、といったことがあるが、Lispは論理学の言語のように思える。&lt;br /&gt;&lt;br /&gt;……こんなことを言っているが、 Lispの毒にあてられたわけではない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-4527253684968229744?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/4527253684968229744/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/11/pc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4527253684968229744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4527253684968229744'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/11/pc.html' title='PC貸し出し中につき'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-3754095941749676290</id><published>2011-10-18T00:41:00.006+09:00</published><updated>2011-10-18T06:48:43.799+09:00</updated><title type='text'>Sabayonはじめました。あと疑似透過から本当の透過にすることとか。</title><content type='html'>ちょっとまえにGentooInstallBattle始めたけど、舌の根も乾かぬうちにGentooの派生ディストリビューションであるSabayon Linuxに手をだした。理由？ウチの環境だとUbuntu11.10が不調だったからですよ。&lt;br /&gt;&lt;br /&gt;さて、Sabayonとは。&lt;br /&gt;Gentoo Linuxをベースに作られた、いわゆる"全部入り"ディストリビューション。デスクトップ環境からオフィスまでしっかりそろっていてインストールしたらすぐに使えるほか、メディアセンター用のソフトも含まれており、USBブートでも使用できる。至れり尽くせり。&lt;br /&gt;&lt;br /&gt;標準デスクトップ環境はGnome……かとおもいきやKDE、XFCE、LXDE、Enlightment17のインストールCD（兼ライブCD）が用意されていて、しかもGUIインストーラはFluxboxで動いている上、どうやらGnome版でも自動でインストールされるあたりこれも事実上標準扱いされていると思っていいんじゃないだろうか。今回はGnomeを選択。&lt;br /&gt;&lt;br /&gt;特徴としてはパッケージ管理が2つ用意されていることがあげられると思う。&lt;br /&gt;一つはGentoo譲りのPortage。ソースをダウンロードして、自分の環境に合わせた設定でコンパイルしてインストールするもの。ただしこちらはあまり推奨されていない。&lt;br /&gt;もう一つはEntropy。Portageやaptの上を目指す独自の管理システムで、こちらは自前でコンパイルするものではなくSabayonのリポジトリからパッケージをダウンロードして、そのままインストールするだけのもの。Sabayonではこちらが標準とされている。&lt;br /&gt;&lt;br /&gt;さて、インストールは今時のディストリらしくGUIインストーラが用意されている。Gentooのことは言うな。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そしていつもの通りGnome-terminalを立ち上げいつも通りプロファイルを弄って透過に設定……そして気づく。&lt;span style="color: red;"&gt;これ、疑似透過じゃないか？&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;説明しよう、疑似透過とは！ターミナルが半透明になり後ろの画面が透けて見えるような気がしたけど実は壁紙を写してるだけだった！というものである！（説明不足&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;まあSabayon使うような人は知ってるだろうし調べに来る人もこの言葉くらい見つけるでしょう。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;というわけで解決策だけ載せておきます。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;Compizがインストールされていないならインストールした後に&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;gconftool -2 -s "/apps/metacity/general/compositing_manager" --type bool true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;を端末で実行する。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;すると画面が一瞬点滅し、本当の透過になっているはずだ。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;まずはここまで。後の細々したことはまた今度。&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-3754095941749676290?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/3754095941749676290/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/10/sabayon.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3754095941749676290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3754095941749676290'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/10/sabayon.html' title='Sabayonはじめました。あと疑似透過から本当の透過にすることとか。'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-4961195566728595911</id><published>2011-10-09T23:02:00.003+09:00</published><updated>2011-10-09T23:02:58.572+09:00</updated><title type='text'>PythonでFizzBuzz</title><content type='html'>TwitterでFizzBuzzが流行っていたみたい。&lt;br /&gt;以前可能な限り短くしようと考えたFizzBuzzコードを乗せてみる。Pythonで。&lt;br /&gt;&lt;br /&gt;for i in range(1,100):print "Fizz"*(i%3&amp;lt;1)+"Buzz"*(i%5&amp;lt;1)or i&lt;br /&gt;&lt;br /&gt;どういうことをやっているかというと&lt;br /&gt;・Pythonでは文字列型にかけ算ができる。たとえば"hoge"*2なら"hogehoge""hoge"*0なら""&lt;br /&gt;・i%3&amp;lt;1は評価されてBool型が返る。つまりTrueかFalseか。&lt;br /&gt;ちなみに普通ならi%3==0と書くところだが、長さを節約するためにこれを使用した。&lt;br /&gt;・PythonではBool型はTrue==1、False==0そのものである。&lt;br /&gt;たとえばTrue+1は2であるし、"fuga"*Falseは""である。&lt;br /&gt;・空文字列""はbool("")とするとFalseが返る。&lt;br /&gt;・orは先にTrueに評価されたオペランド型を返す。&lt;br /&gt;1 or 4なら1を返すし、5 or "hoge"なら5を返す。"foo" or 0なら"foo"である。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とまあこれだけPythonの仕様を濫用して書いてみたのだが、&lt;br /&gt;Code Golfのランキングをみるとさらに短いコードで書いた人がいるらしい。&lt;br /&gt;&lt;br /&gt;今日の結論。世界って恐ろしい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-4961195566728595911?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/4961195566728595911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/10/pythonfizzbuzz.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4961195566728595911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4961195566728595911'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/10/pythonfizzbuzz.html' title='PythonでFizzBuzz'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-7637653325806672509</id><published>2011-09-23T14:44:00.001+09:00</published><updated>2011-09-24T21:05:14.146+09:00</updated><title type='text'>Emacs-for-Pythonを使う</title><content type='html'>以前EmacsをPython用に設定する記事を書いた。&lt;br /&gt;正直言ってあれはめんどくさいし、うまく動かない。&lt;br /&gt;当時は勘違いしていたが補完はauto-completeが動いてるだけでPysmellは何もしていなかった。&lt;br /&gt;&lt;br /&gt;というわけでその後も補完用のライブラリ探していたのだが、つい最近Emacs-for-PythonというElispを見つけたので紹介する。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;これはなんのことはない、様々なElispをパッケージにして主にPython向けの設定を加えたものだが、これが非常に便利に仕上がっている。 むしろ過保護に思えるくらいだ。&lt;br /&gt;&lt;br /&gt;導入はいたって簡単。&lt;br /&gt;&lt;a href="http://gabrielelanaro.github.com/emacs-for-python/"&gt;emacs-for-python&lt;/a&gt; &lt;br /&gt;ここからダウンロードして適当な場所に解凍したうえで、.emacsに&lt;br /&gt;(load-file "/emacs-for-pythonのパス/epy-init.el")&lt;br /&gt;を書き込むだけ。&lt;br /&gt;&lt;br /&gt;そしてEmacsを再起動するとEmacsが全面的にemacs-for-python仕様になって起動する。&lt;br /&gt;&lt;br /&gt;しかし最初に過保護といったように、例えば……&lt;br /&gt;・C-x C-fでファイルを開くときIDOモードが使われる（これは趣味の問題？）&lt;br /&gt;・行のハイライトが自動でONにされる（カラーモードによっては見づらい）&lt;br /&gt;・括弧の自動補完が自動でONにされる（C-oでオートインデントしながら改行できるのでこれは便利）&lt;br /&gt;・行番号の表示が勝手に入れられる（僕は"%5d"にしてるのが"%4d"にされる）&lt;br /&gt;等々。ちょっとお節介気味。&lt;br /&gt;&lt;br /&gt;しかしこのEmacs-for-Python、全部普通のelispで書かれているうえ非常に簡単な文しか使われていないので自分で好きなように書き直せばよい。&lt;br /&gt;&lt;br /&gt;僕はepy-editing.elからhighkight current lineをまるごとコメントアウトし、lin numberingからlinum-formatの引数を"%5d"にしてIdoモードを止めた。&lt;br /&gt;その他の機能も他のElispの寄せ集め（Yasnippet、pymacs、pyflakes等々）なのでそれらのファイルを書き直せば好きなように動かせる。&lt;br /&gt;&lt;br /&gt;あとはファイルを開き、M-x rope-open-projectすると結構賢く補完をしてくれるようだ。&lt;br /&gt;詳しくはこれから調べるのでひとまず報告まで。&lt;br /&gt;&lt;br /&gt;2011/09/24追記&lt;br /&gt; ざっと中身のElispを読んで把握できた機能のうち大きそうなものをざっと並べておこうとおもう。使ったわけではないので詳しいことは勘弁していただきたい。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;入力補完&lt;/b&gt;&lt;br /&gt;・括弧とクォーテーションの始めを入力すると自動で閉じてくれる。()、[]、{}、""等。&lt;br /&gt;・Python-modeのときには"""hoge"""の三重クォーテーションも補完してくれる。&lt;br /&gt;・Auto-complete-el内蔵（何も考えずに実行される補完。Ada、Clojure、Java、Python、Tcl、C++、C、CSS、JavaScript、Ruby、Erlang、PHP、Schemeなどに対応）&lt;br /&gt;・YaSnippetを用いた補完（というか展開？）を内蔵。（C、C++、Perl、Sharp、Elisp、Erlang、XML、Objective-C、CSS、LaTeX、Python、Ruby、Scala、SQLなどに対応。ちょっとお節介気味）&lt;br /&gt;・PythonにおいてはRopemacsを用いた補完を用いることができる。Auto-completeよりは賢い。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;キーバインド&lt;/b&gt;&lt;br /&gt;・Eshellに独自のキーバインドを割り振っている&lt;br /&gt;・Copy、Cut、PasteのキーバインドをWindows風に&lt;br /&gt;・M-cで計算モード（？）詳細不明&lt;br /&gt;・C-Tabの挙動を変更（M-Tabがウインドウ移動に使われることとの兼ね合い？）&lt;br /&gt; ・Ropeのキーバインドを設定&lt;br /&gt;&lt;br /&gt;&lt;b&gt;その他&lt;/b&gt;&lt;br /&gt;・Flymake、VirtualEnv、eprojectなどを統合。&lt;br /&gt; ・とりあえず便利そうなelを統合してる。 &lt;br /&gt;&lt;br /&gt;全体を通してみると「とりあえずPythonで使うElisp全部まとめてすぐ使えるようにしました！」「あと便利そうなElispも統合しておきました！」という感じ。これ一つでEmacsをPython用に使うにはじゅうぶんな拡張ができる。（もちろん見ればわかるとおりそれ以外の用途にも使えるように作られている） その反面大量の設定を変更しているので、既に自分の.emacsを設定している人の場合は従来の設定と競合することも多いはず。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-7637653325806672509?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/7637653325806672509/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/09/emacs-for-python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7637653325806672509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7637653325806672509'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/09/emacs-for-python.html' title='Emacs-for-Pythonを使う'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-651806106314422482</id><published>2011-09-13T11:32:00.001+09:00</published><updated>2011-09-21T22:40:29.929+09:00</updated><title type='text'>Linux Mintでパッケージの自前コンパイル</title><content type='html'>以前カーネルコンパイルの記事を書いたが、そのとききっかけになったのはこのサイトである。&lt;br /&gt;&lt;a href="http://nippondanji.blogspot.com/2011/04/mysql-5530.html"&gt;MySQL 5.5をわずか30秒足らずでコンパイルするためのテクニック&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;この中にlibcやGCC、その他各種ソフトを環境にあわせてコンパイルすることで普段からの動作に高速化がはかれるという解説があり、この際なので試してみることにした。&lt;br /&gt;&lt;br /&gt;なおGCCの最適化オプション（後述のようにCFLAGSで指定する）はCPUによって異なるが、&lt;a href="http://en.gentoo-wiki.com/wiki/Safe_Cflags"&gt;Gentoo LinuxのWiki&lt;/a&gt;で詳細に解説がなされているのでこちらを参照するといいだろう。ページ最下部にCPUベンダーごとのリンクがある。&lt;br /&gt;&lt;br /&gt;今回はZacate（AMD E-350）なので&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;CHOST="x86_64-pc-linux-gnu"&lt;br /&gt;CFLAGS="-march=amdfam10 -O2 -pipe"&lt;br /&gt;CXXFLAGS="${CFLAGS}"&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;となる。&lt;br /&gt;見る限りAMDのK10アーキテクチャ（Phenom2世代）と同じオプションらしい。Zacateでは3D!Now命令が省略されたらしいがまあこんな骨董品使ってないということですね。&lt;br /&gt;&lt;br /&gt;あと-O（GCCの最適化オプション）は-O3に変更してみた。ただしOでは一部のコードでは正常に動作しなかったりコンパイルができなかったりすることもあるらしい。&lt;br /&gt;&lt;br /&gt;これを~/.config/dpkg/buildflags.confに次のように記述する。&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: inherit;"&gt;SET CFLAGS -march=amdfam10 -O3 -pipe&lt;br /&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;SET CXXFLAGS -march=amdfam10 -O3 -pipe&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;なお&lt;a href="http://twitter.com/fadis_"&gt;@fadis&lt;/a&gt;さんからの情報を以下に引用すると&lt;br /&gt;&lt;b&gt;-fstrength-reduce&lt;/b&gt;&lt;br /&gt;ループ内にあるループ内でやる必要の無い計算の移動(Oからすでに有効だった気がするからつけなくてもいいかも)&lt;br /&gt;&lt;b&gt;&amp;nbsp;fomit-frame-pointer&lt;/b&gt;&lt;br /&gt;必要ない場合フレームポインタの操作を省く。これによって関数の出入りが非常に多いプログラムでは若干パフォーマンスが向上することがあるが、バックトレースが使い物にならなくなってデバッグが困難になる&lt;br /&gt;&lt;b&gt;-ffast-math&lt;/b&gt;&lt;br /&gt;ANSI標準に準拠しない挙動になるとしても高速に計算が出来る方法を選択するようにする。ソフトウェアによっては正しく動作しなくなるので注意。&lt;br /&gt;&lt;b&gt;-fno-math-error&lt;/b&gt;&lt;br /&gt;高速な計算方法がうまくいかなかった場合のフォールバックを省く&lt;br /&gt;&lt;b&gt;-fstack-protector&lt;/b&gt;&lt;br /&gt;スタックにカナリアを挟んでスタック破壊による攻撃に強いバイナリを生成する。割と普段から付けておいた方が良いオプションだけど、一部のソフトウェアはこれを付けるとうまく動かなくなる(GRUBやglibc)&lt;br /&gt;&lt;br /&gt;等々というオプションがあるとのことである。&lt;br /&gt;&lt;br /&gt;ここまでが一般的な記述。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: orange;"&gt;ここからしばらくLinux Mint固有の問題。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;ひとつめ。&lt;br /&gt;Linux Mintは標準ではソースコードのリポジトリが無効になっている。まずはSynapticsでそれを有効にして……&lt;br /&gt;&lt;br /&gt;とおもったらそれでもソースを落とせない。&lt;br /&gt;&lt;br /&gt;そこでふたつめ。 &lt;br /&gt;何かおかしいと思って/etc/apt/source.listを覗いてみたらLinux Mintのぶんしかソースのリポジトリが登録されてないじゃないか！ということでUbuntuのぶんを有効にする。アドレスはコピペして先頭のdebをdeb-srcにするだけでおk。 &lt;br /&gt;&lt;br /&gt;これでUbuntuのリポジトリからソースコードを落とせるようになった。 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;ここから一般的な話に戻って&lt;/span&gt;&lt;/b&gt;あとは簡単 &lt;br /&gt;sudo apt-get build-dep パッケージ名&lt;br /&gt;これで目的のパッケージをビルドするのに必要なパッケージ類がインストールされる。&lt;br /&gt;次いで &lt;br /&gt;apt-get source -b パッケージ名 &lt;br /&gt;これで自動でソースを落としてコンパイルしなおしてパッケージにしてくれる。&lt;br /&gt;あとはそれをインストールするだけだ。 &lt;br /&gt;&lt;br /&gt;ただし問題もある。ご存じの通りコンパイルは非常に重い作業なので並列化が非常に有効なのだが、どうもこの方法では並列化を有効にするオプションがないらしい。&lt;br /&gt;&lt;br /&gt;そこでもう一つの方法。&lt;br /&gt;sudo apt-get build-dep パッケージ名&lt;br /&gt;ここまでは同じ。&lt;br /&gt;次いで&lt;br /&gt;apt-get source パッケージ名&lt;br /&gt;でひとまずソースだけを落とす。&lt;br /&gt;次いでソースのディレクトリに移動して&lt;br /&gt;dpkg-buildpackage -us -uc&lt;br /&gt;これには-jオプションが使用可能なので、CPUのコア数にあわせて適当な数字を指定しよう。&lt;br /&gt;オプションについては以下のサイトが参考になる。&lt;br /&gt;&lt;a href="http://www.argv.org/%7Echome/blog/noisefactory/2010/05/dpkg-buildpackage.html"&gt;NoiseFactory dpkg-buildpackageメモ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;こうするとしばらくしてdebパッケージができるのでそれをインストールすればよい。&lt;br /&gt;&amp;nbsp; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-651806106314422482?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/651806106314422482/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/09/linux-mint.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/651806106314422482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/651806106314422482'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/09/linux-mint.html' title='Linux Mintでパッケージの自前コンパイル'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-3431223362935281216</id><published>2011-08-21T00:23:00.003+09:00</published><updated>2011-08-22T11:21:02.996+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux emacs python suspend'/><title type='text'>現在のLinux環境まとめ</title><content type='html'>結局ディストリビューションはLinux Mintに移行した。&lt;br /&gt;きっかけはささいなことだが、Ubuntuに比べて見た目が自分好みだったのは重要。&lt;br /&gt;MintはもともとUbuntuベースなので大きく変わらず、デフォルトのパッケージも充実しているので見た目で選ぶのは十分アリといえるのではないだろうか。&lt;br /&gt;ちなみにドライバやアプリもUbuntu用を使うことができるので利用者が少ないからといって特に困らない。トラブルシューティングも大抵Ubuntu用を探せば事足りる。&lt;br /&gt;&lt;br /&gt;というわけで以下個人用メモ。 &lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;インストールするソフト&lt;/b&gt;&lt;br /&gt;Emacs関係&lt;br /&gt;Emacs23 emacs-goodies-el python-mode pymacs auto-complete-el&lt;br /&gt;&lt;br /&gt;Python関係&lt;br /&gt;python-setuptools pysmell&lt;br /&gt;&lt;br /&gt;Scheme関係&lt;br /&gt;gauche&lt;br /&gt;&lt;br /&gt;ブラウザ&lt;br /&gt;opera google-chrome&lt;br /&gt;&lt;br /&gt;IME&lt;br /&gt;ibus-mozc&lt;br /&gt;&lt;br /&gt;UbuntuもMintもデフォルトで充実してるので特に入れるものは多くない。&lt;br /&gt;&lt;strike&gt;Mintで嬉しいのはOperaがリポジトリにあること。まとめて入れられるのは手軽でいい。&lt;/strike&gt;&lt;br /&gt;Operaのバージョン古かった……最新版いれるためにはオフィシャルからdeb落としましょう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;各種設定&lt;/b&gt;&lt;br /&gt;&lt;a href="http://b0r0nji.blogspot.com/2011/06/emacspython-mode.html"&gt;Emacsの設定については記事参照&lt;/a&gt;&lt;br /&gt;&lt;a href="http://b0r0nji.blogspot.com/2011/08/ubuntu1104-fglrxsuspend.html"&gt;dm1-3000でサスペンドするために/etc/pm/config.d/hpdm1を編集&lt;/a&gt;&lt;br /&gt;&lt;a href="http://b0r0nji.blogspot.com/2011/05/ubuntu.html"&gt;各種高速化のための設定&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.browncat.org/2007/08/ubuntu19.html"&gt;ブートスクリプトの並列化&lt;/a&gt; （/etc/init.d/rcの中でCONCURRENCY=shellにする）&lt;br /&gt;&lt;br /&gt;そのほか、思い出したら追記する &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-3431223362935281216?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/3431223362935281216/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3431223362935281216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3431223362935281216'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/linux.html' title='現在のLinux環境まとめ'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-6063607958174143273</id><published>2011-08-19T07:49:00.009+09:00</published><updated>2011-08-25T00:59:11.936+09:00</updated><title type='text'>Ubuntu11.04 + fglrxでSuspend不可の原因探し（一応解決？）</title><content type='html'>dm1-3000をUbuntu11.04にして以来、サスペンドができない。&lt;br /&gt;具体的にいうと、サスペンドの途中、電源が落ちる（？）直前にフリーズしてしまう。 &lt;br /&gt;&lt;br /&gt;毎回使う度に起動しなければならず非常に不便である。今回はこの原因を究明してみることにする。&lt;br /&gt;&lt;br /&gt;まずは問題の切り分けから。&lt;br /&gt;・Radeonのプロプライエタリドライバ、FGLRXを導入していない場合には発生しない。&lt;br /&gt;・Ubuntu10.10およびそれをベースにしたLinux Mint10では（FGLRXを導入していても）発生しない？&lt;br /&gt;&lt;br /&gt;ということが判明していたのでまずは「FGLRXと何かの相性によって発生する」と仮説が立てられる。これをもとに犯人捜しを開始する。 &lt;br /&gt;なおCatalystドライバのバージョンは最新の11.8を使用している。 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;・Gnome3犯人説&lt;/b&gt;&lt;br /&gt;10.10から11.04での大きな違いとしてまず思いつくのはGnomeのバージョン。&lt;br /&gt;実際Gnome3はいろいろと不評でもあることだし確かめてみるにしくはない。&lt;br /&gt;→Gnome2.32を使用するLinux Mint11でも問題発生&lt;br /&gt;&lt;br /&gt;&lt;b&gt;・Linux Kernel犯人説&lt;/b&gt;&lt;br /&gt;Gnome以外で差が出そうな点を探すと続いてはカーネル。&lt;br /&gt;3.0.3、2.6.40を入れて試してみる。&lt;br /&gt;→10.10、11.04共にサスペンドは成功。ただし別の問題が発生。&lt;br /&gt;&lt;br /&gt;別の問題とはサスペンドからの復帰に失敗するという問題である。&lt;br /&gt;これについては様々に情報が報告されていたので一部を紹介する。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thinkwiki.org/wiki/Problems_with_fglrx#Troubles_using_software_suspend"&gt;Troubles using software suspend&lt;/a&gt;&lt;br /&gt;&lt;a href="https://bugs.launchpad.net/ubuntu/+source/fglrx-installer/+bug/654150"&gt;ATI/AMD Proprietary FGLRX graphics Driver causes Suspend/Resume Failure&lt;/a&gt;&lt;br /&gt;&lt;a href="https://wiki.archlinux.org/index.php/ATI_Catalyst#Hibernate.2FSleep_Issues"&gt;Hibernate/Sleep Issues&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ちなみにこちらの（復帰の）問題については2007年ごろから情報があるにも関わらず、未だに一般的な対策は見つかっていないようである。&lt;br /&gt;&lt;br /&gt;ちなみにKernel3.0.3でさらに弄っているとXが起動すらしなくなったのでやめておいた方がよさそう。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;・フレームバッファ？&lt;/b&gt;&lt;br /&gt;&lt;a href="http://madengineer.cocolog-nifty.com/tpt42/2008/10/post-eef3.html"&gt;サスペンド・レジュームできるようになったよ&lt;/a&gt;&lt;br /&gt;こんな記事を見つけたので同じ事を試してみる。&lt;br /&gt;→全く変わらず &lt;br /&gt;&lt;br /&gt;現時点では解決策は不明。現時点でわかっていることを列挙すると&lt;br /&gt;・サスペンド時に失敗する問題とサスペンドから復帰する際に固まる問題は別の問題である。&lt;br /&gt;・Gnome、Linux Kernel問題では（少なくともそれ単体では）なさそう。&lt;br /&gt;・Ubuntu11.04とそれをベースにしたLinux Mint11で同じ問題が発生することからみて、共通するパッケージが原因と思われる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみにこんな情報も見つけた。&lt;br /&gt;&lt;a href="http://www.ubuntulinux.jp/getubuntu/releasenotes/710"&gt;fglrx利用時のサスペンド&lt;/a&gt;&lt;br /&gt;しかしこれは2.6.23以降のカーネルが原因という。すると10.10でサスペンドが動作する理由がわからなくなってしまう。&lt;br /&gt;&lt;br /&gt;うーむ。&lt;br /&gt;&lt;br /&gt;2011/08/20追記&lt;br /&gt;2.6.23以降のカーネルで起きる問題について調べてみた。&lt;br /&gt;メモリアロケータのデフォルトが変更されたことが原因と書いてある。&lt;br /&gt;そこでこのカーネルで変更された点を調べてみると&lt;a href="http://kernelnewbies.org/Linux_2_6_23"&gt;SLUBがデフォルトのアロケータになった&lt;/a&gt;という情報が見つかる。&lt;br /&gt;&lt;b&gt;・アロケータ犯人説？ &lt;/b&gt;&lt;br /&gt;試しにアロケータをSLABに変更したカーネルをビルドしてみるが、それでも失敗。症状は変わらないのでこれも犯人ではなかったらしい。&lt;br /&gt;&lt;br /&gt;海外のフォーラムを探していたところ同じ症状を2件発見した。&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;a href="http://phoronix.com/forums/showthread.php?59231-AMD-Catalyst-11.8-Linux-Driver-Released&amp;amp;p=223902#post223902"&gt;Phoronix: AMD Catalyst 11.8 Linux Driver Released&lt;/a&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;a href="http://ati.cchtml.com/show_bug.cgi?id=153"&gt;ATI Catalyst 11.6 on Radeon HD6310 fails to resume from suspend&lt;/a&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;どちらとも現時点では解決策があがっていない。&lt;/div&gt;&lt;div style="color: black;"&gt;しかしどうにもE-350（Radeon HD 6310）特有の問題のようにも思われる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;・一応の解決？&lt;/b&gt; &lt;br /&gt;&lt;a href="http://agentoss.wordpress.com/2011/07/15/hp-dm1-3130-and-mageia-1-linux/"&gt;HP DM1 3130 and some Linux distributions&lt;/a&gt;&lt;br /&gt;/etc/pm/config.d&lt;br /&gt;にhpdm1というファイルを作成し&lt;span style="font-family: inherit;"&gt;、中に&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-family: inherit;"&gt;SUSPEND_MODULES="hp_accel lis3lv02d"&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;という行を記述せよ、という記事を発見した。 &lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;この命令の意味はさっぱりわからないが、&lt;strike&gt;現在の所これで正常に動いている。&lt;/strike&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;やっぱりダメだったよ……&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;しかし思い立ってRT5390（無線LANのチップ）を取り外したところ超正常に動作するではないか！！！&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;これが（たぶんこいつのドライバが）原因だったらしい。&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;しかし上記のファイルの追加をしていないと相変わらずサスペンドに失敗する。&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;この二つが両方とも原因なんだろうか。 &lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="color: red; font-family: inherit;"&gt;&lt;b&gt;……あれ？fglrxは？&lt;/b&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;&lt;/pre&gt;&lt;pre style="font-family: inherit;"&gt;困った人は試してみるといいかもしれない。 &lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-6063607958174143273?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/6063607958174143273/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/ubuntu1104-fglrxsuspend.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6063607958174143273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6063607958174143273'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/ubuntu1104-fglrxsuspend.html' title='Ubuntu11.04 + fglrxでSuspend不可の原因探し（一応解決？）'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-7495494717336528191</id><published>2011-08-06T00:29:00.001+09:00</published><updated>2011-08-10T11:06:30.841+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lisp Scheme'/><title type='text'>Scheme始めました</title><content type='html'>あれ、この間C++始めてなかった？&lt;br /&gt;Haskellやるとかいってなかった？&lt;br /&gt;Javaは？&lt;br /&gt;&lt;br /&gt;三日坊主ですこんばんは。&lt;br /&gt;&lt;br /&gt;さてSchemeです。Lispです。Lispです。（大事なことなので二回言いました）&lt;br /&gt;&lt;br /&gt;『Scheme手習い』という本を買ってきて読んでるのですが、これが楽しい。&lt;br /&gt;いまのところの理解としては動的型付けの関数型言語であること。&lt;br /&gt;括弧を取り払ってみればなんのことはないこと。括弧をそのままにインデントすれば読みやすくなる。&lt;br /&gt;再帰が命であること。第二講でさっそく再帰を扱うあたりそれが現れている、気がする。&lt;br /&gt;&lt;br /&gt;atom……一つの値。数値型、文字列型……&lt;br /&gt;list……&lt;strike&gt;atomを括弧でくくったもの。&lt;/strike&gt;S式を括弧でくくったもの。リストはアトムではない。(1 2 "spam" (3 4 "egg"))&lt;br /&gt;S式……atom、list……評価される式。&lt;br /&gt;&lt;br /&gt;例えばリストの値の合計を返す関数sumを作るなら&lt;br /&gt;(define sum (lambda (a)&lt;br /&gt;&amp;nbsp; &amp;nbsp; (if (equal? (cdr a) ())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (car a)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (+ (car a) (sum (cdr a))&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;br /&gt;)))&lt;br /&gt;こんな感じになる。もちろんリストの中が全部数でないとエラーを吐くが。&lt;br /&gt;&lt;br /&gt;1，sumを定義。評価されるときに引数aをとって……&lt;br /&gt;2，ifに入る。リストaの先頭を除いたリストが空リスト()であるかどうか？&lt;br /&gt;3，もし真だったならばリストaの先頭を返す&lt;br /&gt;4，もし偽ならリストaの先頭と、リストaから先頭を除いたリストを引数にとったsumを評価して、その和を返す。&lt;br /&gt;&lt;br /&gt;ということになる。&lt;br /&gt;グローバルな宣言なら関数も変数も同じく(define foo ～)で宣言できるし、重要なのはそんなことより「評価」なんだろう。評価という点ではどんなS式も同じ。だからatomもlistも（関数も）扱いは変わらない、んだと思う。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;「&lt;a href="http://cruel.org/freeware/hacker.html"&gt;ハッカーになろう&lt;/a&gt;」&lt;/b&gt;にはLispを学べ、その悟りはきっと役に立つから……とあった。&lt;br /&gt;成程、と思う次第。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-7495494717336528191?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/7495494717336528191/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/scheme.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7495494717336528191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7495494717336528191'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/08/scheme.html' title='Scheme始めました'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-9032993302871639910</id><published>2011-07-29T18:59:00.000+09:00</published><updated>2011-07-29T18:59:52.901+09:00</updated><title type='text'>やめたらやめたで</title><content type='html'>Twitterを辞めたらどれだけ依存していたかがわかった。&lt;br /&gt;気がつくとXperiaを手にしてメガネケエスを起動しようとしている。&lt;br /&gt;事あるごとにネタを思いついては「書き込まなきゃ」と思う。&lt;br /&gt;地震が起きるとどこが震源かTLをみて判断しようとする。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そうでなくても情報のインプット量ががた落ちして調子が狂う。&lt;br /&gt;それがTwitter。&lt;br /&gt;&lt;br /&gt;なんというか、うん。&lt;br /&gt;難儀なものですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-9032993302871639910?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/9032993302871639910/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/07/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/9032993302871639910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/9032993302871639910'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/07/blog-post.html' title='やめたらやめたで'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-713041759265291476</id><published>2011-07-22T22:10:00.000+09:00</published><updated>2011-07-22T22:10:03.838+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Civ4'/><title type='text'>Civilization4 羅針盤キャッチアップについて</title><content type='html'>最近よく使う戦術が羅針盤キャッチアップである。&lt;br /&gt;難易度皇帝でも十分通用するので紹介。&lt;br /&gt;&lt;br /&gt;基本は法律√を用いる。地形改善→陶器、青銅器→筆記→瞑想→聖職→法律。&lt;br /&gt;ここで法律一番乗りが望ましい。&lt;br /&gt;&lt;br /&gt;その後漁業→鉄器・帆走→羅針盤。&lt;br /&gt;&lt;br /&gt;そして羅針盤を流して数学、アルファベット、君主制を手に入れる。&lt;br /&gt;うまくいけば暦や通貨が手に入ることもあるのでそこは適宜。 &lt;br /&gt;テンポがよければこのあたりで一人目の大科学者が手に入り、哲学ジャンプが決まる。&lt;br /&gt;&lt;br /&gt;このあとは順当に官吏→紙→教育から自由主義に向かう。&lt;br /&gt;化学か鋼鉄を取ってカノンラッシュに向かうのでいいだろう。 &lt;br /&gt;&lt;br /&gt;皇帝レベルならこのあと一切技術交換せずにカノンRに向かえる。 &lt;br /&gt;&lt;br /&gt;羅針盤√のメリットは以下の通り。&lt;br /&gt;1，法律と哲学の独占によりAIが下回り√に集中する。すなわちAIの研究速度が目に見えて落ちる。&lt;br /&gt;2，特にパンゲアにおいて羅針盤は使い道のない技術である。またAIが進んで狙う技術でもないので交換材料にしやすい。流すことによるデメリットも少ない。&lt;br /&gt;3，ビーカー量としても適当である。法律のあとに向かっても十分交換材料になる。&lt;br /&gt;&lt;br /&gt;デメリットは次のようになる。&lt;br /&gt;1，君主制が遅れるため、人口の拡充が遅くなる。&lt;br /&gt;2，AIがアルファベットをとるのが遅れた場合、羅針盤を早期に研究したことが無駄になる。&lt;br /&gt;3，パンゲア等の大陸マップ以外では使いにくい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;もう一つ。科学的手法あたりから科学者雇用を商人に切り替えるのが基本という。&lt;br /&gt;しかし最近プレイしていると教育と自由主義の偉人を出す都市が決まった時点で、それ以外の都市はすべて商人雇用に切り替えた方が（教育用偉人が出たらその都市も）いいのではないかと思うようになった。&lt;br /&gt;より高い研究税率を維持することで研究を加速し、かつ大商人の確率を高めることでトレブシェットUGの資金を得やすくなる。&lt;br /&gt;どうだろうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-713041759265291476?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/713041759265291476/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/07/civilization4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/713041759265291476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/713041759265291476'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/07/civilization4.html' title='Civilization4 羅針盤キャッチアップについて'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-1324060020605922116</id><published>2011-06-21T23:41:00.000+09:00</published><updated>2011-06-21T23:41:07.253+09:00</updated><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （6） Ver1.1</title><content type='html'>Linux向けRadeon監視ツールっぽい何か、Python Radeon Monitor、略してRademon（らで☆もん）も遂にVer1.1になりました。&lt;br /&gt;今回の更新は小粒にとどまります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.axfc.net/uploader/Sc/so/247354.zip"&gt;ダウンロードはこちら。&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;今回はGraphmakerをマトモに使えるように手直しし、コマンドラインオプションで出力を指示できるようにしました。Rademon本体には変更ありません。&lt;br /&gt;&lt;br /&gt;ひとまずこれで主な更新は終わりにしようと思います。大きな問題が出ない限り。&lt;br /&gt;GUI実装は非常に手間がかかりそうだし細かい部分はこれ以上追加するところはないからです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて、次からはTwitterのサービスでも作ってみようかなーと思ってます。&lt;br /&gt;具体的にはMyBuzz……自分のTLでバズっているワードを定期的に表示するというものを。&lt;br /&gt;MeCabで全部の発言をパースして名詞だけ抽出してカウントすれば……などと思っていたり。&lt;br /&gt;実際にどうやって作るかはラッパーをみて考えます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-1324060020605922116?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/1324060020605922116/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-6-ver11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1324060020605922116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1324060020605922116'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-6-ver11.html' title='PythonでATi GPUの監視ツールをつくってみることにした （6） Ver1.1'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-1685181083514072427</id><published>2011-06-19T21:37:00.001+09:00</published><updated>2011-06-19T21:40:20.853+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Radeon Python Rademon'/><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （5） Ver1.0＆グラフ化ツールBeta版</title><content type='html'>Linux向けRadeon監視ツール、Rademonのバージョンアップしたので公開。&lt;br /&gt;相変わらずバグの可能性はいくらでもあるので気をつけて（定型句）&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.axfc.net/uploader/Sc/so/246556"&gt;ダウンロードはこちら&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;細かい設定はReadmeを参照してください。&lt;br /&gt;&lt;br /&gt;今回の目玉はログ機能とグラフ化機能です。&lt;br /&gt;rademon.pyに-sオプションを付けて実行することでログを残し、graphmaker.pyを実行することでログをグラフ化します。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7PacVQAgpDs/Tf3tduHVhzI/AAAAAAAAACI/M6S5X-4zV8o/s1600/rademon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-7PacVQAgpDs/Tf3tduHVhzI/AAAAAAAAACI/M6S5X-4zV8o/s320/rademon.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ログはpickleで出力しているので、その気になればpythonで誰でも読めるようになっています。&lt;br /&gt;&lt;br /&gt;graphmakerはMatplotlibを必要とするのでDebian系の人はapt-get install&amp;nbsp;python-matplotlibで導入できるはずです。Redhat系は……ちょっとわからない。たぶんyumで入れられるとは思うけど。&lt;br /&gt;&lt;br /&gt;ただしgraphmakerはまだまだベータ版です。使えなかった場合はお手数ですが環境などを添えてコメントで申しつけください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-1685181083514072427?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/1685181083514072427/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-5-ver10beta.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1685181083514072427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1685181083514072427'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-5-ver10beta.html' title='PythonでATi GPUの監視ツールをつくってみることにした （5） Ver1.0＆グラフ化ツールBeta版'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-7PacVQAgpDs/Tf3tduHVhzI/AAAAAAAAACI/M6S5X-4zV8o/s72-c/rademon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-7759179025418866777</id><published>2011-06-17T01:16:00.002+09:00</published><updated>2011-06-17T11:47:09.856+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Radeon Python Rademon'/><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （4）Beta版公開！</title><content type='html'>Linux向けRadeon監視ツール、Rademon（やっぱり名前変えた）のBeta版ができたので公開。&lt;br /&gt;&lt;br /&gt;細かい設定はだいたい同封のReadmeに入っているのでそちらを参照してください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.axfc.net/uploader/Sc/so/245664.zip"&gt;ダウンロードはこちら&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;相変わらずターミナル版ですが、コマンドラインオプションに対応しました。&lt;br /&gt;細かいことは同じくReadmeを（ry&lt;br /&gt;&lt;br /&gt;もちろんまだベータ版です。&lt;br /&gt;動作保証はもちろんないので一応覚悟のうえ使ってください。（最近はこれを書かないと怖いご時世だからなーということで念のため）&lt;br /&gt;&lt;br /&gt;テスターのおししょ、ことポンコツさん&lt;a href="http://twitter.com/ponkotuy"&gt;@ponkotuy&lt;/a&gt;に感謝をこめて！&lt;br /&gt;&lt;br /&gt;17日、Readme同封忘れに気付いて急遽差し替え&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-7759179025418866777?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/7759179025418866777/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-4beta.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7759179025418866777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/7759179025418866777'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-4beta.html' title='PythonでATi GPUの監視ツールをつくってみることにした （4）Beta版公開！'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2621601773481004013</id><published>2011-06-14T22:47:00.003+09:00</published><updated>2011-06-15T09:40:35.857+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Emacsの設定 ～eshellを起動時から便利に使うために～</title><content type='html'>順調にEmacs使いへの道を歩いているわけですが、今回はeshellについて。&lt;br /&gt;&lt;br /&gt;まずeshellとはEmacs上で動くシェルです。名前からして当然ですが。&lt;br /&gt;これまでEmacsで書く→Konsoleを立ち上げて実行する→またEmacsに戻る……というまどろっこしいことを繰り返していた中で「これだけ拡張機能があるEmacsなのに、Emacs上でターミナルが使えないわけがない！」と思って調べて見たらそのものズバリ。デフォルトで入ってるじゃないですか。&lt;br /&gt;&lt;br /&gt;通常はM-x eshellでつかえるわけですが、今回は.emacsを編集して起動時に画面を分割し、片方の画面ですぐに使えるようにしてしまおうという事を考えたわけです。&lt;br /&gt;&lt;br /&gt;まどろっこしい話を抜きにするなら以下の文を.emacsに書き込めばおっけー。&lt;br /&gt;&lt;br /&gt;(defun split-window-and-run-eshell()&lt;br /&gt;&amp;nbsp; &amp;nbsp; (setq w (selected-window))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;strike&gt;(setq w2 (split-window w nil 1))&lt;/strike&gt;(setq w2 (split-window w nil t))&lt;br /&gt;&amp;nbsp; &amp;nbsp; (select-window w2)&lt;br /&gt;&amp;nbsp; &amp;nbsp; (eshell)&lt;br /&gt;&amp;nbsp; &amp;nbsp; (select-window w))&lt;br /&gt;(add-hook 'after-init-hook (lambda()(split-window-and-run-eshell)))&lt;br /&gt;&lt;br /&gt;上の行から説明すると&lt;br /&gt;1，split-window-and-run-eshellを定義&lt;br /&gt;2，wを現在のウィンドウと定義&lt;br /&gt;3，wを左右に等分割し、w2を新しくできたウィンドウと定義。1よりtのほうが「Lispらしい」らしい。&lt;br /&gt;また上下に等分割する場合は(split-window w nil nil)&lt;br /&gt;上下にわけて、下の行数をxと指定するなら(split-window w (- (window-height w)x))とするとよい、と&lt;a href="http://twitter.com/#%21/ka_____/status/80643804746612737"&gt;かさんから教えて頂きました。&lt;/a&gt;ありがとうございます。&lt;br /&gt;4，w2に移動&lt;br /&gt;5，eshellを起動&lt;br /&gt;6，wに移動&lt;br /&gt;7，起動時にsplit-window-and-run-eshellを実行する&lt;br /&gt;&lt;br /&gt;という内容。&lt;br /&gt;ほかにも同じ事を考えている人がいることを祈って。&lt;br /&gt;どうぞご利用くださいませ～。&lt;br /&gt;&lt;br /&gt;・追記&lt;br /&gt;投稿後10分で誤植が発見され、修正。&lt;br /&gt;その後も指摘や追記が相次ぎいろいろ修正。&lt;br /&gt;というわけで「はじめてのいーりすぷ 完」ってところです。&lt;br /&gt;なんかLispって快感かも。&lt;br /&gt;&lt;br /&gt;さらに起動時に最大化する(set-frame-parameter nil 'fullscreen 'maximized)をはさむと起動時に次のような画面になります。満足満足。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5fyGrQ7js4Y/Tff_en8KMyI/AAAAAAAAACE/vj-wcS9ZH4U/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-5fyGrQ7js4Y/Tff_en8KMyI/AAAAAAAAACE/vj-wcS9ZH4U/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2621601773481004013?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2621601773481004013/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/emacs-eshell.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2621601773481004013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2621601773481004013'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/emacs-eshell.html' title='Emacsの設定 ～eshellを起動時から便利に使うために～'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-5fyGrQ7js4Y/Tff_en8KMyI/AAAAAAAAACE/vj-wcS9ZH4U/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-8894773956340231838</id><published>2011-06-12T22:29:00.001+09:00</published><updated>2011-06-18T00:47:53.514+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emacs python'/><title type='text'>Emacsの設定～Python-mode～</title><content type='html'>Emacsを&lt;strike&gt;布教された&lt;/strike&gt;使うことにした。&lt;br /&gt;&lt;br /&gt;小指を酷使するエディタ、Emacs。&lt;br /&gt;「もはやエディタではない」、Emacs。&lt;br /&gt;「もう戻れない」、Emacs。&lt;br /&gt;仕事中にTwitterしてもバレない、Emacs。&lt;br /&gt;等々。&lt;br /&gt;&lt;br /&gt;なにはともあれ今回はEmacsでPythonを使うための設定を書きのこしておく事にした。&lt;br /&gt;&lt;br /&gt;1，インストールするパッケージ&lt;br /&gt;#apt-get install emacs23,auto-complete-el,emacs-goodies-el,python-mode,pymacs,pycomplete-el&lt;br /&gt;&lt;br /&gt;#easy_install pysmell&lt;br /&gt;（Pysmellは自分でダウンロードしてきてpython setup.py installのほうがよさそう）&lt;br /&gt;&lt;br /&gt;2，.emacsの記述&lt;br /&gt;C-x C-f .emacs&lt;br /&gt;で.emacsを編集する。&lt;br /&gt;&lt;br /&gt;まずは画面左に行数表示させる。&lt;br /&gt;上2行あれば行数は出るが、最後の行を付けることで見やすくなる。&lt;br /&gt;4文字分のスペースに表示、らしい。&lt;br /&gt;(require 'linum)&lt;br /&gt;(global-linum-mode t)&lt;br /&gt;(setq linum-format "%4d")&lt;br /&gt;&lt;br /&gt;次いで見た目の設定。&lt;br /&gt;emacs-goodies-elには様々なカラーテーマが用意されているのでそれを利用する。&lt;br /&gt;テーマがどのようなものか見たければ&lt;a href="http://gnuemacscolorthemetest.googlecode.com/svn/html/index-c.html"&gt;このサイト&lt;/a&gt;を参照するとよい。&lt;br /&gt;僕はeuphoriaを選択した。黒地に緑字というのが長時間作業には向いていると考えたため。&lt;br /&gt;また同時にフォントも設定する。&lt;br /&gt;(if window-system&lt;br /&gt;(progn&lt;br /&gt;(color-theme-initialize)&lt;br /&gt;(color-theme-euphoria)&lt;br /&gt;(set-default-font "TakaoExゴシック-12")&lt;br /&gt;))&lt;br /&gt;&lt;br /&gt;ここから下がPython向けの設定なのだが……大半が以下のサイトの引き写しである。&lt;br /&gt;&lt;a href="http://sheephead.homelinux.org/2009/09/29/1614/"&gt;python in Emacs環境の整備＿＿基礎環境編＿＿&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sheephead.homelinux.org/2009/05/27/1281/"&gt;emacsのpython-modeでもauto-complete.elを使う&lt;/a&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/CortYuming/20090328/p1"&gt;『python-mode.el』と『pymacs』と『pycomplete.el』と&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblog.nekonya.com/2010/11/cocoa-emacs-python.html"&gt;Cocoa Emacs で Python 開発環境を再び整えた&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;a href="http://d.hatena.ne.jp/moch-lite/20090419/p1" name="p1" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;PySmellでTextMateにPythonコードの補完機能を付与する&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;まずPysmellから。自前でダウンロードした前提で話を進める。&lt;br /&gt;適当なフォルダで&lt;br /&gt;# pysmell .&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;を実行し、PYSMELLTAGSを作る。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;同じく/usr/lib/python2.7で&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# pysmell . -x site-packages test -o PYSMELLTAGSのあるフォルダ/PYSMELLTAGS.stdlib&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;を実行する。これが自動補完のために使われる。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;次いでEmacsにインストールしたフォルダのパスを通す。&lt;br /&gt;(setq load-path (cons "pysmellのインストールフォルダ" load-path))&lt;br /&gt;&lt;br /&gt;ここからが設定&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(require 'pysmell)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(add-hook 'python-mode-hook (lambda () (pysmell-mode 1)))&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;(defvar ac-source-pysmell&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp; '((candidates&lt;/span&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;. (lambda ()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(require 'pysmell)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(pysmell-get-all-completions))))&lt;br /&gt;&amp;nbsp; "pysmellのPYSMELLTAGSのあるディレクトリ")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;次はPython-mode。Emacsには標準でPython用のモードが用意されているが、あまり優秀でないということで追加のPython-modeを導入する。同時にpysmellも利用できるように設定。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(add-hook 'python-mode-hook&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; '(lambda ()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(set (make-local-variable 'ac-sources) (append ac-sources '(ac-source-pysmell)))))&lt;br /&gt;&lt;br /&gt;次いでAuto-complete-el。文字通り自動補完を行うためのもの。&lt;br /&gt;(require 'auto-complete)&lt;br /&gt;(global-auto-complete-mode t)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最後にPymacs&lt;br /&gt;&lt;br /&gt;;; pymacs&lt;br /&gt;(autoload 'pymacs-apply "pymacs")&lt;br /&gt;(autoload 'pymacs-call "pymacs")&lt;br /&gt;(autoload 'pymacs-eval "pymacs" nil t)&lt;br /&gt;(autoload 'pymacs-exec "pymacs" nil t)&lt;br /&gt;(autoload 'pymacs-load "pymacs" nil t)&lt;br /&gt;(eval-after-load "pymacs"&lt;br /&gt;&amp;nbsp; '(add-to-list 'pymacs-load-path "/home/boronji/temp/python-mode"))&lt;br /&gt;;; python-mode, pycomplete&lt;br /&gt;(setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))&lt;br /&gt;(setq interpreter-mode-alist (cons '("python" . python-mode)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interpreter-mode-alist))&lt;br /&gt;(autoload 'python-mode "python-mode" "Python editing mode." t)&lt;br /&gt;(add-hook 'python-mode-hook '(lambda ()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(require 'pycomplete)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;))&lt;br /&gt;&lt;br /&gt;正直もはやなにをやってるか自分でもわからずに切り貼りしただけである。&lt;br /&gt;一応これで動いているんだからありがたいもので。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="extensionsWeblioEjBx" style="display: none; left: 31px; position: absolute; top: 824px; z-index: 2147483647;"&gt;&lt;iframe border="0" frameborder="0" height="60" name="weblioExtensionsFrame" onmouseout="localStorage['weblioObjFlg'] = 2;" onmouseover="localStorage['weblioObjFlg'] = 1;" scrolling="no" src="http://api.weblio.jp/act/quote/v_1_0/e/?q=%2Fhome%2Fboronji%2Ftemp%2Fpysmell-0.7.3&amp;amp;type=emicro&amp;amp;opul=chrome-extension%3A%2F%2Foingodpdjohhkelnginmkagmkbplgema%2Foptions.html" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div id="extensionsWeblioEjBx" style="display: none; left: 91px; position: absolute; top: 828px; z-index: 2147483647;"&gt;&lt;iframe border="0" frameborder="0" height="60" name="weblioExtensionsFrame" onmouseout="localStorage['weblioObjFlg'] = 2;" onmouseover="localStorage['weblioObjFlg'] = 1;" scrolling="no" src="http://api.weblio.jp/act/quote/v_1_0/e/?q=oronji%2Ftemp%2Fpysmell-0.7.3&amp;amp;type=emicro&amp;amp;opul=chrome-extension%3A%2F%2Foingodpdjohhkelnginmkagmkbplgema%2Foptions.html" width="320"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-8894773956340231838?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/8894773956340231838/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/emacspython-mode.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8894773956340231838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/8894773956340231838'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/emacspython-mode.html' title='Emacsの設定～Python-mode～'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-1788013565967739460</id><published>2011-06-10T01:09:00.000+09:00</published><updated>2011-06-10T01:09:26.373+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Radeon'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （3）暫定公開 PyRaM</title><content type='html'>GUIをつくるのは時間がかかりそうなのでとりあえず出来た分だけ公開します。&lt;br /&gt;いくらでもバグは出てくる可能性があるので覚悟の上ご利用ください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www1.axfc.net/uploader/Sc/so/243318.dat&amp;amp;key=pythonradeonmonitor"&gt;ダウンロードはこちら&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-be1D50_BRLs/TfDrFJPuiJI/AAAAAAAAACA/OHEcWIfumVU/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-be1D50_BRLs/TfDrFJPuiJI/AAAAAAAAACA/OHEcWIfumVU/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;動作中の画面はこちら。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1，使用方法&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ターミナル上から&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;# ./pyram.py&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;してくれれば動くはずです。もしかしたらchmod +xがいるかも。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;終了はCtrl+Cです。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;2，動作環境&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ハードウェアとしてRadeonを搭載し、かつAMDのプロプライエタリなドライバをインストールしてある環境でないと動作しません。当方ではUbuntu11.04とPython2.7.1、FGLRX8.850で動作確認しております。また前述の通り、ドライバのバージョンによっては取得できない可能性も大いにあります。その場合は環境を添えてコメントに報告頂けると幸いです。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;現時点ではAlpha版にも満たないものです。動作保証もなにもありません。PCが壊れるようなことはないと思いますが理解した上で使ってください。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3，仕様&lt;/b&gt;&lt;/div&gt;&lt;div&gt;2秒おきにターミナル上に現在日時、温度、現在のコアクロックと最大クロック、同じく現在のメモリクロックと最大クロック、GPUの使用率を表示します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;4，名前&lt;/b&gt;&lt;/div&gt;&lt;div&gt;どうでもいい話ですが名前は「PyRaM」にしました。&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;Py&lt;/b&gt;&lt;/span&gt;thon &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;Ra&lt;/b&gt;&lt;/span&gt;deon &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;M&lt;/b&gt;&lt;/span&gt;onitor&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今後は2つの方向で改良したいと思っています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一つはこのままターミナルで実行するものとして。コマンドライン引数で表示を弄れるようにしたり表示間隔を変更可能にしたりと。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;もう一つにはGUIの実装ですね。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;というわけで次回にご期待ください。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-1788013565967739460?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/1788013565967739460/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-3-pyram.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1788013565967739460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/1788013565967739460'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-3-pyram.html' title='PythonでATi GPUの監視ツールをつくってみることにした （3）暫定公開 PyRaM'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-be1D50_BRLs/TfDrFJPuiJI/AAAAAAAAACA/OHEcWIfumVU/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-3933992917342754982</id><published>2011-06-08T23:36:00.001+09:00</published><updated>2011-06-08T23:41:11.736+09:00</updated><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （2） 残念なお知らせといいお知らせ</title><content type='html'>第二回ですこんばんは。&lt;br /&gt;「次回公開すると約束したな、あれは嘘だ」&lt;br /&gt;&lt;br /&gt;というわけで経過を。&lt;br /&gt;&lt;br /&gt;あのあとTwitterで「もっとスマートな方法があるだろう」「直接ハードウェア情報取得する方法探せば？」といわれたので調べてみたのだが見つからず。&lt;br /&gt;&lt;br /&gt;まずは/proc/ati/やdev/ati/の中をのぞいてみた。&lt;br /&gt;確かに色々なデータが見つかる。そのうちどうやら関係ありそうなのは/proc/ati/0だ。&lt;br /&gt;この0というのはどうもグラフィックチップの番号じゃないかと思われる。（マルチGPUだと1とか2が出てくるんじゃないかな？）&lt;br /&gt;が、その中を見ても大して理解できそうな数値が出てこない！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そこで裏技的にKDEのウィジェット……PyATiMonitor（名前からしてPythonで書いてるのがありありとわかる）のコードを読んでみることにした。&lt;br /&gt;そう、もっとスマートな方法があるに違いない！きっと使ってるはずだ！と期待を込めて。&lt;br /&gt;&lt;br /&gt;……悲しいことが判明した。&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;やってることは僕と同じだった&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;まあ多少の違いはある。&lt;br /&gt;たとえば僕はcommandsモジュールを使ったが、こちらはsubprocessを使っている。&lt;br /&gt;あるいは僕はさくっとパースしてリストにしてindexで要素を取り出しているが、こちらは改行でパースしてスマートに正規表現を使って切り出している。&lt;br /&gt;とはいえ違いはその程度。&lt;br /&gt;&lt;br /&gt;ちなみに「ウィジェットごと移植すればどう？」という意見も頂いたが、これはちょっと無理がある。&lt;br /&gt;というのはこのウィジェット、KDEべったりな仕様になっているのだ。&lt;br /&gt;&lt;br /&gt;というわけでこのあたりのコードを参考にしつつ、よりスマートに作り直すことにするので乞うご期待。&lt;br /&gt;&lt;br /&gt;ToDo：PythonでQtを使う勉強&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-3933992917342754982?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/3933992917342754982/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3933992917342754982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/3933992917342754982'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu-2.html' title='PythonでATi GPUの監視ツールをつくってみることにした （2） 残念なお知らせといいお知らせ'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2515917853861270607</id><published>2011-06-08T15:22:00.002+09:00</published><updated>2011-06-08T15:31:11.450+09:00</updated><title type='text'>PythonでATi GPUの監視ツールをつくってみることにした （１）</title><content type='html'>のっけからだが、Linuxの話である。&lt;br /&gt;&lt;br /&gt;KDEではATiのグラフィックチップをモニターするためのグラフィカルなウィジェットが存在するが（PyATiMonitor）、Gnomeには残念なことにそれに類するものがない。そこで自分で作ってみようと思い立った。&lt;br /&gt;&lt;br /&gt;だがLinuxでGPUからクロックや温度を取得するAPIがわからない。あるのかもしれないが。&lt;br /&gt;そこで思い立ったのがaticonfigである。AMDのプロプライエタリなドライバを導入したときに&lt;br /&gt;# aticonfig --initial&lt;br /&gt;したと思うが、あのaticonfigである。&lt;br /&gt;&lt;br /&gt;このaticonfigはコマンドライン引数をつけて実行することでさまざまな設定を行い、また情報を取得することができる。たとえば&lt;br /&gt;# aticonfig --odgc&lt;br /&gt;ならクロックを、&lt;br /&gt;# aticonfig --odgt&lt;br /&gt;なら温度を取得することができる。&lt;br /&gt;その他の詳細は--helpを参照。&lt;br /&gt;&lt;br /&gt;これを実行するとそれぞれ以下のように表示される。&lt;br /&gt;Default Adapter - AMD Radeon HD 6300 series Graphics&lt;br /&gt;&amp;nbsp;　 　 　 　 　 　 　 　Core (MHz) 　 　Memory(MHz)&lt;br /&gt;Current clocks 　 　278 　 　 　 　 　 　533&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 0px;"&gt;Current&amp;nbsp;Peak 　 　 492 　 　 　 　 　 　533&lt;/div&gt;&lt;div&gt;&amp;nbsp;　 　 　 　 　（以下略）&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Default Adapter - AMD Radeon HD 6300 series Graphics&lt;br /&gt;&amp;nbsp;　 　 　 　 　 　Sensor 0: Temperatur - 50.0 C&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;しかしPythonからこれを使うには問題もある。Pythonからターミナルを叩くにはcommandsモジュール、あるいはsubprocessモジュールを用いるが（今回はcommandsを使う）返ってくるのは上記のようにターミナル上で見やすいように整形されたテキストである。&lt;br /&gt;&lt;br /&gt;よって実際に使うにはこのテキストから必要な数値を取り出さなければならない。まず得られた文字列を適当に.purse()メソッドを使ってパースしてリストにする。次いでできたリストから目的の値を取り出すことになるのだが、この際使えるのは.index()メソッドくらいしかない。&lt;br /&gt;&lt;br /&gt;数値は変動するという前提があるのでアテにならない。そこでリストの要素のうち特定の文字列の場所を.index()メソッドで取得し、そこから相対的な場所で目的の数値を（とはいっても文字列型で入っているが）取り出すことになる。今回は"Clocks","Peak","Adapter"などを手がかりに切り出すことにした。&lt;br /&gt;&lt;br /&gt;しかる後に取り出した文字列型の数値（めんどくさい表現だが要は"50.00"ということ）をfloatなりintなりに変更して（50.0や50にして）用いる。&lt;br /&gt;&lt;br /&gt;さて、これに伴う&lt;span class="Apple-style-span" style="color: red;"&gt;最大の欠点&lt;/span&gt;である。aticonfigの出力する文字列にべったりなため、&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;もしバージョン変更に伴って出力される方法が変わるとなにもできない。&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;というのはともかく、作ってみた。ひとまずはターミナル上で実行するものを。&lt;br /&gt;公開は次回。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;公開ってGoogle Docsに置けばいいんだろうか……？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2515917853861270607?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2515917853861270607/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2515917853861270607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2515917853861270607'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/06/pythonati-gpu.html' title='PythonでATi GPUの監視ツールをつくってみることにした （１）'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-6877306828895443159</id><published>2011-05-28T21:10:00.000+09:00</published><updated>2011-05-28T21:10:32.415+09:00</updated><title type='text'>Intel C++ CompilerでLinux Kernelをコンパイルする試み</title><content type='html'>数日前の記事でLinuxカーネルの再構築について記述した。&lt;br /&gt;Linuxカーネルを環境に最適化することで高速化させるのは一つの方法である。しかしもう一つ高速化の方法が考えられる。&lt;br /&gt;&lt;br /&gt;それがIntel Compiler。通常のGCCを用いてコンパイルするよりも最適化されたバイナリを出力してくれるため、高速化の割合はプログラムによって違うが数％～数百％になるという。無視できるものではないと考え、実践してみることにした。&lt;br /&gt;&lt;br /&gt;Linux向けのIntel Compilerは個人用途で非商用に限り無償で配布されている。&lt;br /&gt;インストール方法はこちらを参照した。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.cles.jp/item/2356"&gt;Intel C++ Compiler（ICC）をインストールする&lt;/a&gt;&lt;br /&gt;&lt;a href="http://budougumi0617.blog52.fc2.com/blog-category-2.html"&gt;64bit Ubuntu(Linux)でIntel MKL10.Xを利用する&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;さて、インストールが終わったら環境変数を設定する。&lt;br /&gt;64bitCPU向けなのでまずはディレクトリを掘ってiccvars.shとmklvars.shを実行する。&lt;br /&gt;&lt;br /&gt;この後だが、&lt;a href="http://blog.livedoor.jp/achirus_fasciatus/archives/2008-06.html#20080602"&gt;ある記事&lt;/a&gt;で&lt;br /&gt;# export "CC=icc"&lt;br /&gt;# export "CXX=icpc"&lt;br /&gt;として環境変数を設定すればよいと目にしたが、&lt;a href="http://blog.livedoor.jp/achirus_fasciatus/archives/51252045.html"&gt;後にそれでは不足であるという記事&lt;/a&gt;もあった。&lt;br /&gt;&lt;br /&gt;Linux Kernelは&lt;a href="http://twitter.com/#%21/cosmo__/status/73223506128678912"&gt;GNU拡張をバンバン使っているのでそのオプションもONにしなければならない&lt;/a&gt;、と&lt;a href="http://twitter.com/#%21/cosmo__/status/73224498761039872"&gt;コスモさんから指摘&lt;/a&gt;を受けた。というわけで次のように設定する。&lt;br /&gt;&lt;br /&gt;# export "CC=icc -std=gnu89"&lt;br /&gt;# export "CXX=icpc -std=gnu++98"&lt;br /&gt;&lt;br /&gt;あとは&lt;a href="http://b0r0nji.blogspot.com/2011/05/ubuntu-1104.html"&gt;通常通り&lt;/a&gt;make-kpkgでカーネルのdebを作る。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;カーネルのバージョンはインストール後に&lt;br /&gt;# cat /proc/version&lt;br /&gt;で確認できる。しかし……&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-N7c1c0K52F4/TeDdmjNOmrI/AAAAAAAAAB8/YbW0l4F_Apw/s1600/snapshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-N7c1c0K52F4/TeDdmjNOmrI/AAAAAAAAAB8/YbW0l4F_Apw/s320/snapshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この写真を見て頂きたい。壁紙は気にしないで。これは以上の方法を用いて再構築したカーネルなのだが、コンパイラがGCCとなっている。これはどういうことなのか……&lt;br /&gt;&lt;br /&gt;おなじ設定のカーネルソースを、環境変数の設定なしでコンパイルしたものと、設定してコンパイルしたものをcmpコマンドで比較してみた。確かに出力されたdebは異なっていた。しかし確かにIntel Compilerでコンパイルされたという証拠がみえず困惑しているというのが正直なところである。&lt;br /&gt;&lt;br /&gt;記事によっては&lt;a href="http://d.hatena.ne.jp/turutosiya/20090616/p1"&gt;「パッチを当てたカーネルソースを使用せよ」というもの&lt;/a&gt;（配布されているカーネルソースが古くてどうしようもなかった）、「不可能である」という説、「上記の方法を用いることで少なくともカーネルの一部はICCによってコンパイルされている」という説、諸々である。&lt;br /&gt;&lt;br /&gt;現時点でははっきりとしたことは不明。&lt;br /&gt;&lt;b&gt;&lt;span style="color: red;"&gt;情報募集しております。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;あとカーネル自体の高速化を測定する方法って何かないんでしょうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-6877306828895443159?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/6877306828895443159/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/intel-c-compilerlinux-kernel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6877306828895443159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/6877306828895443159'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/intel-c-compilerlinux-kernel.html' title='Intel C++ CompilerでLinux Kernelをコンパイルする試み'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-N7c1c0K52F4/TeDdmjNOmrI/AAAAAAAAAB8/YbW0l4F_Apw/s72-c/snapshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-4281045288259555346</id><published>2011-05-26T07:09:00.000+09:00</published><updated>2011-05-26T07:09:01.815+09:00</updated><title type='text'>Ubuntuを高速化</title><content type='html'>1，sysv-rc-confを使う&lt;br /&gt;自動で起動するデーモンを切ることで起動が高速になる。&lt;br /&gt;# sudo apt-get install sysv-rc-conf &lt;br /&gt;# sudo sysv-rc-conf&lt;br /&gt;するとターミナル上でプロセスの一覧があらわれる。×印が付いているのをすべて外せばそのプロセスは起動しなくなる。もちろん必須となるプロセスも表示されており、それを切ると正常に動作しなくなる可能性があるので自己責任で。&lt;br /&gt;&lt;br /&gt;2，vm.swappinessを変更する&lt;br /&gt;スワップ領域はHDDに作られる。当然HDDは、いやSSDであってもアクセスはメモリの速度に遠く及ばない。可能ならばスワップの使用は減らした方がいい。&lt;br /&gt;スワップの使用頻度は/etc/sysctl.confにvm.swappiness = ～という形で書き込めばよい。デフォルトは60だが、これは非常にメモリが少ない環境向けの数値らしい。値を0にするとメモリを使い切るまでスワップを使わないようにする、とのことなので私は0にした。&lt;br /&gt;再起動するか、ターミナルで&lt;br /&gt;# sudo sysctl -p&lt;br /&gt;することで適用される。 &lt;br /&gt;&lt;br /&gt;3，自動起動を止める&lt;br /&gt;これは1で書いたものとは別である。&lt;br /&gt;Gnomeならシステム-システム管理-自動起動するアプリケーションの設定、で変更できるものだ。&lt;br /&gt;Ubuntu One、Bluetooth、印刷、視覚支援などは使わないなら切ってしまって何の問題もない。これらがあるだけで起動の時間が延び、起動してからも少しでもリソースを食うと考えるともったいないのだ。&lt;br /&gt;&lt;br /&gt;4，軽量デスクトップ環境を使う&lt;br /&gt;GnomeやKDEのようなグラフィカルなGUIは重く、巨大だ。軽量なXfceやLXDEにすることで高速化が図れる。それぞれ&lt;br /&gt;# sudo apt-get install Xubuntu-desktop&lt;br /&gt;や&lt;br /&gt;# sudo apt-get install Lubuntu-desktop&lt;br /&gt;でインストールできる。&lt;br /&gt;ちなみに&lt;br /&gt;# apt-get install xfce4&lt;br /&gt;や&lt;br /&gt;# apt-get install lxde&lt;br /&gt;でもデスクトップ環境はインストールできるが、デフォルトだと起動画面がGnomeのままで元の木阿弥である。面倒なので環境を丸ごと入れてしまう上のほうが楽でいい。&lt;br /&gt;XfceのほうがLXDEよりリッチだが、LXDEでは一部のソフトが動かないという報告もあるので注意した方がいいかもしれない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-4281045288259555346?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/4281045288259555346/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4281045288259555346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4281045288259555346'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/ubuntu.html' title='Ubuntuを高速化'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2937676614190891157</id><published>2011-05-24T00:24:00.001+09:00</published><updated>2011-05-24T09:18:37.415+09:00</updated><title type='text'>HP Pavilion dm1-3000にUbuntuを入れる（RT5390ドライバとRadeonドライバのインストール）</title><content type='html'>今春登場したモバイルノート、その注目株はAMDのZacate搭載ノートだっただろう。その中私が買ったのがこの&lt;a href="http://h50146.www5.hp.com/products/portables/personal/dm1_11spr/"&gt;HP Pavilion dm1-3000&lt;/a&gt;。&lt;a href="http://www.sony.jp/vaio/products/YA1/"&gt;SONYのVAIO YB&lt;/a&gt;はバカみたいに高いし&lt;a href="http://www.fmworld.net/fmv/ph_s/"&gt;富士通のLIFEBOOK PH&lt;/a&gt;も高い。Lenovoはデカイかバッテリが少ないか好きなほうを選べという中途半端さ。&lt;br /&gt;&lt;br /&gt;というわけで安くてしかもそれなりにバランスのとれたのがこれだったわけだ。&lt;br /&gt;&lt;br /&gt;事実性能はAtomとは比べものにならないほど高いし、バッテリもこの値段（50000円台）で軽く4，5時間は保つ。発売開始から2ヶ月くらいでHP Directでの販売が終了したのは何かの陰謀だろうか。&lt;br /&gt;&lt;br /&gt;ともあれ。このノートにUbuntuを入れて使うにあたって行ったことをメモしておく。&lt;br /&gt;インストールは別に苦労することないのでその後に集中して。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1，Ralink RT5390のドライバを入れる&lt;/b&gt;&lt;br /&gt;Ralink RT5390は一枚にBluetoothとWLANをまとめたチップだ。そして新しすぎるせいか標準のドライバではWLANが認識されない。（Bluetoothは利用可能）&lt;br /&gt;というわけでこのドライバを入れよう。&lt;br /&gt;まずは&lt;a href="http://www.ralinktech.com/support.php?s=2"&gt;Ralinkからドライバのソースをダウンロード&lt;/a&gt;してくる。 名前とメアドを要求されるのでおとなしく入力。&lt;br /&gt;落としてきたら解凍。できたフォルダ名をdriverとする。&lt;br /&gt;driver/os/linuxにあるconfig.mkをエディタで開き、HAS_CFG80211_SUPPORT=yとなっているところをHAS_CFG80211_SUPPORT=nに書き換える。書き換えないとmake時にエラーはいて止まる模様。&lt;br /&gt;書き換えたらdriverフォルダで&lt;br /&gt;&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt;すればよい。&lt;br /&gt;ちなみにカーネルを入れ替えた場合、/lib/moduleにシンボリックリンクを作っていないとmakeでエラーを吐いて止まるので注意。&lt;br /&gt;これでWLANが使えるようになる。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2，AMD Radeonのグラフィックドライバを入れる&lt;/b&gt;&lt;br /&gt;例によって&lt;a href="http://www.amd.com/jp/Pages/AMDHomePage.aspx"&gt;AMDからドライバをダウンロード&lt;/a&gt;してくる。&lt;br /&gt;落としたドライバのファイル名をati.runとする。&lt;br /&gt;&lt;br /&gt;# sudo -s&lt;br /&gt;今回も面倒なので全部rootで行う。&lt;br /&gt;&lt;br /&gt;# chmod +x ati.run&lt;br /&gt;実行可能権限を付ける。&lt;br /&gt;&lt;br /&gt;# ./ati.run --listpkg&lt;br /&gt;することでパッケージの内容が確認できる。今回はUbuntu 11.04なのでUbuntu/nattyということ。&lt;br /&gt;&lt;br /&gt;# ./ati.run --buildpkg Ubuntu/natty&lt;br /&gt;これでしばらく待てばドライバのdebが3つできる。&lt;br /&gt;&lt;br /&gt;# apt-get install dkms&lt;br /&gt;ドライバのインストール前にこれを入れておくこと。どのみち要求されるのだが先に入れておいたほうが面倒が少ない。&lt;br /&gt;&lt;br /&gt;# dpkg --install fglrx_8.841-0ubuntu1_amd64.deb&lt;br /&gt;# dpkg --install fglrx-amdcccle_8.841-0ubuntu1_amd64.deb&lt;br /&gt;# dpkg --install fglrx-dev_8.841-0ubuntu1_amd64.deb&lt;br /&gt;# dpkg --install fglrx_8.841-0ubuntu1_amd64.deb&lt;br /&gt;同じのを2回入れているように見えるが誤記ではない。&lt;br /&gt;どうもこうしないとCatalystがうまく入らなかったのだ。&lt;br /&gt;別のバージョンではちゃんと入る可能性もあるのでこれも要確認。&lt;br /&gt;&lt;br /&gt;ちなみに前項同様カーネルを入れ替えていて、かつシンボリックリンクを張っていない場合ここでエラーを吐いて致命的に起動しなくなるので注意。 &lt;br /&gt;&lt;br /&gt;終わったら&lt;br /&gt;# aticonfig --initial&lt;br /&gt;して再起動。&lt;br /&gt;&lt;br /&gt;再びターミナルで今度は&lt;br /&gt;# gstreamer-properties&lt;br /&gt;を実行する。するとマルチメディア・システム・セレクタなるものが起動するのでビデオのタブに移り、プラグインをXウインドウシステム(X11/Xshm/Xvあり)に、デバイスをATI Radeon AVIVO Videoに設定し、終了する。&lt;br /&gt;&lt;br /&gt;以上、これでだいたいののハードウェアが使用可能になったはずだ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;今回の記事では以下のページを参考にした。&lt;br /&gt;・&lt;a href="http://ubuntuforums.org/showthread.php?t=1743525"&gt;&lt;span style="font-family: inherit;"&gt;Ubuntu Forums -&lt;/span&gt;&lt;b style="font-family: inherit; font-weight: normal;"&gt;Ralink RT5390 in 11.04&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;・&lt;a href="http://d.hatena.ne.jp/ponkotuy/20110331/1301593752" name="1301593752"&gt;UbuntuにAMDのGPUドライバを入れる3つ目の方法&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2937676614190891157?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2937676614190891157/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/hp-pavilion-dm1-3000ubunturt5390radeon.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2937676614190891157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2937676614190891157'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/hp-pavilion-dm1-3000ubunturt5390radeon.html' title='HP Pavilion dm1-3000にUbuntuを入れる（RT5390ドライバとRadeonドライバのインストール）'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-2556184738366216098</id><published>2011-05-23T12:30:00.002+09:00</published><updated>2011-05-23T13:01:04.934+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>初めてのKernel compile ～xconfig編～</title><content type='html'>&lt;a href="http://b0r0nji.blogspot.com/2011/05/ubuntu-1104.html"&gt;前回&lt;/a&gt;の続き。カーネル設定はxconfig、あるいはmenuconfigで行う。&lt;br /&gt;基本的にgenericのカーネルの設定をmake oldconfigで引き継ぐので大規模な編集は必要ない。&lt;br /&gt;&lt;br /&gt;最低限必要なのはCPU設定の編集である。&lt;br /&gt;というのはGenericのカーネルは基本的に幅広いハードウェアで動作するように設定されているので、新しいCPUの拡張機能を使ってくれないのだ。というわけで下の画像を参照。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Q1RAPqCM5tE/TdnHLy52adI/AAAAAAAAAB0/_wWZ259Nttk/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-Q1RAPqCM5tE/TdnHLy52adI/AAAAAAAAAB0/_wWZ259Nttk/s320/Screenshot.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;まずProcessor FamilyがGeneric-x86_64になっている。今回はAMDのE-350向けなので（表示にはないが）ひとまずK8向けを選択する。&lt;br /&gt;またこれは2コアのCPUなのでMaximum Number of CPUsを2に設定。&lt;br /&gt;Hyper ThreadingなんてないのでSMT Scheduler SupportもOFFにする。&lt;br /&gt;Preemption ModelはPreempti&lt;span style="font-family: inherit;"&gt;ble Kernel（Low Latency Desktop）に&lt;/span&gt;&lt;code style="font-family: inherit;"&gt;、Timer Frequencyは1000Hzにするといいらしい。これは最近のマシンならどれでも当てはまるようだ。CPUの設定&lt;/code&gt;&lt;code&gt;はこんなもの。&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;次はこちらの画像を見ていただきたい。&lt;/code&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-AP29YUct0nQ/TdnHMtVANAI/AAAAAAAAAB4/8aIbuNI_blI/s1600/Screenshot-Linux-x86_64+2.6.38.2+Kernel+Configuration+%2528Qt3%2529-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://3.bp.blogspot.com/-AP29YUct0nQ/TdnHMtVANAI/AAAAAAAAAB4/8aIbuNI_blI/s320/Screenshot-Linux-x86_64+2.6.38.2+Kernel+Configuration+%2528Qt3%2529-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;code&gt;カーネルには様々なドライバが組み込まれている。おかげでインストールしてすぐに多用なハードウェアを利用できるのだが、少々充実しすぎてはいないだろうか？&lt;/code&gt;&lt;br /&gt;この画像にある分をぱっと見るだけでも……1，FusionMPTなんて使ってるのは見たことない 2，10000Mbit Ethernetなんてリッチなものは持ってない 3，Bluetoothも使わない 4，WiMAXも内蔵してない 5，Macintosh Device DriverなんてあってもAppleのハードにインストールしなきゃ意味がない 6，Parallel Portなんて今時付いてすらいない ……等々、要は無駄なドライバがたっぷり入っているのだ。よーく見極めて無効にしておくと軽量化できるはず。覚えている限りだと他にはIrDAとかIEEE1394とかもどんどん無効にした。&lt;br /&gt;&lt;br /&gt;ちゃんと把握できているのなら自分の使っていないハードのドライバも個々にOFFにしよう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;終わったら保存して終了するだけ。&lt;br /&gt;もし分からなくなったり元に戻せなくなったりしたらまたgenericのconfigをコピーしてきてmake oldconfigすればいい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-2556184738366216098?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/2556184738366216098/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/kernel-compile-xconfig.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2556184738366216098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/2556184738366216098'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/kernel-compile-xconfig.html' title='初めてのKernel compile ～xconfig編～'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Q1RAPqCM5tE/TdnHLy52adI/AAAAAAAAAB0/_wWZ259Nttk/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4392387697402242411.post-4551806849623915833</id><published>2011-05-23T10:30:00.004+09:00</published><updated>2011-05-23T12:31:26.825+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu 11.04ではじめてのカーネルコンパイル＆インストール</title><content type='html'>カーネルコンパイルをしようとしたきっかけはこの記事だ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nippondanji.blogspot.com/2011/04/mysql-5530.html"&gt;MySQL 5.5をわずか30秒足らずでコンパイルするためのテクニック&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;実際の所この方法での高速化のキモは並列コンパイルとccacheなのだが、ccacheで高速化するのはソースが全く変更されていない場合のコンパイルだけという非常に限定された状況なので、言ってみれば汎用性に欠ける。並列化はともかく。&lt;br /&gt;&lt;br /&gt;そこでカーネルコンパイルに目を付けた。Linuxカーネル自体をハードウェアにあわせてコンパイルすることでシステム全体の高速化が図れる！というのにわくわくして調べながら試してみたのだが、何十回となく失敗を繰り返した。再インストール30回近くに及び、ようやく方法を見つけたので記事として残しておくことにする。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# sudo -s&lt;br /&gt;面倒なので以下はすべてrootで行う&lt;br /&gt;&lt;br /&gt;# apt-get install build-essential kernel-package libqt3-mt-dev libncurses5-dev&lt;br /&gt;それぞれコンパイル、パッケージ化、（後で説明する）xconfigのために必要となる。&lt;br /&gt;&lt;br /&gt;# apt-get install linux-source-2.6.38&lt;br /&gt;カーネルのソースもaptで手に入る時代。素晴らしいね。&lt;br /&gt;&lt;br /&gt;# cd /usr/src&lt;br /&gt;# tar xvjf linux-source-2.6.38.tar.bz2&lt;br /&gt;&amp;nbsp;# cd linux-source-2.6.38&lt;br /&gt;ディレクトリ移動して解凍。そして移動。&lt;br /&gt;&lt;br /&gt;# cp /boot/config-2.6.38-generic .config&lt;br /&gt;# make oldconfig&lt;br /&gt;ひとまず現在の設定をコピーして適用する。&lt;br /&gt;一から自分で設定すると面倒きわまりないので。&lt;br /&gt;&lt;br /&gt;# make xconfig&lt;br /&gt;GUIで各種設定を行う。項目については&lt;a href="http://b0r0nji.blogspot.com/2011/05/kernel-compile-xconfig.html"&gt;別の項で詳述する&lt;/a&gt;。&lt;br /&gt;別にmake menuconfigでも同じ事ができるのだが、xconfigの方が遥かに楽。&lt;br /&gt;&lt;br /&gt;# ln -s /usr/src/linux-source-2.6.38/ubuntu /ubuntu&lt;br /&gt;シンボリックリンクを張る。&lt;br /&gt;&lt;br /&gt;# make-kpkg clean&lt;br /&gt;# make-kpkg --initrd kernel_image kernel_headers --append_to_version="string" --revision=123 -j 5&lt;br /&gt;ここでも早速並列コンパイルを使おう。-jで指定できる。&lt;br /&gt;いろいろな記事を見たが、CPUのコア数+1を指定するのがよさそうだ。（要検証） &lt;br /&gt;数値を指定しない場合はめいっぱいスレッドを立ててしまうため逆に遅くなるという話もある。&lt;br /&gt;バージョン（小文字に限る）、リビジョン（数字に限る）は好きなように指定していい。&lt;br /&gt;&lt;br /&gt;放置しておけばkernel_imageとkernel_headersの2つのdebができあがる。&lt;br /&gt;PhenomII X4 940で-j 5を指定してだいたい30分といったところだろうか？&lt;br /&gt;&lt;br /&gt;あとはできたdebを&lt;br /&gt;# dpkg --install ～.deb&lt;br /&gt;image-&amp;gt;headersの順にインストールするだけ……で済んだらいいのだが、実はそうは問屋が卸さない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これだけだと新しいカーネルでドライバ類をインストールしようとするとコケる。&lt;br /&gt;それだけならいいが最悪の場合起動すらしなくなる。&lt;br /&gt;調べてもこれについて書いている人はどうやらいないよう。&lt;br /&gt;&lt;br /&gt;そこで&lt;b style="color: red;"&gt;ここからがこの記事の要だ&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;再起動後に&lt;br /&gt;# cd /lib/modules/(新しいカーネル名)&lt;br /&gt;# ln -s /usr/src/linux-headers（新しいカーネル名） build&lt;br /&gt;としてシンボリックリンクを張る。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これで「ちゃんと」動くようになるはずだ。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;なおこの記事のためには以下のサイトを多分に参考にした。&lt;br /&gt;・&lt;a href="http://dogmap.jp/2009/06/19/rebuild-kernel/"&gt;カーネル再構築のススメ&lt;/a&gt;&lt;br /&gt;・&lt;a href="http://dogmap.jp/2009/06/19/rebuild-kernel/"&gt;Ubuntuのカーネル再構築&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4392387697402242411-4551806849623915833?l=b0r0nji.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://b0r0nji.blogspot.com/feeds/4551806849623915833/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/ubuntu-1104.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4551806849623915833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4392387697402242411/posts/default/4551806849623915833'/><link rel='alternate' type='text/html' href='http://b0r0nji.blogspot.com/2011/05/ubuntu-1104.html' title='Ubuntu 11.04ではじめてのカーネルコンパイル＆インストール'/><author><name>boronji</name><uri>http://www.blogger.com/profile/17428560967575402655</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
