水曜日, 2月 27, 2008

WindowBlindsとWFlip

キーボードを変えたついでにXPのまわりをVistaチックに変えてみた。 動きはまぁまぁかな? でもメモリの食い方が半端じゃないと思うのは気のせいだろうか??

火曜日, 2月 26, 2008

キーボードを変えてみた

LogitechのdiNovoを仕入れてきた。 diNovo DN-800 残念なことにCPU切替装置を使ってるんで、付属機能のカスタマイズができない。。。 マウス(Logcool)はできるのに。。。 これがBluetoothってやつの効果なのかな??

WPFとXmlDataProviderにnamespace-uriがくっつくと・・・

WPFのお勉強中 Windows Presentation Foundation データ バインディング: パート 1 を参考にWPFのRSSFeedを見るアプリを作ってみた。 リンク先ではローカルのxmlを参照して更新までやってしまうアプリだったけど、xmlを用意するのが面倒に思ったので、この部ログのフィードを読み込むアプリにしてみた。 最初はXAMLへのデータバインディングをせずにC#側で手動実装のパターンだった。 さすがに記事が2006年だったので、.netFramework3.0の実装で書かれていた。 せっかくvs2008を使ってるんだからということで、LINQtoXMLでコーディングしてみた。 XAML側はリンク先を見てください。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using log4net;
using log4net.Config;

namespace ExampleCS
{
/// <summary>
/// Window1.xaml の相互作用ロジック
/// </summary>
public partial class Window1 : Window
{
   private static readonly ILog log = LogManager.GetLogger(typeof(Window1));

   public Window1()
   {
       // BasicConfigurator replaced with XmlConfigurator.
       XmlConfigurator.Configure(new System.IO.FileInfo(@"log4net.xml"));
       InitializeComponent();
       blog = XDocument.Load(BLOGURL);
   }

   XDocument blog = new XDocument();
   const string BLOGURL = "http://utsuutsu.blogspot.com/feeds/posts/default";

