2012年4月6日金曜日

memo: munin で MySQL のグラフが生成されない

/var/log/munin/munin-node.log にエラーログが出てた:
Service 'mysql_slow' exited with status 255/0.
Error output from mysql_slow:
    Missing dependency Cache::Cache at /etc/munin/plugins/mysql_slow line 703.
perl の Cache::Cache モジュールが足りなかったようなので、apt-get install libcache-cache-perl で解決。

2012年4月2日月曜日

WP7: DatePicker, TimePicker でアイコンが表示されない

Silverlight Toolkit の DatePicker, TimePicker で、アイコンを表示する手順のメモ。
やるべきことが 3 つあって、
  • プロジェクトルート直下に "Toolkit.Content" フォルダを作る
  • "ApplicationBar.Cancel.png" と "ApplicationBar.Check.png" をそこに追加する
  • これらのプロパティで "ビルドアクション" を "コンテンツ" にする
最後を見落としていて、小一時間悩んでしまった。Silverlight は難しい。。

2012年3月18日日曜日

[メモ] Windows Phoneアプリ公開にあたって抑えておくこと

とリストアップしたけど、結局 http://thinkit.co.jp/book/2012/03/15/3475 に十分まとまっていた。 (2012.3.22 URL 追加)
(2012.3.23 追記)

2012年3月12日月曜日

WP7: アプリケーションの設定の保存

IsolatedStorageSettings.ApplicationSettings を使ってアプリケーションの設定を保存します。
key は string 型、value は object 型。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.IO.IsolatedStorage;
using System.Diagnostics;

namespace ApplicationSettingsTest
{
    public partial class MainPage : PhoneApplicationPage
    {
        // コンストラクター
        public MainPage()
        {
            InitializeComponent();

            IsolatedStorageSettings settings =  IsolatedStorageSettings.ApplicationSettings;

            // 登録済みの値を出力
            foreach (var s in settings)
            {
                Debug.WriteLine("settings[{0}] = {1}", s.Key, s.Value);
            }
            // 登録件数を出力
            Debug.WriteLine("count: {0}", settings.Count());

            // 値を複数登録
            for (int i = 0; i < 3; i++)
            {
                string key = string.Format("key{0}", i);
                // Add() では上書きはできないので消す
                if (settings.Contains(key))
                {
                    settings.Remove(key);
                    Debug.WriteLine("{0}: removed", key);
                }
                settings.Add(key, "value hoge");
            }

            // 辞書の場合は上書き可能
            settings["key"] = "aValue";

            // TryGetValue は、キーがない時 false を返す
            string value1;
            if (settings.TryGetValue<string>("key", out value1))
                Debug.WriteLine("type is string");

            // 型が違う場合は例外が送出される
            //int value2;
            //if (settings.TryGetValue<int>("key", out value2))
            //    Debug.WriteLine("type is not int");

            // 書き込む
            settings.Save();

            // 全削除
            //settings.Clear();
        }
    }
}

2012年3月11日日曜日

wp7: テキストの色を C# から変更する

<TextBlock Name="aTextBlock" Foreground="Black"/>
という XAML があったときに、
aTextBlock.Foreground = new SolidColorBrush(Colors.Red);
などとします。
... とテキストの色を変えるためだけにインスタンスを生成するのは馬鹿げているような気もするけど、そういうもの??

2012年2月26日日曜日

AutoHotKey script for Mac User

以前、visual studio のキーバインドを emacs 風にする方法を書きましたが、 VSの外では依然として元のキーバインドのままで不満がありました。
特にマウススクロールの方向が Lion で逆になったのでとても違和感があります。 横スクロールできないのもストレスでした。
AutoHotKey でそれなりに設定していったところ、Mac 風の操作に近づけることができたので、 GitHub で公開してみました。
github.com/zakkie/MacAHK

2012年2月21日火曜日

ListBoxItem の変更

前回のブログでリストアイテムの追加について書きました。
しかしながらあのコードでは各アイテム内のデータを変更することができません (変更しても UI に反映されない、がより正確か)。
これを実現するためには INotifyPropertyChanged を実装するより他ないようです。 前回のコードの Car class を以下で置き換えます。
    public class Car : INotifyPropertyChanged
    {
        public string _Name;
        public string _Manufacturer;
        public event PropertyChangedEventHandler PropertyChanged;

        // コンストラクター
        public Car(string name, string manufcturer)
        {
            _Name = name;
            _Manufacturer = manufcturer;
        }

        public string Name
        {
            get {return _Name;}
            set {
                _Name = value;
                NotifyPropertyChanged("Name");
            }
        }
        private void NotifyPropertyChanged(string p)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(p));
        }
    }
ビルドして、Button を押すと先頭の RX-7 が RX-8 になるのが分かります。すなわち内容の書き換えがこれで可能になりました。