WordPressでカテゴリの順序を変える

このブログは wordpress を使っているのですが、カテゴリの順序が変えられません(どうやら ID 順になっているようです)。

データベースを書き換えてもいいのですが、丁度いい wordpress のプラグイン「Category Order」があるので、使ってみました。

Category Order

20100713_01.jpg

英語版ですが、ドラッグ&ドロップで設定するので、英語がわからなくても問題なし。

20100713_02.jpg

そんな訳で、簡単にカテゴリの順番が変えられました。

20100713_03.jpg

めでたし、めでたし。

 

カテゴリー: ツール | 2件のコメント

ツイッター投稿専用ツール ver.0.1

投降専用…いえ、そうではなくて、投稿専用です。

# 「逃げちゃだめだx3」 というのはお約束でw

本当は、タイムラインとかを実装してから公開したほうがいいんでしょうが、色々と便利なツールがあるので、「投稿専用ツール」という単発で、公開しておきます。

ツイート専用アプリ ver.0.1

20100712_12.jpg:

何ができるのか?と言っても、ツイートするだけです。その他は全くできません。単発機能にてのこの手軽さ(なぜか、WPFを使っているので、起動が思いですがw)

ええと、今後の予定はですね。はい、ご一緒に。

赤くするッ!!!

角を付けるッ!!!

ですね。赤くするのはいいんだけど、角を付ける方法をお悩み中。

 

カテゴリー: 開発 | 4件のコメント

仮想デスクトップツール(WinDeskWide)

備忘録的に、ツールの紹介なぞ。

マルチディスプレイがあればいいのですが、作業的にひとつの画面しかないときは、仮想画面を切り替えて使うといいです。

いくつか探ししたのですが、Windows 7 上で

WinDeskWide
http://bluecard.no-ip.com/freeware/WinDeskWide/

20100712_01.jpg

を使っています。ちょっと前までは、.NET Framework を使ったソフト(名前を失念)を使っていたのですが、良く落ちるので、他を探しました。

私が便利に使っている方法は、

  • 左右の2画面で使う
    → 左画面はお仕事用、右画面はツイッター用。
  • マウスの位置で、仮想画面を移動
    → ホットキーを使うよりもスムースに移動できます。

20100712_02.jpg

ぐらいですね。

時々、IEを見落としてしまうのか、どこにも表示されないこともありますが…まあ、そんなときは「すべてのウィンドウを閉じる」でIEを全て閉じてしまいます。IEだから仕方がない。

これ、マルチディプレイにも対応していて、というか、タスクバーのあるところだけ仮想画面になるので、

マルチディスプレイ&マルチ画面

っていうのもできます。2週間ぐらいは、ノートPCのマルチディスプレイで、そういう使い方をしていました。

カテゴリー: ツール | 仮想デスクトップツール(WinDeskWide) はコメントを受け付けていません

懸案だったブログタイトルを決めました

長らく懸案だった(本当に懸案だったッ!!!)、ブログのタイトルを決めました。

「BTS Develop(仮)」から「moonmile solutions blog」に変更です。

ええと、ツイッターで(思わず)公開しましたが、

moonmile の名前の由来は、太田垣康男著「MOONLIGHT MILE」です。私にとって、結構転機になる漫画でして、宇宙関係としては、他にも

  • プラネテス
  • 度胸星
  • 宇宙兄弟

が手元にあるのですが、「MOONLIGHT MILE」と「度胸星」を圧倒的に何度も読み返します。

どうせならば、ITという分野で月にたどり着くまでの技術を、というエンジニア魂ってところです。

 

さて、一方で、電脳な話として、

  • 攻殻機動隊
  • BOOM TOWN

が手元にあります。内田美奈子著「BOOM TOWN」は、時期的に攻殻機動隊と同じ頃(攻殻機動隊が1991年、BOOM TOWNが1993年)で、いわゆる電脳世界(ヴァーチャルワールド)に正しいアプローチをしている作品です。

昔の恥なんかもちょっと披露したり > 書評日記 第163冊 BOOM TOWN

で、

なんで、今になってブログのタイトルを変える気になったかというと(以前から、moonmile solutions という名前は、名刺には使っているのですが)、内田美奈子女史と太田垣康男氏の2人にツイッターで同時に返事を貰ったら、そりゃ、考えないといけないじゃないですかッ!!! 人として(笑)。

いわゆる、「共時性」というやつですね。

