wordpressのダッシュボード画面にあるその他の情報を削除

wordpressの管理画面にログインすると、ダッシュボード内にその他のサイトの更新情報が標準で表示されるようになっている。毎回ログインするたびにrssを読み込んでいるようなので必要ないから表示されないようにしてみる。wp-admin以下のindex.phpファイルを覗いてみると3つのrssを読み込んでいることがわかる。wp-admin/index.phpの8行目〜12行目に以下のコードがある。これを見るとindex-extra.phpから引数をつけて呼び出しているのがわかる。

function dashboard_init() {
	var update1 = new Ajax.Updater( 'incominglinks', 'index-extra.php?jax=incominglinks' );
	var update2 = new Ajax.Updater( 'devnews', 'index-extra.php?jax=devnews' );
	var update3 = new Ajax.Updater( 'planetnews', 'index-extra.php?jax=planetnews'	);
}

では、今度はwp-admin/index-extra.phpファイルを覗いてみる。ダッシュボード内でその他の情報として表示されている部分のrssは、index-extra.phpファイルの42行目〜48行目の部分、”planetnews”という部分がどうもそれらしい。そこに
http://r.hatena.ne.jp/WordPress-Japan/WordPress/rssからfetch(取得)するという風にある。それではその部分を修正してrssを取得しないようにしてみる。ただ単にアドレスの部分を削除するだけ。

変更前

case 'planetnews' :
$rss = @fetch_rss('http://r.hatena.ne.jp/WordPress-Japan/WordPress/rss');

変更後

case 'planetnews' :
$rss = @fetch_rss('');

修正箇所はwp-admin/index-extra.phpの46行目のアドレス部分を削除するだけ。これで、とりあえずはその他の情報としてダッシュボードに表示されることはなくなった。

objective-cがなぜ難しいか

ここ数日mac os用のアプリケーションを作成するためにobjective-cの勉強をしているのだけれど、どうもプログラムのコードの内容が理解できない。コードを読んでどのような処理が起こっているのかという流れがわからないのが一番の原因だと思う。何かイベントが起こったときにメソッドが呼び出されて、その際に付随するように呼び出されるメソッドがあり、その付随されるようにして呼び出されているメソッドがコードを見ただけではわからないということが理解することを遠ざけている。暗黙的に知っておかなければならない知識というものがobjective-cには必要で、それが今の私にはないためにコードの流れが理解できないのだろう。ゆえに、他人の書いたコードで何が起こっているのかということがわからない。

メソッドの呼び出しについて

objective-cのメソッドの呼び出し方について調べてみたけれど、どうもよくわからない。定義されたメソッドがいつ、どこで呼ばれているのかということがコードを見渡しただけでは把握することができないためとっつきにくい。たのしいCocoaプログラミングという本についているサンプルコードに以下のコードがある。

#import “AppController.h”

@implementation AppController

– (void)dealloc
{
(省略)
}

– (IBAction)readUrl:(id)sender
{
(省略)
//テーブルビューにデータを読み込み
[tableView reloadData];
}

– (int)numberOfRowsInTableView:(NSTableView*)tableView
{
(省略)
}