   #region Event
   void Window1_Loaded(object sender, RoutedEventArgs e)
   {
       FillListBox();
   }
   private void entryListBox_Changed(object sender, SelectionChangedEventArgs e)
   {
       if (entryListBox.SelectedIndex != -1)
       {
           XElement element = ((ListBoxItem)entryListBox.SelectedItem).Tag as XElement;
           if (element != null)
           {
               titleText.Text = element.Element("{http://www.w3.org/2005/Atom}title").Value;
               urlText.Text = element.Elements("{http://www.w3.org/2005/Atom}link").
                   Single(el => el.Attribute("rel").Value == "alternate").Attribute("href").Value;
               dateText.Text = element.Element("{http://www.w3.org/2005/Atom}updated").Value;
               bodyText.Text = element.Element("{http://www.w3.org/2005/Atom}content").Value;
           }
       }
   }
   private void updateButton_Click(object sender, RoutedEventArgs e)
   {

   }
   #endregion
   #region private
   void FillListBox()
   {
       entryListBox.Items.Clear();

       var nodes = blog.Descendants("{http://www.w3.org/2005/Atom}entry");
       foreach (XElement element in nodes)
       {
           ListBoxItem item = new ListBoxItem();
           item.Tag = element;
           item.Content = element.Element("{http://www.w3.org/2005/Atom}title").Value;
           entryListBox.Items.Add(item);
       }
   }
   #endregion
}
}
log4netのコードとかもそのままにしてるけど、気にしないでください。 こっちはこれまでの学習の効果があってすぐにできた。 問題はXAMLだけを利用する(バインディングですべて解決)パターンだった。 XmlDataProviderでフィードを読ませてバインディングしていけばいいのかと思いきや、namespace-uriを指定する方法がわからない。。。 なんとなくクラスの関連上XmlNamespaceManagerがそれに該当するんだろうということはわかったんだけど、これってクラス->オブジェクトなんでXAMLに直にuriを書くわけにはいかず。。。(stringになるもんね) どうすりゃいいのかわからず、 あっちこっち探し回っているとMSDNのフォーラムに対応方法が載っていた。 Resources上でXmlNamespaceMappingCollectionにKeyを付けてXmlNamespaceMappingを生成するというやり方で、Key名を使ってXmlDataProviderにバインディングすることができるらしい。 で、やってみた結果がこれ(今度はXAMLだけで逆にC#側のコーディングは0です。)
<Window x:Class="ExampleCS.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ExsampleCS">
<StackPanel>
    <StackPanel.Resources>
        <XmlNamespaceMappingCollection x:Key="mapping">
            <XmlNamespaceMapping Uri="http://www.w3.org/2005/Atom" Prefix="rss"/>
        </XmlNamespaceMappingCollection>
        <XmlDataProvider x:Key="RssFeed" XmlNamespaceManager="{StaticResource mapping}" Source="http://utsuutsu.blogspot.com/feeds/posts/default" />
    </StackPanel.Resources>
    <TextBlock HorizontalAlignment="Center" FontWeight="Bold">
        BlogEditor
    </TextBlock>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <ListBox Name="entryListBox" Height="300" ItemsSource="{Binding Source={StaticResource RssFeed}, XPath=//rss:entry}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding XPath=rss:title}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <Grid Width="500" Margin="5" DataContext="{Binding ElementName=entryListBox, Path=SelectedItem}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="50"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" Grid.Column="0">Title:</TextBlock>
            <TextBox Binding.XmlNamespaceManager="{StaticResource mapping}" Grid.Row="0" Grid.Column="1" Name="titleText" Text="{Binding XPath=rss:title}" />
            <TextBlock Grid.Row="1" Grid.Column="0">Url:</TextBlock>
            <TextBox Binding.XmlNamespaceManager="{StaticResource mapping}" Grid.Row="1" Grid.Column="1" Name="urlText" Text="{Binding XPath=rss:link/@href[1]}"/>
            <TextBlock Grid.Row="2" Grid.Column="0">Date:</TextBlock>
            <TextBox Binding.XmlNamespaceManager="{StaticResource mapping}" Grid.Row="2" Grid.Column="1" Name="dateText" Text="{Binding XPath=rss:updated}"/>
            <TextBlock Grid.Row="3" Grid.Column="0">Body:</TextBlock>
            <TextBox Binding.XmlNamespaceManager="{StaticResource mapping}" Grid.Row="3" Grid.Column="1" Name="bodyText" TextWrapping="Wrap" Text="{Binding XPath=rss:content}"/>
        </Grid>
    </StackPanel>
</StackPanel>
</Window>
XmlDataProviderにバインディングしてListBoxにバインディングするところまでは問題なかったんだけど、最後にイベント連動のGrid側のDataContextの内容がTextBox上で取得できないという状態になり、 またまた悪戦苦闘。。。 やっぱり、namespace-uriがらみだった。。。 TextBoxにBinding.XmlNamespaceManager="{StaticResource hoge}"って実装が必要なんだそうだ。。。 まあ、最終的にはこんなのができた。 ExampleCS Application側(app.xaml)でスタイルをあれこれすればもうちょい見た目もよくなるだろう。。。 オンラインセミナーで「Expression Blend」とかいうツールの紹介がされていた。デザインに関してはこっちでやるといいよ~とMSの人は言っていた。 また、機会があればそっちも見てみようと思う。
ひとつだけ腑に落ちない部分がある。 それは、XAML上だけで表現するときにXPathで属性の条件付き取得の式がちゃんと評価されてないんじゃないの?って思うところだ。
rss:link[@ref='hoge']/@href
これで、linkタグの中でref属性がhogeのhref属性値が取得できると思うんだけど、何か違うのかな?? LINQでSingleを使った時には問題なかったんだけど。。。(Singleは1つ以外だとExceptionが発生する)

日曜日, 2月 24, 2008

ケータイの機種変更って面倒だよね

僕は以前ドコモユーザーだったんですが、MNPが始まってすぐくらいにauに乗り換えました。 その時の理由はauのケータイの方がデザインが僕好みだったってだけなんですけどね。 でも、MNPが始まるまでは電話番号が変わってしまうと何かと連絡が大変です。
  • 仕事関連
  • 友人関連
  • その他もろもろ
最近はそういうのを一斉に伝えるサービスがあったりもするみたいですが。。。 メアドなら前述のサービスが使えますけど、電話番号自体が変わってしまったときとかには、 「知らない電話番号のときは取らない」といった人もいたりして面倒だと思います。(実際、僕は知らない番号のときは出ません) そんななかいつもお世話になってるブログプレスさんで、OCNさんが「050あんしんナンバー」なるサービスをしていることを知りました。 サービスの概要は、050で始まる電話番号を持てるというサービスで、そこから自分の持っているケータイや一般電話に転送してくれるサービスらしいです。 転送以外にも留守番電話機能も付いてるみたいです。 (転送か留守番電話のどちらかしか設定はできないみたいですけど。。。) これで、プライベートとその他を使い分けたりすると便利かも。 僕なら、050番は仕事用にしちゃいますね。 今は050あんしんキャンペーンってのをやっていて相武紗季さんが、紗季おすすめグッズとかをプレゼントしてるらしいです。 料金はオプションとかを付けないなら月額210円 そんなに高くはないかなぁ~と思います。

やっぱりコメントをもらうと違うね

11月頃にPostした記事にコメントが付いていた。 内容はラベルのクラウド化の記事だ。 お礼なんて言われると、 「よーし、かんがっちゃうぞw」 ってなってしまう。 我ながら単純な人間だなぁ~と思う。 せっかくだから、利用しやすいように

俗にいう"New Blogger"改造(その3)ラベルのラベルクラウド(タグクラウド)化

のコードに先日導入したコードをハイライトする部品で使いやすくしておいた。(実際のところ使いやすいかどうかはさておき) まぁ、これからもボチボチ人様の役に立てればうれしいな。

木曜日, 2月 21, 2008

syntaxhighlighterを使ってみる

こっちに変えてみました。 ありがとう、Blogger Mode やっぱり、Subversionのリポジトリを直接参照してみた。 ※cssだけは、テンプレートに直接書いておいた。。。
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js"></script>
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js"></script>
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js"></script>
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js"></script>
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js"></script>
<script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js"></script>
<script language="javascript">
 dp.SyntaxHighlighter.BloggerMode();
 dp.SyntaxHighlighter.HighlightAll('code');
</script>
こんな風になった。
public class Test
 public static void main(String[] args) {
   System.out.println("色がかわるかな?");
 }
}