そういう現象があったら、「思い立ったら吉日にしてやるッ!!!」ってのが、ポリシーでして。

まあ、SEO対策もろもろもあるんですが、ひとまず、ブログ名も変えようかなと。

 

カテゴリー: 仕事, ブログ | 4件のコメント

片想いは檸檬の味 ver.0.2 に修正

ありゃ、やっぱりバレましたか(苦笑)

Twitter フォローツール 片思いは檸檬の味 (´・ω・)スね?
http://ameblo.jp/konica/entry-10585660513.html

夜中に仕上げて、まあ、初回だからいいか、と思ってベータ版でアップしたんですが。

やっぱりね、対処しないと。駄目ですね、、、お恥ずかしい。

な訳で、

対処したバージョンをアップしました。
http://moonmile.net/up/TwiFriends.0.2.zip

# 実は、これを WPF で作って画面をカラフルに … なんて考えていたんですが、
# ListBox.SelectedIndex の挙動がおかしいので断念。
# アイコンの表示ぐらいは、したいですよね(アンフォロー専用とはいえw)。

 

 

カテゴリー: 開発 | 12件のコメント

片想いは檸檬の味 ver.0.1 を公開

とある実験をしている途中で、やっぱり、ツイッター外しのツールが必要となってしまいました。

で、いくつか調べてみたのですが、

FriendOrFollow
http://friendorfollow.com/

ManageFlitter ? Fast & Easy Unfollowing for Twitter
http://manageflitter.com/

が良いようです。

が、

  • ブラウザ上で、ちと面倒くさい。
  • さくさく、フォロー外しがしたい(苦笑)

なところから、専用ツールを作ってみました。

TwiFriends

20100709_01.jpg

いわゆる、フォロア整理に特化したツールです。

時系列で表示しているので、下のほうほど古い人、上のほうが新しい人、という具合です。

ひとまず、ベータ版ということで、ここからダウンロードしてください。

.NET Framework 4.0 で作っているので、適宜 http://msdn.microsoft.com/ja-jp/netframework/ff687189.aspx から、ダウンロード&インストールしてください。

 

 

 

カテゴリー: 開発 | 1件のコメント

WPFのListBox.SelectedItemの挙動がおかしい

最近、ツールを作るときに、Windows Forms ではなくて、WPF を使っています。

理由の第一は、UI が綺麗に作れるから、なんですが、通常のフォームアプリケーションを作るのと勝手が違う or 動きがおかしい、とろが多々あって、ちょっと避けるべき理由もちらほら。

今、使っているのは WPF のリストボックスなのですが、どうやら、

  1. リストボックスの項目を Remove メソッドで削除する。
  2. カーソルを設定するために SelectedIndex で選択させる。
  3. この後、カーソルキーの上矢印や下矢印キーを押すと、先頭にカーソルが移動してしまう。

という現象です。

削除する場合は、次のコードのように、DELETEキーを押したときに、選択行を削除します。

private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        int index = listBox1.SelectedIndex;
        listBox1.Items.RemoveAt(index);
        index–;
        if (index < 0) index = 0;
        listBox1.SelectedIndex = index;
    }
}

こうするとですね、せっかく SelectedIndex を設定していのに、上下の矢印キーで先頭の行にジャンプしてしまうんですよね。。。どうも、SelectedIndex の値が、内部で反映されていない気がします。

# 似たような現象を、Siverlight の ListBox で経験したような覚えがあるんだけど…ちょっと、解決策を思い出せず。
# XAML で保持しているプロパティに反映されていない雰囲気なんですね。

解決したら追記を書きます。

追記 2010/07/08
へっぽこ独自Silverlightフレームワークが、そんな動きをしていたなぁと思い出した。
MVVM が分かっていなくて、コントロール自身をINotifyChangedをしていたフレームワーク。
まさか、そんなことあるまいな>MS

追記 2010/07/08
どうやら、バグっぽい。

全く同じコードをWindows フォームで動かすと正常に動くので、Microsoftさんにフィードバックしました。
http://connect.microsoft.com/VisualStudioJapan/feedback/details/573823/wpf-listbox-selectedindex

カテゴリー: 開発 | WPFのListBox.SelectedItemの挙動がおかしい はコメントを受け付けていません

LINQで外部結合を実装する

SQL で外部結合をする場合は、さくっと left join や *= などを使えば良いのですが、LINQ だといまいち不明。

だったので、探してみました。

