サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
インタビュー
rainbowdevil.jp
MacBook Pro(15-inch Late 2011)を使っていて、いつの間にかkernel_taskがCPUを使いまくってマシンのレスポンスがとても遅くなってしまった。日本語で「あいうえお」と入力すると、1秒ごとにあ、い、う、え、おと入力されるぐらい遅い。 結論を言うと、ファンのホコリの除去とSMCをクリアしたら直った。 同じような現象が出た方のために経緯とチェックすべき点を書いておく。 最初、VMware Fusionを起動しているときに遅くなったことに気がついたので、VMwareが原因かなと考えていた。 が、VMwareを起動していないときにも遅くなってきた。 iStatで確認すると、kernel_taskがCPUを400%ぐらい使っている。 しかもロードアベレージがやたら高い。起動直後はロードアベレージが150とかになっている。 そして起動直後からファンがフル回転の6200回
Google Waveは今までにないリアルタイム性と、多人数で同時に編集してもコンフリクトが発生しない仕組みを持っています。しかし、単にレスポンスが良いシステムであれば他にもありそうです。Google Waveがなぜレスポンスが良いのか、Google Waveの仕組みを見てみましょう。 Google Wave以前のツール Google Wave以前にも似たようなツールはありました。たとえばGoogle Docsは複数人で同じドキュメントを編集することができます。しかし、同じドキュメントでも同時に同じ箇所を編集すると、コンフリクトが発生し手動でマージが必要になってしまいます。編集の衝突が起こらないようにするには、ある人が編集しようとすると、他の人が編集できないようにロックする必要があることを示しています。 操作変換 Operational Transformation (OT) ではGoog
複数のPCを同時に使う必要がある場合、それぞれのPCにキーボード、マウスを繋いで使い分けるのはとても不便です。 そんな時は、1台のキーボードとマウスを複数のマシンで使い回すことができるキーボード共有アプリを使うと幸せになれます。 キーボード共有アプリはオープンソースだと有名なSynergyがあり、今までSynergyを使ってきたのですが、ちょっとバグに悩まされたので別のソリューションを探してみました。 そんな中で一番良さそうだったのは有料になってしまいますが、ShareMouseです。 対応OSはWindowsとMacのみなのですが、次の利点がありました。 マシン間のドラッグアンドドロップでファイルorディレクトリをコピーできる。 ファイルorディレクトリをクリップボードにコピーし、それを別のマシンでもペーストできる。 サーバ、クライアントの区別が無く、さらに接続先のサーバIP設定なども必
Ubuntuをインストールしても、有線LANがつながらない場合がある。 そんな場合はドライバが入っていない可能性があるので、入れるとOKだ。 まずはLANがつながらない理由が、NICを認識していないかどうかの確認のため、次のコマンドを実行。 $ ifconfig 127.0.0.1のローカルループバックのみしか表示されていなければ、それはNICを認識していないことになる。ここに有線LANまたは無線LANが表示されていれば、つながらない理由は他にあるので今回の対応方法以外の解決策が必要だ。 ローカルループバックのみ表示されているならば、今回の手順でドライバを入れればOKとなる。 次に何のドライバが必要か確認する。次のコマンドを実行すると、イーサネットのチップとして何を使っているかが確認できるので、メーカーからドライバをダウンロードしよう。 $ lspci | grep ‘Ethernet|N
Rails4でturbolinksと言う機能が増えました。 これは、Rails4上のリンクをクリックすると、実際には画面遷移せず、Ajaxでコンテンツだけ取得してbodyを書き換え、より高速に画面を切り替えるという機能です。 詳しくはこちら。 Rails 4のturbolinksについて最低でも知っておきたい事 で、実際に動かしてみるとURLも普通に書き換わるし、戻る進むボタンも有効になっているし、普通の画面遷移と見分けがつきません。 JavaScriptによるURLの書き換えはwindow.location.hashによるアンカーしか変更できなかったはずでは・・。 と思ったら、HTML5からpushState、popStateという機能が追加され、JavaScriptからURLの書き換えができるようになっていました。 ということで早速やってみました。 適当すぎるデモはこちら。 デモではボ
Rails3で、モデルの多対多参照を実現するにはhas_manyの:throughオプションで簡単に実現することができる。 が、同一モデルで多対多をやろうとすると、ちょっと工夫が必要だ。同じモデルへの外部参照キーが二つできるので、それぞれ別名をつけてやる必要があるからだ。 参考にしたのは次のページ。 Rails self-referential has_many through with custom naming of join table ここでは、ユーザが他のユーザと友達登録することを想定する。UserモデルがFriendモデルを通して多対多の関連を持つ。 ポイントはFriendクラスへのhas_many参照を作り、そのmas_many参照をthroughしてその先のUserクラスのインスタンスを取得する部分かな? has_manyのsourceがfromとtoが逆なのは、その関連の
Androidアプリを開発していると、画像の取り扱いでメモリリークしていたり、OutOfMemoryErrorが発生する事があります。 そのような場合は、Javaヒープメモリのダンプを取り、どのBitmapがメモリリークしているか、または無駄にメモリを食っていないかを確認し対応します。また、Javaヒープダンプから画像データを抽出し、具体的にそのオブジェクトがどの画像かを確認します。 この記事でしていること。 ・Androidアプリのヒープダンプを取得してメモリリークの調査。 ・ヒープダンプからBitmapを復元し画像を確認。 用意するもの。 ・DDMSでヒープダンプを取得するためAndroid SDK ・ヒープダンプを解析するためのMemory Analyzer(MAT) ・ヒープダンプから抽出した画像を確認するためのGIMP まずヒープダンプを取りましょう。 解析対象のプログラムを動作
Linuxマシンで何かプロセスを動作させていて、プログラムのログを確認すると「昨日の晩はやたら重かったけどなんかあったかな」とその瞬間の状態を確認したかったりする。 そんなときはシステムの状態をログに残すsysstatが便利。 何ができるかというと、CPU使用率やメモリ使用率、ネットワークのトラフィック、IOなどをログに残してくれる。 sysstatについてはいますぐ実践! Linux システム管理を参照する。 sysstatを使うとバイナリファイルにログが吐かれ、sarコマンドでテキスト形式で状態を確認する事ができる。 が、テキストファイルなのでいまいち把握しづらい。 そこで、sarをグラフで表示してくれるksarを使用する。 これが結構便利だ。 SSHで接続して、相手サーバでsarコマンドを実行して自動でデータを取得しグラフを表示してくれる。よって、ログファイルをコピーしてきて・・・な
AndroidはLinuxベースなので、メモリ不足になると悪名高いOOM Killerが実行される。 テストのためにOOM Killerを自分で引き起こしたい事もある。 そういう場合は以下のコマンドを実行すればOK。 ちなみにroot取れてないとダメ。 $ adb shell “echo f > /proc/sysrq-trigger”
Mac上にRoR3をインストールする方法は以前紹介した。今度はUbuntu12.04上にRoR環境を構築する。 Ubuntu12.04には必要なライブラリが最初から入っていないので、入れる。 $ sudo apt-get install zlib1g-dev ちなみに上記を実行しないと、後々のrailsインストール時に次のようなエラーが出る。 $ gem install rails ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NameError) uninitialized constant Gem::Commands::InstallCommand 続いてrbenvのインストール $ sudo apt-get instal
Jettyをデバッグする際に必要になったのでメモ。 オープンソースなプロジェクトのソースコードを拾ってくると、Mavenのpom.xmlだけあり、Eclipseのプロジェクトの設定は無いことが多い。 自分でEclipseのプロジェクトを設定するのは激しく面倒なので、pom.xmlから生成するのがよいだろう。 ちなみにMavenは3.0.1で、pom.xmlはJetty6のmodules/utilのpom.xmlに対して行った。 まずJettyをsvn coして、pom.xmlのあるディレクトリへ移動する。そして次のコマンドを入力するだけ。 >mvn eclipse:eclipse すると.classと.projectを生成してくれるので、後はEclipseのimport -> Existing Projects into Workspaceを選んでプロジェクトをインポートすればOK ほかに
HTML5には、Media Capture APIと言うものがあり、HTMLからカメラのキャプチャや音声の録音ができるらしい。 と言う事でちょっと試してみた。 現状ではPC向けブラウザでは対応しておらず、Android3.0以降で対応しているとのこと。 Mac版のChrome 21では、普通のファイル選択フォームとしか動作しなかった。 Android4.1のGalaxy Nexusで動作確認をした。 とりあえずHTMLは次のような感じ。 <html> <body> カメラ<br /> <input type="file" accept="image/*" capture="camera" id="capture"><br /> <br /> マイク<br /> <input type="file" accept="audio/*" capture="camera" id="capture2
Ubuntuはデフォルトでファイアウォールが設定されていない。 Ubutnuではufwを用いて簡単にファイアウォールを設定することができるので、メモを残しておく。 ufwのインストール デフォルトで入っていると思うけれど、入っていない場合はインストールする。 $ sudo apt-get install ufw ufwの状態の確認 ufwが有効になっているかどうかは次のコマンドで確認することが出来る。 $ sudo ufw status ufwが有効になっていない場合は次のように表示される。 $ sudo ufw status 状態: 非アクティブ SSHとHTTPだけ許可する設定 まず最初にすべて拒否にする。この段階ではufwは有効になっていないので、実際に通信が遮断されるわけではない。 $ sudo ufw default deny 次にSSHを通す。 $ sudo ufw allow
Androidでは、通常他のアプリのデータベースを読み込むことはできない。 しかし、次の方法をとることでデータベースを開くことができる。 読み込む先のアプリと、そのDBを読み込むアプリのAndroidManifest.xmlのmanifestタグに同じIDを指定したandroid:sharedUserId属性を追加する。 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.rainbowdevil.test" android:versionCode="1" android:versionName="1.0" android:sharedUserId="foo.bar"> SQLiteDatabase.openDatabaseで他のアプリのDBを開く private static S
編集中の変更をキャンセルし、最後にコミットされた状態に戻したいことがある。gitコマンドでやるにはgit checkoutだが、EGitではcheckoutと言う項目が無い。 EGitでそれをどうするかというと、プロジェクトを右クリックし、[Team]-[Reset]を選択しよう。 Resetダイアログが開くので、ReferencesのHEADを選ぶと最後にコミットされた状態に戻すことができる。 Reset TypeをHardとすることで全部戻るようだ。(他にSoft、Mixedがあるが詳しい違いは未調査)
Rails3で、bootstrapを入れるなどすると1ページ読み込むたびに複数のJSファイルやCSSファイルを読み込むため、ログがぶわーっ!っと流れてしまい、ログが使い物にならなくなる。たとえば次のようなログが大量に流れる。 Started GET "/assets/twitter/bootstrap/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2012-05-11 17:30:36 +0900 Served asset /twitter/bootstrap/bootstrap-collapse.js - 200 OK (2ms) Started GET "/assets/twitter/bootstrap/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2012-05-11 17:30:36
Ruby on Rails3で、Flashから何らかのデータをPOSTしようとすると、次のように怒られる。 WARNING: Can't verify CSRF token authenticity これは、Railsでフォームを使うとCSRF対策にトークンが自動生成されるんだけど、そのトークンが送られてないよ!と怒っている。GETメソッド以外はCSRFトークンが必須となっているようだ。CSRF対策を無効にして回避することも出来るのだけれど、さすがにそれはしたくない。と言う事で、FlashにCSRFトークンを渡し、FlashからPOSTする際にそのトークンを渡すようにする。ついでにセッションIDも同じように渡し、POSTする際にセッションが有効になるようにす 今回想定するアプリは次のようなモノだ。 1. Rails上で作成したWebページにFlashアプリを埋め込む。 2. Flashアプ
今まで、Linux環境にRoRを入れて開発していたけれど、Mac上にRoR環境をつくって開発してみる。 情報は次のサイトを参考にした。これらのサイトの方が詳しいのでそちらを見た方が良いけれど、自分用に簡単にまとめてみる。 これからRubyを始める人たちへ まず、Rubyのバージョンを確認する。 $ ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] と表示されたら古いRubyを実行しているので、新しいバージョンを入れよう。 Rubyはrbenvと言う複数のRubyのバージョンを同時に使えるようにするRubyバージョンマネージャーを使ってインストールする。 rbenvをインストールするには、Homebrewと言うパッケージマネージャーを使う。Homebrewをまだインストールしていない場合は、適当にググっ
Emacs 23.4をビルドしてみるで、最新のEmacsをMacにインストールすることができた。 テキストファイルをEmacsに関連づけていると、新しいファイルをFinderなどで開く際に、新しいウインドウで次々開いてしまって不便なことがある。 Finderでテキストファイルをダブルクリックしたときに、Emacsが起動しているとそのEmacsでファイルを開いて欲しい。 それを実現するのがemacsclientだ。実はEmacs 23.4をビルドしてみるでインストールしたEmacsの中にもemacsclientが入っているのだけど、unixコマンドとなっていて、appパッケージになっていない。 そこで、Platypusを使うとunixコマンドをappパッケージにすることができるので、emacsclientをMacのアプリケーションにしてみた。 情報元はCocoa Emacs: emacscl
XMPPを理解したくてマスタリングXMPPを購入、ちょっと読んでみた。基本的なプロトコルはシンプルそうだ。 Smack APIとやらを使うと、簡単にJavaでXMPPのクライアントが作れると言うことで、作ってみた。 次のコードでログインする。 connectionConfiguration = new ConnectionConfiguration("talk.google.com",5222,"gmail.com"); xmppConnection = new XMPPConnection(connectionConfiguration); xmppConnection.connect(); xmppConnection.login(username, password); 次のコードでチャットを開き、受信したメッセージを表示。 Chat chat = xmppConnection.ge
ネットワークの基本的なプロトコルが誕生した当時は、ここまで日常生活にその技術が使われると思っていなかったのか、攻撃に対して得に考慮されていない。たとえばデータリンク層のイーサネットでは誰かに対して情報を伝えるとき、その話し相手と直接話すのではなく大声で叫んで情報を伝えているようなものだ。 聞いた人がたまたま送信相手だった場合は「ああ、俺に伝える情報だな。メモしておこう」となるが、送信相手じゃなかった場合は「俺宛の情報じゃないし聞き流そう」と言う感じ。 そのため、もし悪意を持った人が「俺宛の情報じゃないけどメモっとこう」とすると簡単に盗聴ができるわけだ。 が、最近はハブがスイッチングハブになってきてるので、話し相手にしか聞こえないようにデータを流して盗聴されにくくはなっている。だからと言ってTelnetやFTPのような平文でパスワードなどを流すのが安全と言うわけではない。IPアドレスからMA
Eclipse Indigo(3.7)から、EGit1.0がデフォルトで付属されるようになり、gitを使う機会が多くなりそうだ。 今まではSubversionを使っていたけれど、個人用のリポジトリもgitに移行していく。 さくらのVPSで稼働しているUbuntu上にリポジトリを作成する。 さくらのVPSは秘密鍵付きのSSHでログインしているので、それでgitにもアクセスする。 gitリポジトリの作成 最初に、サーバ側でリポジトリを作成する。適当なディレクトリでgit init –bare –shared=trueを実行すればOKだ。 EclipseのSSH設定 次に、EclipseでSSHのキーを登録する。PreferencesのSSH2のページを開こう。 Key ManagementのLoad Existing Keyを選択し、既存のキーを選択する。もちろん既存のキーがなければ生成する。
kenji 14:35 コメントする カテゴリー:C++ JavaではロギングにLog4Jを使用している。 現在、Linux上でC++を使用してアプリを書いているが、同じようにリッチな情報でロギングしたい。 と言うことで、同じapacheのLog4cxxを使用する。Log4cppではファイルの行番号などを一緒にログに出すことができないっぽいのでLog4cxxに。 Log4cxxセットアップメモ。 Log4cxxから落とす。 ./configure --prefix=hoga すると次のエラーが。APRが無いと怒られる。 checking for APR... no configure: error: APR could not be located. Please use the --with-apr option. 仕方ないので入れる。 wget http://www.meisei-u.
Google Waveで遊ぼう! このサイトはGoogle Waveを広め、Google Waveのガジェットやロボットを開発して遊んでみようというサイトです。 Google WaveはGoogle I/O 2009で発表された新しいコミュニケーション&コラボレーションツールです。友人とチャットのような感じでコミュニケーションを取ったり、Wiki的に多人数で同じページを修正したりして情報のまとめサイト的な物を作ったりすることができます。今はまだPreview版ですが、あなたもWaveしてみませんか? Google Waveは何ができる? Google Waveでは、友人と遊びに行く約束をチャットでしたり、仕事のメンバーと打ち合わせでWaveをWiki的に使ったり、様々なコミュニケーションをする事が出来ます。チャット的に書き込んだメッセージや、Wiki的に記事を書いたりした変更は、入力途中の
Google Waveはそのサーバの実装がオープンソースで開発されています。オープンソースで開発されているため、あなたもサーバプログラムをダウンロードし、インストールする事でGoogle Waveのネットワークを拡張する事が出来ます。このページではGoogle Waveのプロトタイプ実装であるFedOneサーバをインストールしてみます。 環境 OS Ubuntu9.10 各種ツールのインストール Javaのインストール FedOneはJavaで書かれていますので、Javaの環境をインストールします。 $ sudo apt-get install sun-java6-jdk Apache Antのインストール JavaのビルドツールであるApache Antをインストールします。 $ sudo apt-get install ant Mercurial FedOneサーバはMercurial
kenji 01:36 コメントする カテゴリー:Android 2ちゃんブラウザが無い携帯プラットフォームは日本では流行らないらしいのでつくってみた。 と言っても半日ぐらいでさくっと実装しただけなのでしょぼしょぼだけど。 2ちゃんブラウザって2ちゃんAPIをいろいろ叩いたりしないといけないのかと思っていたけど、全然そんなことは無く、生データをパースするだけだったので楽だったな。 難しいのはいかに便利なツールを作るかと言うところだと実感。 特に携帯端末だと画面が小さく、表示できる物が限られているので、何を表示する表示しないかの選択が難しそうだ。 普通に2ちゃんブラウザを作っても面白くないので、今回は2ちゃんにアクセスする部分をServiceで作成してみた。 ServiceとはNTサービスやDaemonみたいな物のAndroid版で、GUIプログラムが終了してもServiceは裏で動き続ける
kenji 20:44 コメント (2) カテゴリー:Diary SVM(サポートベクターマシン)でちょっと遊んでみる。 以前はk-NN法でパターン認識したが今回はSVMだ。 SVMは・・・えーと・・・どんなのかというと・・・、うーんと・・・・難しくて理解不能でしたorz 理解しようと思っても、各要素分野がすでに難しすぎるのでさっぱり。 詳しくはサポートベクターマシン入門とか。 教師有り学習のパターン認識で、TinySVMを使えばサクッと使うことができると理解しておけばとりあえず良いだろう(ホントか?) 学習内容は、例によって5x5マスに書いた数字を認識するというものだ。 以下のように点の有る無しを0,1で表す。 1 1:0 2:1 3:1 4:0 5:0 6:0 7:0 8:1 9:0 10:0 11:0 12:0 13:1 14:0 15:0 16:0 17:0 18:1 19:0 2
kenji 23:23 コメント (2) カテゴリー:Linux 家のメインマシンをすべてLinuxにしたので、Linuxで日本語を入力することが多くなってきた。 UbuntuにはAnthyがデフォルトでインストールされているがAnthyはお世辞にも変換効率がよいとはいえない。 そこでATOK X3を購入。 俺はATOK for linux 、ATOK Xユーザなので優待版のダウンロード版で4,725円だった。 使用しているのはUbuntu 7.10 日本語ローカライズド DesktopなのでUbuntu 7.10でのインストール方法を参考にした。 この手順に進めるとすぐにインストールが完了し、無事使うことができた。 無料のAnthyと比べるのは酷だけど、遙かにすばらしい変換効率でさすがATOKって感じだ。 これはお金を出す価値があるなぁ。JustSystemsには引き続きLinux対応を
kenji 03:47 コメント (3) カテゴリー:Android 冬休み中に登録しようと思ったら、登録直前に実機だと壮絶に遅くなる問題が発覚して時間かかっちまったぜ・・・。明日仕事なのにもう4時前だよ・・・。 昨日のバージョンにお気に入り機能などを追加。 Android Marketはアプリをアップロードしたらほぼリアルタイムに反映されるんだな。なかなかすばらしい。 BettikはAndroid Marketのapplicationのcommunicationからダウンロードできます。 起動後、メニューから「Upload Board List」を選択し、最新板リストを取得してください。 ちなみにこの更新はめっちゃ遅くて、システムから「こいつ死ぬほど遅くてレスポンス無いけど殺して良いか?」と聞かれますが殺さないでください。裏でめっちゃがんばってます。 あー、明日仕事やべぇ。 ちなみに妖々
次のページ
このページを最初にブックマークしてみませんか?
『RainbowDevilsLand – けんじの外部記憶です。』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く