google-code-prettifyを無理やり使ってみる

Subversionのリポジトリを直接参照してみた。
<script src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js" type="text/javascript">
<link href="'http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css'" rel="'stylesheet'" type="'text/css'/">
するとこんな具合に
public class Test
 public static void main(String[] args) {
  System.out.println("色がかわるかな?");
 }
}

XMLスキーマとLINQtoXML

.net FrameworkのLinq to XMLを試してみる。 dtdとかxsdファイルがない状態なら、MSさんが提供してくれているXQueryっていうソリューションを参考にするとすぐに理解できた。 問題は自分でxsdを定義した場合だ、 System.Xml.Linq.XNameクラスを利用してElements(XName)やAttribute(XName)等々の呼び出しをするんだけど。。。 (from x in ~ select ~じゃないのは置いといて。。。) 自分にはXMLに関しての知識があまりにも少ないってことがよくわかった。 XNameにはxsdのパスを付けて指定するんだということを学習した。 {http://xxxx/hoge.xsd}ElementName で指定しないとダメらしい。 これが正しい指定方法らしい。 XMLShemaでもそういう風に書いてあった。 ネームスペースなんて意識したことはほとんどない。。。 dtdやxsdはxmlを書くときにバリデータとしてあれば便利だなくらいにしか思ってなかったもんなんで。。。

日曜日, 2月 17, 2008

SQLiteでLINQ to SQLできねー

結局、SQLServerでしか使えないのね。。。 いまいち、やる気がなくなりました。。。 気を取り直して、LINQ to XMLに手を出してみよう。 MSさんからサンプルコードも出てるし、SQLライクに使えるんだろう。 しかし、サンプルのXQueryってプロジェクトを見ていて気がついたことが一つlog4net.xmlとかのコンテンツに分類されるファイルは標準では出力ディレクトリに出力されないんですね。。。(コピーしてきたファイルだけ?) ともかく!「出力ディレクトリにコピー=>新しい場合はコピー」に設定しないとダメなんですね。。。 VS使ってる人には常識なんでしょうか? Eclipseでやってるときは基本的に全部Antでコピーしてたからなぁ~ GUIで設定ってのを見落としがちです。 気をつけないと。。。

土曜日, 2月 16, 2008

SQLite.NET DbProviderFactoriesについて

.netではapp.config(内容はXML)ってのを使うのが普通みたいですね。 SQLite.NETでも多聞に漏れずHelpの最初に 「DbProviderFactories」についての説明があります。 このFactoryを利用すれば、SQLiteに依存したクラスを使わなくても動作します。 app.configでの設定方法は2種類あるらしく、
  1. SQLiteバージョン非依存
  2. SQLiteバージョン依存
ちょっとづつだが、app.configの書き方が違う。 最初はよくわからんかったのだが、そういう時はTry and Errorに限りますね。 1については
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
    description=".Net Framework Data Provider for SQLite"
    type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
アプリケーションのフォルダ(VS2008で言ったらDebugモードでbin/debugの場所)にSystem.Data.SQLite.DLLを設置しないといけない。 2については
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
    description=".Net Framework Data Provider for SQLite"
    type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"
    Version=1.0.48.0, Culture=neutral,
    PublicKeyToken=db937bc2d44ff139"/>
</DbProviderFactories>
</system.data>
</configuration>
この場合はアプリケーションのフォルダにdllを置く必要はないらしい。 addタグにVersion,Current,PublicKeyTokenの属性を付け足してやればグローバルキャッシュ?からdllをロードしてきてくれるみたい。。。 SQLite.NETの公式フォーラムで紹介されていたサンプルコードをSQLiteに依存しないクラスで書き換えてみた。 System.Data.Commonを使っています。
using System;
using System.Data.Common;

namespace Sample
{
  class Program
  {
      static void Main(string[] args)
      {
          DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite");
          using (DbConnection cnn = fact.CreateConnection())
          using (DbCommand cmd = cnn.CreateCommand())
          {
              cnn.ConnectionString = "Data Source=mydatabase.db";
              cnn.Open();

              // Create a new table
              cmd.CommandText = "CREATE TABLE FOO (ID INTEGER PRIMARY KEY, MyValue NVARCHAR(256))";
              cmd.ExecuteNonQuery(); // Create the table, don't expect returned data

              // Insert something into the table
              cmd.CommandText = "INSERT INTO FOO (MyValue) VALUES('Hello World')";
              cmd.ExecuteNonQuery();

              // Read the values back out
              cmd.CommandText = "SELECT * FROM FOO";
              using (DbDataReader reader = cmd.ExecuteReader())
              {
                  while (reader.Read())
                  {
                      Console.WriteLine(String.Format("ID = {0}, MyValue = {1}", reader[0], reader[1]));
                  }
              }
          }
      }
  }
}
どうにかして、dllが自動的にアプリケーションのところにコピーしてくれないもんか?と考えてます。(log4netのdllは勝手にコピーされてるみたいだし方法はあると思うんだけど。。。) あとは、もう少しなれたらLINQを試してみようと思う。

寝るなぁー!死ぬぞ!!

僕のマンションの部屋は北向きなんです。 まぁ、お金がないから仕方がないと言えばしかたがないのですが。。。 最近、朝起きるとホントに寒くて寒くて。。。 ハロゲンヒーダーのスイッチを入れてその前で固まっています。 でも、ウトウトと・・・ はっ!!イカンイカン この状態で寝ると凍死する!! この状況を打破する何かが欲しいです。 前にテレビ番組でウィンドラジエーターちゅうもんが紹介されていた。あれが欲しい。。。 でも、電気代が怖い。。。

木曜日, 2月 14, 2008

つまるところFuncって何すっか?

C#のお勉強はまだまだ続いてます。 今回は System.Collections.Generic.Dictionary ではまった。。。 JavaでいうところのHashMapみたいなものらしい。 でも、keyタイプでコレクションを引き当てようと色々試してみるとIEmutable.Select(Func selector) って、コードフォーマットが出てくる。。。 これかな? と思って触ってみたら、どうもこれはselectorで操作したコレクションを返すものらしい。。。 普通のコレクションならFind(delegate(){})で当てれるのに。。。 これが、.net framework3.0の新機能なのかな? LINQってのもあるらしいけど、これはJavaのhibernateのHQLみたいなオブジェクトに対するSQLのお友達なんだろうと、ちょっと説明を読んで思った。 LINQってのはSQLiteの組み込みで実験してみるか。。。 そのうちに。。。

水曜日, 2月 13, 2008

僕のやりたいことは何なんだろう?

先週、朝寝ぼけて朝の薬を2回飲んでしまい、今朝は薬を飲まなかった(正確には飲めなかった) その後、午前中に
  1. ハローワーク
  2. 医者
とあっちいってこっち行ってとしていたら、みょーに気だるくて辛かった。。。 なんて言っていいのやら、倦怠感が全身を襲い寝て過ごそうかとも思ったが、結局眠れず、何も手に付かなかった。。。 薬をのまなっかたせいなのかどうなのかわからんが、ちょっとヤバイですね。。。 ともかく、色々事情があって1ヶ月後には雇用保険がもらえる算段が付いたので、良しとしておこう。 あとは、僕が何をやりたいかをしっかり考える必要があるってことだけだ。 「新3K」なんて呼ばれている業界に返り咲くか? 新しい世界に旅立つか? まだ、わからないけど何とかなるだろう。

結局WPFの利点は何なんだろう?

ちょっとC#の勉強の箸休めにWPF(Windows Presentation Foundation)を少し触ってみた。 xamlっていうタグ言語でデザインをするみたいだ。 データリソースの利用方法が理解できれば、もう少しやりやすくなるのかもしれないが、ちょっとIDEの機能が着いていけてないような気がしなくもないです。。。 このやっつけ仕事っぽい、プロパティビューはないだろ。。。 もう少し、使いやすくしてほしかった。。。 昔、C#のWebアプリの中国製造の受け入れ作業をしたことがったときにGUIで作ったアプリってどうしてもaspxファイルの中身がグチャグチャでおかしくてもどのあたりがおかしいのかわからないってことがあった。。。 その時には「やっぱ、HTML系のコードは手で作るのが一番正確だ!」と思った。今でもその考えはかわらない。 もう少し、IDEの機能が強化されたらWPFにチャレンジしてみようと思う。

日曜日, 2月 10, 2008

アメリカ横断ウルトラクイズ知ってる??

昨日、彼女に 「アメリカ横断ウルトラクイズって知ってる??」 って聞いたら 「知らない」 って言われました。。。 これがジェネレーションギャップってやつですか?orz

木曜日, 2月 07, 2008

スタッドレス師匠!!

こんばんわ、一応、長いこと大阪に住みついているが、やっぱりお好み焼きは自分で作るのが一番楽しいと思ってるがらです。 まぁ、そんなことはともかく「関西バンザイ!」ってサイトを見てください!! なかなか面白いコンテンツが。。。 例えば「芸人ジェネレーター氷の上でもすべり知らず35年のスタッドレス師匠に弟子入りし芸名を付けてもらいます。 僕の場合は「がら 白血球」という名前を拝命しました。。。 他にもブログパーツとして貼りつけましたが、「関西魂検定」なるものが。。。 意外とマニアックな問題から思わずボケた回答をしたくなる問題まで用意されていて面白いです。 例えば、 現在日本で面積が一番狭い都道府県は香川県ですが、かつては大阪でした。逆転した理由は?
  1. 横山ノックが知事を辞めたから
  2. 測量が間違っていたから
  3. 関空を作ったから
思わず、1を選びそうになったりします。。。 動く歩道は歩く?
  1. Yes
  2. No
もう、問題にすらなってません。。。 とまあ、こんな感じで面白いコンテンツが用意されています。

プログラムランチャーを導入してみる

RocketDockっていうアプリを導入してみた。 基本的にMacにあるやつのWindows版ですね。 言語パックとか無しで日本語が使えるんで便利です。 RocketDock 各種オプションとかスキンとかを活用するとこんなことができます。

火曜日, 2月 05, 2008

Mozilla Firefox3 Beta2を試してみてわかったこと

Firefox2の調子がおかしくなったJust-in-Timeデバッカが出て終了してしまう。。。 そこで、ものは試しにFirefox3 Beta2をいれてみた。 それで、気づいたんだが、Webdingsフォントに対応してないみたい。。。 例: Arialフォント: あいうえお Webdingsフォント: Webdingフォント こんな感じ 日本語版には入ってないのかな?? あとは、レンダリング結果が若干変わってしまったみたい。。。 うちのブログの左ペイン?って言ったらいいのかな??が、ズレてる。。。 直そうか、正式版を待ってそれでもおかしかったら直すことにしよう。

Windowsの共有フォルダが見れない!!(その後)

一度、寝ようと思ったんですが、寝付けなかったので、ファイルサーバ側のスパイウェア駆除でもしようとPCを起動すると・・・

なんと!また、ファンクションエラーっすか??

まじで勘弁してください。。。

一度、NICのドライバを削除して入れ直すと動きました。。。

ドライバが壊れてたのかな??

Windowsの共有フォルダが見れない!!

昨日、クリーンインストールしたときに、どうやらスパイウェアが紛れ込んでいたみたいで、それを掃除するのにとんでもなく苦労した。。。
何のためにNortonに金を払ったのか。。。

金返せー!!

まぁ、ともかく無事にスパイウェアの除去はできました。
最終的に使ったのは「Spayware Doctor」ってやつなんだけど、早いはNortonで防ぎきれなかった分もキレイに掃除してもらえるわで大助かりでした♪

問題はその後に起こりました。何とファイルサーバの共有が見れなくなってしまったのです。

普段はネットワークドライブにして接続していたんですが、何故か接続できなくなり、もう一度ネットワークドライブを作り直そうとしたら。。。

「ファンクションが見つかりません。」

はぁ?早速、訳がわかりません。。。マシン名が解決できなかったわけでもなく、何故にファンクション??どんなファンクション???
もう、頭の中は?でいっぱいです。
ここから、戦いが始まりました。。。

おさらいしてみます。

PC:A WinXPPro(普段使う言わばクライアントPC)
PC:B Win2003(ファイルサーバ)

現象、PC:Bの共有フォルダ(ここではShare)がPC:Aから見れない。

1.相互にpingは通るか?
 PC:A -> PC:BはOK
 PC:B -> PC:AはNG

PC:AのNortonInternetSecurityの「ネットワークマップ」でファイルサーバを信頼するにすることによって遮断されていたICMPが無事通るようなりました。

2.マイネットワークから参照できるか?
これは、今はわかるんですけど、その時はマスタブラウザの概念なんてなかったのでPC:Aのレジストリ(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Browser\Parameters\)をいじって再起動して無理やりマスタに変えてみたりしました。
(おそらく、マスタブラウザの優先度はwin2003>XPなんでしょうね)
PC:Bではworkgroup(ActiveDirectoryしてないんで)上に2つのPCが確認できました。
PC:Aでは自分自身しか見えず、PC:Bは参照すらできません。

この時点で、pingは通るが\\IPアドレスのUNCを使っても接続できませんでした。

逆にPC:BからPC:Aへの参照は問題なく行えます。

3.XPサポートツールでマスタブラウザを確認できるか?
ともかく、マシンの一覧が取得できんことにはイントラ内のマシンに接続できません。
マスタブラウザについて調査するためにサポートツールをインストールしてみました。

browstat status

このコマンドを打つだけの為にこんなものを入れる羽目になるとは。。。

しかし、進展がありました!!
Status for domain WORKGROUP on transport \Device\NetBT_Tcpip_{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
Browsing is active on domain.
Master browser name is: FILESERVER
Could not connect to registry, error = 53 Unable to determine build of browser master: 53
Unable to determine server information for browser master: 1
1 backup servers retrieved from master FILESERVER
\\FILESERVER
Unable to retrieve server list from FILESERVER: 1
こんな、結果が。。。
レジストリーにコネクトできなかった??レジストリーが関係してる?というかマシンのリストをレジストリ使って管理してるんですか!?
結局のところ、どうなのかはわかりませんでしたが、Could not,Unableと書かれている文章を調べていると、NetBIOS over TCP/IPにたどり着きました。

どうやら、こいつが有効じゃないと共有フォルダを参照できないようです。
さっそく、ipconfig /allで確認してみると、
Windows IP Configuration

Host Name . . . . . . . . . . . . : client
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter ローカル エリア接続:

Connection-specific DNS Suffix . :
Description . . . . . . . . . . . :xxxxxxxxxxxxxxxxxxxxxxxxxx
Physical Address. . . . . . . . . : xx-xx-xx-xx-xx-xx
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.24.51
Subnet Mask . . . . . . . . . . . : 255.255.255.0
IP Address. . . . . . . . . . . . : 2001:a000:xxxx:0:xxx:xxxx:xxxx:xxxx
IP Address. . . . . . . . . . . . : 2001:a000:xxxx:0:xxx:xxxx:xxxx:xxxx
IP Address. . . . . . . . . . . . : xxxx::xxx:xxxx:xxxx:xxxx%x
Default Gateway . . . . . . . . . : 192.168.24.1
xxxx::xxx:xxxx:xxxx:xxxx%x
DHCP Server . . . . . . . . . . . : 192.168.24.1
DNS Servers . . . . . . . . . . . : 192.168.24.1
xxxx:0:0:ffff::1%1
xxxx:0:0:ffff::2%1
xxxx:0:0:ffff::3%1
Lease Obtained. . . . . . . . . . : 2008年2月5日 1:22:29
Lease Expires . . . . . . . . . . : 2008年2月5日 2:22:29

Tunnel adapter Teredo Tunneling Pseudo-Interface:

Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface
Physical Address. . . . . . . . . : FF-FF-FF-FF-FF-FF-FF-FF
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : fe80::ffff:ffff:fffd%5
Default Gateway . . . . . . . . . :
NetBIOS over Tcpip. . . . . . . . : Disabled

なんて、結果が。。。
一番最後の行に書いてます。
なんてこったい!!
ネットワーク接続のプロパティからwinsタブにあるNetBIOS over TCP/IPを有効にするにチェックを入れれば、何のことはなく解決しませんでした。。。orz

しかし、XPサポートツールの
browstat status
を実行してみると、
あら不思議!!
Status for domain WORKGROUP on transport \Device\NetBT_Tcpip_{xxxxxxxx}
Browsing is active on domain.
Master browser name is: FILESERVER
Master browser is running build 3790
1 backup servers retrieved from master FILESERVER
\\FILESERVER
There are 2 servers in domain WORKGROUP on transport \Device\NetBT_Tcpip_{xxxxxxxx}
There are 1 domains in domain WORKGROUP on transport \Device\NetBT_Tcpip_{xxxxxxxx}
ちゃんと、返ってきました。。。

でも、ipconfig /allの結果は変わってません。。。
何で??
Tunnel adapter Teredo Tunneling Pseudo-Interface:
こいつがかなり怪しいです。。。
(なんでもIPv6用のアダプタだとかなんとか。。。)

最終的には無事に共有フォルダをネットワークドライブでつなぎ直すことはできましたが、何故にファンクションが間違ってます。ってエラーが吐かれたのかは不明なままです。。。

しかし、今までそんなのしなくてもよかったじゃん!!

後日、

net viewでシステムエラー1

で解決方法がはっきりしました。

日曜日, 2月 03, 2008

C#のIOストリームって

懲りずにC#のお勉強中です。 今日、気になったんですが、ファイルのストリームを開いた後に当然close(必要ならその前にflush)する訳ですが、もともとJavaばっかりやってた人間ですので try{}catch(Exception e){}finally{} のような書き方でいいだろうと思っていたんですが、 usingを使って強制的にDepose(オブジェクトを解放するもんだと思ってます)でflush・closeをしてくれているらしい。。。 .net1.1だと何かバグとかあったらしいけど。。。 しかし、using句を使ってExceptionが発生したときには、どうやってハンドリングするんだろう?? 結局、try/catchも書きつつusingを使っていくしかないのかなぁ~?

金曜日, 2月 01, 2008

日本人ってジーンズよく履くよね

はい、僕も漏れずにその一人だったりします。 まあ、この冬一番のファッションアイテムとしてヒットしたのは、やっぱりニット帽だったんですよね。 ジーンズ主体のカジュアルな格好で過ごしていたから。。。(無職なんてそんなもんです。) 自転車によく乗ってるんで、ジーンズでも巻き込み防止のバンドをよくつけてるんですけど、結構(いや、実際)汚れてるんですよね。。。 そこで、新しいのがほしいなぁ~と思っていたら、よくお世話になっているリーバイスさんから「PLAY HARD」ってコンセプトで2月下旬に発売予定の新商品です。

やっぱ銀シャリっすよ

filmoでビールDraftOneの「スゴイ米当たる!キャンペーン」CMがいくつか作られてました。 やっぱ、結構おもしろいですね。 今回は映像技術って感じのやつです。 タイトルは「DraftOneに変わっちゃう!」 「スゴイ!!」「スゴイ!!」と連呼してます。 最後のオチも書いちゃいますが、米をグラスに注いでいると途中から何と!ビールに変わります!! 実は最初に思ったのは、「米からできる酒は日本酒やろ!!」と突っ込みたくなったのは秘密ですw 麦じゃないの?? あ、発砲酒か。。。

さびしいな。。。

僕が結構やりこんでいたMMORPGがあった。(過去形にしていいのかは微妙ですけどw) そこで、長いことお世話になっていた方が、そのゲームでいうところの「引退」をされるとのこと。。。 本人のブログと仲間のブログで確認して急いでBBSに書き込みです。 仕事をしなくなってからはお金が払えないんで、まったくやってなかったんですが、こういう話を聞くとさびしいもんですね。。。 まぁ、引退される方には「おつかれさまでした」と言うしかないよなぁ~。

failed to read qemu headerのときのメモ

かなり久々。。。 忘れないようにここに書きこんでおく。 ちょっとした手違いで libvirtでイメージを起動しようとすると failed to read qemu header なんておっしゃられて起動しない。。。 vmwareserverを使って...