//NSTableViewデータソース
– (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row
{
(省略)
}

@end

上記の4つのメソッドがサンプルのプログラムには実装されている。
– (void)dealloc はオブジェクトの解放時に呼び出すメソッド
– (IBAction)readUrl:(id)sender はインターフェース上に配置しているボタンをクリックしたときに呼び出すメソッド
– (int)numberOfRowsInTableView:(NSTableView*)tableView はxmlドキュメントのノードの数を取得するときに呼び出すメソッド
– (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)row はtableviewにデータソースを設定するときに呼び出すメソッド

プログラムは単純なRSSリーダーで、インターフェース上のボタンをクリックしたらテキストフィールドに入力されたRSSのアドレスを読み込んで内容をテーブルビューに表示させるというもの。ただ、コードを見ただけではメソッドがどのようにして呼び出されているかというのがわからない。インターフェース上のボタンをクリックすると- (IBAction)readUrl:(id)senderが呼び出される。呼び出された後はXMLの解析がされてメソッドの最後に[tableView reloadData];を呼び出す。この部分で- (int)numberOfRowsInTableView:(NSTableView*)tableViewと- (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)tableColumn row:(int)rowを呼び出している。[tableView reloadData];を呼び出すとさっきの二つのメソッドが呼び出されるということを知らないとコードを見ただけでは迷子になってしまう。さらにtableViewがインターフェース上に表示された時点でも先ほどの二つのメソッドが呼び出される。ちょっとわかりにくいなぁ・・・。

dyld: Library not loaded: @executable_path

dyld: Library not loaded: @executable_path/../Frameworks/Connection.framework/Versions/A/Connection
Referenced from: /Users/nakahira/testApp/build/Debug/testApp.app/Contents/MacOS/testApp
Reason: image not found

ftp test はシグナル 5(SIGTRAP)により終了しました。

今度は上記のようなエラーが出た。ダイナミックライブラリが読み込むことができなかった模様。
@executable_path/../Frameworks/ に /Connection.framework が無いよということなのだろう。@executable_path/../Frameworks/はどこのことかというと、システムのライブラリのFrameworks(/System/Library/Frameworks)になる。その場所に、/Connection.framework があれば読み込むことができるようになる。実体でもシンボリックリンクでも。環境を構築するのも大変だ。

ZeroLink: unknown symbol '_NSApplicationMain'

[Session started at 2008-03-21 00:22:13 +0900.]
ZeroLink: unknown symbol ‘_NSApplicationMain’
testApp はシグナル 6(SIGABRT)により終了しました。

macのxcodeでcocoaアプリケーションを作成中に上記エラーが出た。 何のことやら・・・と思っていたら作成しようとしているプロジェクトにフレームワークの追加がされてなかったことが(私の場合は)原因だった。

プロジェクトのアイコンを右クリックして追加を選択し、そして既存のフレームワークを選択して開発に必要なフレームワークを追加することでこのエラーは消えた。

フレームワークの参照が難しすぎ

mac os用のソフトウェアを作成するためにxcodeを使ってプログラミングをしようとしていたのだけれど、いつも通りプログラミングを始める前の環境構築に苦労した。既存のフレームワークを使うことで手早くソフトを開発しようと都合のいいことを考えていたら、フレームワークの参照の設定の仕方からわからない体たらく。さらにフレームワークを設定する前にそのフレームワークを自分で作成しなければならないことがわかって、さらにその前の準備としてsubversionというソフトウェアをインストールしないといけなくて、そのsubersionというのはどうやってインストールするのかというのを調べて・・・

プログラムを組まないで半日潰れた。でもまあ、なんとなく仕組みはわかってきたので無駄骨ということにはならなかった。

mschartが表示されない

vb.netで作成したwindowsアプリケーションにグラフを表示させてみようと思って、mschartというグラフ描画コンポーネントを使うことにした。そして、実装が終わってリリースしたものを他のマシンで動作確認しようとしたら、問題が発生したためアプリケーションを終了しますということになった。エラーの原因は、mschartを動かすためのvb6ランタイムがインストールされていないことがどうもそれらしい。vb6のランライムがインストールされていれば、mschartを表示することができる。今私が作成しようとしているのはvb.net用のアプリケーションなので、動かすためには.net frameworkをインストールする必要があるけれど、それにさらにvb6のランタイムが無いと動かないアプリケーションというのはダサすぎて作りたくない。というわけで、mschartを使うのはやめて別のコンポーネントを使ってグラフを表現することにしてみる。

select文で特定のセルに文字列を挿入する

sqlのselect文で列の値へテーブルの値ではなくて、特定の文字列を挿入した場合のsql文。たとえばテーブルの合計を出したい場合などのとき、1列目のセルの値は文字列で’合計’、2列目のセルの値はsum関数で取得した合計値を入れる・・・というようなレアなケース。

サンプルコード

SELECT ‘合計’,SUM(列1) FROM テーブル1

というような具合。簡単過ぎてググっても見つからなかったので覚え書き。

データグリッドの列の並び順が変わってしまう

datagridviewへdatasetにセットされたテーブルをバインドしたとき、一度目のバインドでは思い通りの列の並び順にならぶ。次に、同じデータグリッドへ列数が少ないテーブルをバインドする。これも思い通りの列の並び順で表示される。そして次に、一度目と同じテーブルをセットしたら、2度目の並び順を引き摺ったまま表示されてしまい、思い通りの並び順になってくれない。

またこれもvisual studioのわけのわからないバグなのだろうか。とりあえずググって調べてみたら、データグリッドの列の表示順を設定することができるプロパティがあることがわかったのでそれで対処することにした。

サンプルコード

        me.datagridview1.Columns(0).DisplayIndex = 0
        me.datagridview1.Columns(1).DisplayIndex = 1
        me.datagridview1.Columns(2).DisplayIndex = 2
        me.datagridview1.Columns(3).DisplayIndex = 3
        me.datagridview1.Columns(4).DisplayIndex = 4
        me.datagridview1.Columns(5).DisplayIndex = 5

参考サイト

DataGridViewの列の並びがビルド時に変わるのを防ぎたい

visual studio 2005 が不具合を起こした

デバッグ作業中にブレークポイントを設定してからデバッグを開始したら、ブレークポイントのマークが赤い丸じゃなくて黄色で?マークが付いたものにいきなり変わった。なんぞこれ?とは思ったけど、特に気にせずにデバッグ作業をやってみるとブレークポイントに引っかからない。その?マークがついた黄色い丸のブレークポイントの変わりに現れたものにマウスカーソルをのっけてみると、

ブレークポイントは現在の設定ではヒットしません。ソースコードが元のバージョンと異なります。

という風に怒られる。いきなりそんなこと言われても全然思い当たる節がない。とはいってもデバッグできないと困るのでエラー内容に書いてある解決方法の、ツールのオプションからデバッグを選択して、その全般の”元のバージョンと完全に一致するソースファイルを必要とする”のチェックをはずすということを設定した。これで、ブレークポイントで止まるようになった。が、しかし、デバッグの止まり方がおかしい・・・。ステップインで一行ずつ処理を追いかけてみると、if文の分岐でその中身を全部通過している。っていうか分岐していない。そういえばいつものvisual studioのエディタの見た目もなんかおかしい。(ブロックの始まりの一文がなんか背景がグレーっぽい色になってるし)

と、色々焦りまくって試行錯誤した結果私が発見した強引な対処法。

  1. デバッグでステップインの進行が怪しい関数をひとまず切り取る。
  2. すると、コンソールにエラーがズラーっと表示される。宣言がされてないとかメンバーじゃないとかめちゃくちゃ怒られる。
  3. めいいっぱい怒られた後で、切り取った関数をもとにあった場所へ貼り付ける。

このようなことをやってみたら、私の環境では直りました。同じような現象になっている人はやってみると直るかもしれません。