Visual Studio 2010 – Visual C#
方法 : 左外部結合を実行する (C# プログラミング ガイド)
http://msdn.microsoft.com/ja-jp/library/bb397895.aspx

という感じで、モロ、そのままの記事がありました。以前は、LINQ関係は調べるのが大変だったのですが、これは良さそうですね。

備忘録も込みで、解説を加えておくと、

  • Person、Pet というテーブルがあります。
  • Person(人)は、Pet(ペット)を飼っている、というイメージですね。
  • Personには、ペットを飼っていない人もいます。

        public class Person
        {
            public string FirstName { get; set; }
            public int? PetID { get; set; }
        }
        public class Pet
        {
            public int ID { get; set; }
            public string PetName { get; set; }
        }
        List<Person> persons;
        List<Pet> pets;

こんな風にデータを初期化しておきます。

        // 初期化
        private void button1_Click(object sender, EventArgs e)
        {
            persons = new List<Person>();
            persons.Add(new Person() { FirstName = “masuda”, PetID = 1 });
            persons.Add(new Person() { FirstName = “tomoaki”, PetID = null });
            persons.Add(new Person() { FirstName = “kyonpu”, PetID = 2 });

            pets = new List<Pet>();
            pets.Add( new Pet() { ID=1, PetName=”taro” });
            pets.Add( new Pet() { ID=2, PetName=”risumo” });
        }

■ペットを飼っている人(内部結合)

        // 内部結合
        private void button2_Click(object sender, EventArgs e)
        {
            // ペットがいる人を表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID
                      select new { pe.FirstName, pet.PetName };

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

■ペットを飼っている人もそうでない人も表示(外部結合)

        // 外部結合
        private void button3_Click(object sender, EventArgs e)
        {
            // ペットがいる/いないに関わらず表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID into sub
                      from t in sub.DefaultIfEmpty()
                      select new {  pe.FirstName, PetName = ( t == null ? “”: t.PetName )};

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

■ペットを飼っていない人だけを表示(null比較)

        // 外部結合(nullのみ抽出)
        private void button4_Click(object sender, EventArgs e)
        {
            // ペットがいない人を表示
            var ret = from pe in persons
                      join pet in pets on pe.PetID equals pet.ID into sub
                      from t in sub.DefaultIfEmpty()
                      where t == null
                      select new { pe.FirstName };

            foreach (var it in ret)
            {
                Debug.Print(it.ToString());
            }
        }

こんな風に、一度 into を使ってサブテーブル(sub)を用意してから、DefaultIfEmpty メソッドで外部結合を実現する、という方法になります。

 

カテゴリー: 開発 | LINQで外部結合を実装する はコメントを受け付けていません

App_Dataフォルダにデータベースを作成できませんの対処

ASP.NET MVC の プロバイダー データベースの自動作成の落とし穴
http://www.moonmile.net/blog/archives/980

の顛末について、書いておきます。

現象としては、

  • Visual Studio 2010 で作った、ASP.NET MVC のプロジェクトで、ログインしようとするエラーが発生する。

です。

エラーメッセージは、

ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。

ですね。

環境は、

  • Windows 7 Ultimate
  • Visual Studio 2010 Professional
  • SQL Server 2008 R2 Express Edition 

ですが、バージョンはあまり関係ありません。「SQL Server 2008 Express Edition」のところしか関係ありません。

ちなみに、上記の環境で ASP.NET MVC アプリを作成して、ログインをすると「ログイン」できます。なので、普通にやっている分には問題ありません。

■現象

問題は、次の手順をやってしまったときです。

  1. Visual Studio 2010 をインストールする。
  2. SQL Server 2008 Express Edition が同時にインストールされる。
  3. SQL Server 2008 R2 を入れようとして、一旦、SQL Server 2008 Express Edition をアンインストールする。
  4. SQL Server 2008 R2 Express Edition をインストールする。

のように、SQL Server の Express Edition を「アンインストール」→「再びインストール」したときに発生します。

このログインできない現象は、ASP.NET MVC に限りません。

  • ASP.NET のログインコントロールを使った場合
  • ローカルデータベースファイルを ADO.NET でオープンしようとした場合
  • サーバーエクスプローラーで、ローカルデータベースファイルを追加しようとした場合

でも発生します。

■対処

先に対処方法を書いておきます。

Windows Vista/7 の場合は

C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\ のフォルダを「削除」して下さい。

Windows XP の場合は、Documents and Settings の中です。

ここの中にある各ファイルが邪魔をしています。

■原因

主原因は、SQLEXPRESS\ の中にある、master.mdf などのシステムファイルが、インストール前後で不整合を起こしているためです。このため、ASP.NET のログインコントロールからアクセスしようとしたときに、前後の不整合のために、「インスタンスが生成できません」というエラーになります。

これが発生してしまうのは、SQL Server 2008 Express Edition(2005も同様)をアンインストールしたときに、該当するユーザー領域のデータ(SQLEXPRESS\配下のファイル等)を削除しないためです。
ユーザー領域なので、おそらく、別ユーザーでログインしたときはつながる、という見かけ上、不思議な現象になります。

■情報源

Google で「Microsoft SQL Server Data SQLEXPRESS AppData」で検索すると、いくつかの質問がヒットします。

App_Dataフォルダにデータベースを作成できません
http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/13919e51-b9f9-4ab4-8ef7-92dce872851b

公式なところでは、

SQL Server Express ユーザー インスタンスへの接続 (ADO.NET)
http://msdn.microsoft.com/ja-jp/library/ms254504.aspx

管理者以外のユーザーのためのユーザー インスタンス
http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

を読むと、上記のフォルダ「C:\Users\ユーザ名\AppData\Local\Microsoft\Microsoft SQL Server Data\SQLEXPRESS\」が関係していることが分かります。

 

カテゴリー: 開発 | App_Dataフォルダにデータベースを作成できませんの対処 はコメントを受け付けていません

ASP.NET MVC の プロバイダー データベースの自動作成の落とし穴

現在調査中なので、明確ではないのだが、

  • Windows 7
  • SQL Server 2008 R2 ( Express を含む )
  • ASP.NET MVC のログイン

には、落とし穴がある。。。

ASP.NET MVC のサンプルアプリケーションを作ると、自動で「ログイン」の機能が追加される。これは、ログインアカウントを作成する時に、App_data 内にファイル形式のデータベースを作って、ログイン機能を用意してくれる便利な機能なのです(ローカルデータベースに、ユーザー管理を任せてしまうのは、どうか?という話は別として、サンプル/小規模開発ならばこれでOK)。

しかし、これが、Windows 7 + SQL Server 2008 R2 の場合には、以下のようなエラーが出る。

20100704_03.jpg

ユーザー インスタンスのプロセスを起動中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

SQLExpress データベースの自動作成エラー:
接続文字列は、アプリケーションの App_Data ディレクトリ内にあるデータベースの場所を使用する、ローカルの SQL Server Express インスタンスを指定しています。プロバイダーはデータベースが存在しないと判断したため、アプリケーション サービス データベースを自動的に作成しようとしました。アプリケーション サービス データベースの存在を正しく確認し、このデータベースを自動的に作成するには、次の構成が必要です:

これが何を示すかというと、

  • 最初のログインをしたときに、App_Data配下にデータベースのファイルがなかったので、作ろうとしたんだが、作れなくてエラーになった。

ということです。

このあたりの原因としては、

  • ASP.NETを起動しているアカウント(デフォルトでは、Network service)が、App_Data へのアクセス権がない。

が考えられるのだが、

アプリケーションが Windows 7 または Windows Server 2008 R2 で実行されている場合、プロバイダー データベースの自動作成を有効にするには、特別な構成手順が必要です。追加情報については、http://go.microsoft.com/fwlink/?LinkId=160102 を参照してください。アプリケーションの App_Data ディレクトリがまだ存在しない場合は、Web サーバー アカウントに、アプリケーション ディレクトリへの読み書きアクセスが与えられていなければなりません。これは、アプリケーションの App_Data ディレクトリが存在しない場合、Web サーバー アカウントがこのディレクトリを自動的に作成するために必要です。

というのが、かなり怪しい…感じでして。どうも、「特別な構成手順」なるものを見る限り、非常に特別らしい(苦笑)。

素直に、ログインのアクセスを、ファイルじゃない通常のデータベース上に作成すればいいのだが、ASP.NET MVC 本の手前、初心者向きにはどうするべきか、と思案中なのです。

しかも、上記の「特別な手順」をやったにも関わらず(多分、何かが抜けているんだろうけど)、それでもエラーがでる orz。

う~む、どうするべきか?

追記 2010/07/05

http://www.moonmile.net/blog/archives/984 に顛末を書きました。解決できます。

カテゴリー: 開発 | 2件のコメント