2020年09月03日

SVNでNASに作ったリポジトリにアクセス出来なくなった時の対処方法のひとつ

えー。いつの間にかテレワークが終わってまして、県内の自宅で待機しながらはや2か月が過ぎました。

事実上の無職状態なうです。

そんなこんなで、実家でもお仕事できなきゃいけなくなりそうなので、お家NASの利用効率を向上させるために、リポジトリを置いとく事にしました。

導入してるNASは、BUFFALOのLS210Dという機種で、まぁMACのタイムマシーンでも使えるっつーので、バックアップ用に使ってたんです。
そのNASに、SVN(Gitぢゃないよ)のリポジトリを設けて、チェックアウトとかアップデートとかコミットとかしてみてたんですが、
URLも、ユーザー名も、パスワードも間違ってないのに、不意に繋がらなくなる事がありました。
svn_ga_tunagaranai.png

そんな時の対処例を挙げときますね。

最初にPCを再起動します。
※起動した直後だったら不要かもしれないんですが、NASへのアクセス履歴みたいなのが残っているせいじゃないかと思ってるんですが、エラーになる事がしばしば。

次にNAS Navigator2でNASを開きます。
※アクセスするためのユーザー名とパスワードを入れて、ファイルマネージャー(らしき)ウィンドウが表示される事を確認します。
svn_ga_tunagaranai_nasunabi.png
svn_ga_tunagaranai_nasunabi_fairumanejya.png

確認出来たら、ファイルマネージャーウィンドウのアドレスバーに、IPアドレスを入れます。
※こんなかんじで:file://192.168.1.5

するとまた資格情報を入力しる!というダイアログが出るので、先の入力情報とおんなじもんを入れます。
svn_ga_tunagaranai_nasunabi_mokkai.png

すると、svnでリポジトリブラウザを開けば問題なく見れるようになります。
svn_ga_tunagaranai_nasunabi_surutoumakuiku.png

どーゆー理由なのかはさぱーりわかりませんけど、一例という事でお見知りおきくださいませ。


posted by ハッタリ at 12:05| Comment(0) | 仕事にも使えるかもしれないメモ | このブログの読者になる | 更新情報をチェックする

2018年03月14日

コルタナはタスクバーから消す

bootcamp領域を倍にして、Windows10をインスコしたんですけど、コルタナってぇのがタスクバーに寄生しちゃってうざいのなんの。

何とか無効にしたいなぁと思ったのでググッテ見たんですけど、最新のバージョンでは、
コルタナを簡単に無効にする事が出来なくなった
みたいですね。

ぃゃ本当に余計なお世話なんですけど。この機能。
siriでさえも使わないオイラですので、コルタナなんぞ使うわけが無いですわ。

しりもね。運転中に役に立ってくれるんなら使ってみようかなって思うんですけど、
「へいしり!」
って掛け声がいやなんですよ。

てれくさいっつーか、なんか、妙な気分になってしまうので、そのまま機能を使おうと思えないのが、この辺の音声アシスタントに対する、とてつもなくデカイ壁だと思うんですわ。

この辺の感覚は欧米人にはわかんないのかもしれません。
※ぁ、若人はそうでもないのかも。使ってる人見たこと無いけどw

せめてね、「へいしり!」ではなくって、もっと別の掛け声を登録できるようになってくれると、敷居が低くなるような気がするんですけどね。

どうしても「Hey!」という言葉を言わせたいなら、例えば
「平蔵!」
とか、
「へーちゃん」
とかを登録できるようにならないかなぁ。。。
と思ったりしています。

そうそう。コルタナさんの記事でした。

タスクバーを右クリックすると、Cortanaコマンドが見えるので、「表示しない」っつーのにチェックを入れたら、タスクバーから消えてくれました。

そんな機能があるんだったら、コルタナとチャットしている時に、
「消えてください」って入れた時に、
「うわやっぱりその質問が来ましたか」
ってな感じで返す位の事が出来るんだろうから、
「その瞬間にこのコマンド出せよ!」
と、突っ込みたくなりました。

あとは音声認識サービスと入力候補をオフにして様子見。

siriもcortanaもそうなんだけど、、どうせ使わせたいならオリジナルの名前付けさせてくれねーかなー
「ぴーちゃんっ」
って呼びたいw

そして後唄を歌ってくれるようになるんだったら、運転中に使ってみてもいーかも。。。
posted by ハッタリ at 01:43| Comment(0) | 仕事にも使えるかもしれないメモ | このブログの読者になる | 更新情報をチェックする

2016年12月25日

明日もの外の銭失い

今日のタイトルは、間違ってるわけでは無いんです。

先日でかいテレビを買いまして、4K対応でHDMI入力もあるんで、BootCamp入りMacの外部モニタとして使う事にしたんです。

で、HDMIケーブルを買いに行ったら、
意外に高価でびっくらこいてしまいまして、一番安い1mのを買っちゃったんです。

そしたらパソコンと画面が近すぎちゃって、目の前の大画面に圧倒されるばかり。。。

で、考えたんですよ。

1.長いケーブルを買い足す。
2.外付けのマウスとキーボードを買い足す。

1だと買ったケーブルが無駄になるなぁ。
それに普段のお仕事はWindowsを使う事が多いし、Macのキー配列はWindowsで使うには違和感があるから、
新しくキーボード&マウスを買い足す事にしました。

買ったマウスはELECOMのM-BT12BR。
キーボードはiBUFFALOのBSKBB22WH。展示品を打鍵してみたら気持ちよかったし。

両方とも青歯で、しかもお安く購入する事ができました。

で、一週間くらい使ってみたんですが、マウスはまぁまぁ使えてるぽぃんですが、
キーボードが全然ダメ。

・右にシフトキーが無い事は、こんなに使い勝手が悪いものとは思えなかった。
・青歯の接続がすぐ切れる。
・キーの応答が全然遅いし。。。

特に、ちょっと放置するだけで応答しなくなるこの現象は何とかならんものか。。。
「ya su mo no gai」と打ったつもりが、最初のyをウェイクアップ信号かなんかと間違えてるのか無視されるんで、
「a su mo no gai」になっちゃうんですよ。
するとIMEが気の利いた返還をしてくれるもんですから、
「買い」と変換して欲しいトコで「外」と変換してくれるみたいです。
それが本日のタイトル。

何とかならんかなぁと思ってググってみたら、やはり先人は素晴らしい記録を残しておいてくださってました。

青歯のネットワークを無効にするんですね。
ありがとうございます

これでペアリングがしょっちゅう切れるってぇ問題は解決しました。

あとの二つはどうしてくれよう。

Macbookの外付けキーボードだから、単純にキーマップを変更するだけじゃぁ駄目だよなぁ。
そもそも応答の遅さはどうにもならんな。

駄目だこのキーボード。
よく販売中止にしないもんだ。

というわけで、長いHDMIケーブルを買ってこようかと思い直してます。

2015年12月05日

BootCampアシスタント6では、Windows7のインストールができません

というわけで、こないだMacbookProを買ったので、BootCampでWindows7突っ込んで、Windows10にアプデトして、そのあとにWindows10のクリーンインストールしてってぇ手順をやってみて、ひっさびさのネタにしようかと思ったんですが、

BootCampアシスタント6では、Windows7は対応できないようです。


以上。周知させていただきます。

2014年12月16日

$_POSTで受け取ったjson文字列中の要素

本日もjsonネタで恐縮いたしますです。

例えば↓の様な文字列を$_POST変数にてjson文字列を受けた際に、任意の要素を得るには、

{\"hoge\":{\"piyo\":\"fuga\",\"hage\":\"upotu\",\"hogera\":\"piyora\",\"tsuru\":\"000\"}}\n

// $_POST変数のアクセスに使ってる'json'てぇ文字列は、
// jsonデータを受けるためのあれだから、特に'json'てぇ文字列にこだわらなくてもw
$json_input = $_POST['json'];

// json_decodeを呼び出して、
$obj = json_decode($json_input);

// ↓のように参照すると、
$hogerapiyora = $obj->{'hoge'}->{'hage'};
// $hogerapiyora変数には'upotu'が入ります。
// 入るんじゃぁないかなw


本日も先人に感謝いたします。ペコリ

2014年12月15日

オイラヘ。咀嚼は大切。慣れはやばいぞ。

ちょいと必要に迫られて鯖もどきを作ってたりするんですけど、json文字列を受け取らなきゃいけなくって、いつものようにググったところ、

PHPでHTTP POSTされたJSON本文を受け取る方法

っつー先人をハケーンしたので、phpでjson文字列を受け取る方法を勉強させていただいたんですけど、どうもうまくいきません。
ちょっと調べてみたら、Content-Typeがapplication/jsonではなくて、application/x-www-form-urlencodedになってました。

通常のあれだったんですね。

聞いた事を鵜呑みにせず、咀嚼して確認するってぇのは大切な事であると実感いたしました。

2014年12月10日

mod_rewriteの設定でハマった

テスト用鯖にphpファイルを置いて、拡張子無しでアクセスさせたい。


と思ってググったところ見つけたのがこちら



ほうほう。.htaccessで置き換えてやりゃぁいーのか。ではちょっとやってみよう。

む? ・・・404エラー??



まぁ確かにそのファイルは無いんですけどね。拡張子を付けてあげりゃ見つかるし。

でも拡張子は付けさせたくない。


と思ってググったところ見つけたのがこちら


なるほど。apacheのオプションを確認するのか。
んーーー。いちおう有効になってるよな。


でも404エラー。。。


スペルミスかなー?...合ってるよなー。
何が悪いんだろ??


と思ってググったところ見つけたのがこちら


パスを意識しなきゃいけないのか...
ぃやぁ、パスを意識するのは基本中の基本なんですけど、絶対パスを指定してもどうにも動かない。
また404   orz...


もうちょっと検索結果を見てみようかな。
と思ってググった結果から見つけたのがこちら


あ〜〜〜っ!

.htaccessが効いて無かったぁ〜〜〜!!

というわけででけました。

3時間費やしちゃった。まいったよ。。。

今日も助けていただきました先人の方々には大いに感謝いたします。

2014年10月20日

パスとしてコピーという機能

画像ファイルを右クリックして、内容をクリップボードにコピーするツールwを作ったばかりなんですけど、

@ファイルを右クリックしてコンテキストメニューを出す。
A送るコマンドの上にカーソルを移動する。
BPictClip(例のツール)の上にカーソルを移動して、マウスボタンをリリースする。



という3手順を踏まえるのもちょっとねぇ。
どうせならひと手順省略したいなぁ。
と思ってググったらありましたよ。


おそらく肝の情報は、

「shift+右クリック」後の「パスとしてコピー」
だと思いました。

ここんトコをはしょってて入力したところ、

「どのアプリで開きますか?」っつーダイアログが出ちゃったんで、きっとタイプミスだと思うんですけど、ミスが回避できる機能が増えた事はありがたいです。


いやーホントに便利になりましたなぁ。
今の今まで知りませんでしたけどw

2014年10月17日

C#で画像ファイルをクリップボードにコピー

C#を使い始めて数年になるんですけど、まぁやっと使い方が解って来たような気がします。はぃ。

今日は資料を作ってて、エクセルファイルに画像データをぺたぺたと貼りつけていたんですけど、

@貼りつけたい画像をペイントで開く。
A開いた画像を全選択する。
Bコピーする。
Cエクセルファイルに「形式を選択して貼り付け」コマンドを選ぶ。
Dビットマップを選んでオッケーボタンをクリック!
Eペイントで開いた画像を閉じる。または次の画像を開く。


という手順でぺたぺたしてたもんですから、

「いちいちめんどくせーwやってらんねーww」

というような心持になりました。

どうせなら画像ファイルをクリックした瞬間にクリップボードでデータを読んでくれるツールが無いかなぁ。。。

@貼りつけたい画像を右クリック。
A送るメニューとかでツールを開く。
Bエクセルファイルに貼り付ける。

ってぇ動作が出来ればイーんですよ。

と思って探して見たんですけど、それらしいもんは見当たらず。
orz...

ちょっと機能がモリダコサンかなーと思えるのはあったんですけど、今日は英語の気分で無いし。。

ぇーい。

作っちまえ!

と言うわけで作ってみました。
要は、ファイルを指定してクリップボードに放りこみゃぁいーので、

1.プログラムの起動時に受ける引数で画像ファイルを教えてもらう。
2.画像ファイルが存在してたら開く。
3.クリップボードにコピーする。
4.終了する。
ってな感じで作りました。

コードはこうっス↓。


using System;
using System.Windows.Forms;
using System.Linq;
using System.Drawing;
using System.Collections.Generic;

namespace PictClip
{
static class Program
{
[STAThread]
static void Main(string[] args)
{
if (args.Length == 1)
{
foreach (string arg in args)
{
if (System.IO.File.Exists(arg))
{
Bitmap Pict = new Bitmap(arg);
Clipboard.SetData(DataFormats.Bitmap, Pict);
}
}
}
}
}
}



調査時間はおよそ30分。
コピペプログラミングに要した時間はおよそ15分。
必要な機能チェックに要した時間は3〜5分。

この記事を書いた時間はふじこw

ぃゃぁ、C#ってほんっとぉーに楽ちん。

あとは「送る」メニューで起動するようにして準備完了。



本日も先人の皆さまに感謝いたします。m(__)m
捗る捗るww ちょっと動作が遅いけどwww

2014年09月18日

Babel Icons

VisualStudioを使ってて、お仕事で使っているにも関わらず、何年も使っているはずなのに、わかんないもんがたくさんあります。

アイコンもそのひとつ。

バベルアイコン」ってゆーんですか?
バベルってば、あのバベルの塔のバベルですか??

なんだかぃゃな予感がしましたが、頑張って先の英文を読んでみました。
はぁなるほど。ょくわーりませんでした。

と言うわけでオイラなりにレイアウトしてみたんですよ。
vs_icon_no_are.png

。。。ゃっぱりワカンネwww

2014年09月12日

ランダムなMACアドレス...?

毎度唐突で恐縮いたしますが、ランダムと言えば乱らでたらめである事。
出現に規則性が無い数値列を乱数と言ったりします。

パソコンで乱数を出現させる時には、用途に応じた機能(SDKの関数だったりexcelの関数だったり...)を使用する事が普通だと思うんですけど、これは疑似乱数という、本物ではない乱数らしいです。
でもどんな違いがあるのかは、オイラはわかんないです。


ところで、MACアドレスと言えば
「原則的に一意に割り当てられる物理アドレス」
と言う事で、主にネットワーク端末の識別に使用します。最近ではソフトウェアのアクティベーションを行う時に、特定のパソコンでしか使えなくなるようにMACアドレスを利用する事も多くなったようですが、それは
「重複しない物理アドレス」
という大前提に則っているのだと思います。

例外は人為的に重複させた場合ですね。
ネットワーク上で同一のMACアドレスを持つ端末が存在した場合、ネットワークが使いもんにならなくなりますので、良い子はそんな環境を作ってはいけません。

で、MACアドレスの構成は
「ベンダーID」+「機種ID」+「シリアルID」となっていて、普通に記述した時には、左から3おくてっと分を読めば、ネットワーク機器のメーカーが解かると言う事になってます。



さてと。いつものように前置きが長くふじこ。


「MACアドレスがぶつかってるみたいなんだけどド怒」

という現象にぶち当たりました。

調べてみると、ぶつかってたMACアドレスは

42-2C-20-52-41-53

どこのベンダーだよプンスカと思いながら検索してみたんですけど該当無し!
「ベンダー不明のMACアドレスって何者?」
オイラの理解の範疇を超えてしまいました。


ちょっとブレイク入れてデバッガで調べてみたところ、"RAS"という文字が目に入りました。

RASと言えばWindowsでリモートアクセスとか使う時に使用される機能の事らしいんですけど、

マイクロソフトによるとRASはダミーネットワークアダプタをインストールし、これらのMAC アドレスはランダムに生成...
されるらしいです。

でもね、でもですよ、

このMACアドレスは、アスキーコードにすると
"B, RAS"
ってぇ文字列になってましてね、どう見たってランダムに生成されてるとは
思えないんですが...
疑似乱数だからたまたま同じ種とおんなじロジックでブツカッタようにも思えないんですけど、どうなのさ?

たまたまベンダーIDが割り当てられて無いトコにプロトコルの文字列を並べる事ができてるので、一見ふつくしいとは お も え る んですが、重複しないという一般常識からは逸脱してると思います。

こんな実装をしたのはどこのどいつだっ!
プンスカプンプン

2014年09月08日

リリースビルドのvshostはイラナイ!・・・んじゃねーのかなw

C#で作ったプログラムなんですが、多重起動のチェックが出来てなかったので調べる事になりました。

ソースを見ると、多重起動のチェックはググられた通りにコーディングされていたので、

ぇ、これがダメなの??

不思議に思いました。

そして、デバッガでメッセージを表示する行でブレークを設定してから多重起動してみたんですが、

確かにチェックされてない模様。


変だなーと思い、更にウオッチしてみたんですが、
System.Diagnostics.Process.GetCurrentProcess().ProcessNameで返って来てるプロセス名に、

".vshost.exe"

っつーのが付いてました。


このプロセス名を含むプロセスを探してるんだから、「引っかからねーわけだ」。
と、勝手に納得。

デバッグ用に生成されるものらしいんですが、リリースモードでも作成されちゃうってぇ事がわかったんで、リリースの時には生成しないようにしました。

本日もありがとうございまつ。

ぅん。ちゃぁんと引っかかってくれるようになりましたとさ。

2014年09月05日

sxstraceを知らなかった。便利だw

他のマッシーンでは動くんだけど買ったばかりのマッシーンで動かないよ。

調べといて。


と言う調査依頼を承ったので調べてみたんです。
意外に早く解決したんで、メモする事は無いかなーと思ったんですけど、恐らく直ぐ忘れちゃうだろうなwと思い直してやっぱりメモしておきます。


@容疑プログラムはC#で書いたヤツだったので、Program.csのMain()に、1ステップ実行する度にメッセージを出すように仕込み。
   MessageBox.Show("1", "hoge", MessageBoxButtons.OK);
   何か実行・・・
   MessageBox.Show("2", "hoge", MessageBoxButtons.OK);
   なにか実行・・・
   MessageBox.Show("3", "hoge", MessageBoxButtons.OK);
   ほげらぴよ・・・

Aそして実行してみて、とあるDLLを組み込もうとした時に異常終了している事をハケーン。

BそのDLLがMFCを使ってた事は、プロジェクトのプロパティから構成を見て確認。

Cコマンドプロンプトを管理者権限で起動して、依存関係をチェック!
   sxstrace Trace -logfile:c:\hoge\piyo.log

D↑コマンドを叩いてからAを再実行して、異常終了する事を再確認。
E依存関係チェックを終了。ログが出力されてた。
Fログをテキストに変換。
   sxstrace Parse -logfile:C:\hoge\piyo.log -outfile:c:\hoge\piyo.txt
※参考にさせていただいた今日の先人m(__)m

GVC90.ATL.DLLが無さそげな事を知る(プロジェクトでATLを使わない事にしてたのになぜ?)
 情報: アセンブリ調査の開始。
  情報: WinSxS でアセンブリが見つかりませんでした。
  情報: マニフェストを C:\windows\assembly\GAC_32\Microsoft.VC90.ATL\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.ATL.DLL で調査しようとしました。
  情報: マニフェストを C:\hoge\Microsoft.VC90.ATL.DLL で調査しようとしました。
  情報: マニフェストを C:\hoge\Microsoft.VC90.ATL.MANIFEST で調査しようとしました。
  情報: マニフェストを C:\hoge\Microsoft.VC90.ATL\Microsoft.VC90.ATL.DLL で調査しようとしました。
  情報: マニフェストを C:\hoge\Microsoft.VC90.ATL\Microsoft.VC90.ATL.MANIFEST で調査しようとしました。
  情報: カルチャ Neutral のマニフェストが見つかりませんでした。
 情報: アセンブリ調査の終了。

HC:\Windows\System32ディレクトリ内にmsvc関連のライブラリが、オイラの環境と比較して極端に少ない事をハケーン!
I再頒布可能パッケージをダウンロードして、対象マッシーンにインスコ。


治ったぁーーーーー

何事も無く動いてたパソコンには、いろいろなプログラムがインスコされていたみたいだから、それらをインスコした時にセットアップされてたんだと思われる。
さてと。

インスコラの作り直しだぬ。

2014年09月01日

MissingManifestResourceExceptionが出たら、調べるより諦めた方が捗る!

オイラのように諦めないといけないのに、「何か方法があるかもしれない」と検索地獄から抜け出せなくなった人たちに、諦めるきっかけになれたらイーナと思って記録しときます。

'System.Resources.MissingManifestResourceException' のハンドルされていない例外が mscorlib.dll で発生しました。

はっきり申し上げて、今のオイラにはお手上げです。
解決までのハードルが高いです。

他の人が作ったソースに手を入れる必要が出てきまして、ダイアログにピクチャーを貼る事になったんです。
ダイアログにコモンコントロールのPictureBoxを追加して、表示させるイメージとして画のデータをリソースにインポートして指定します。
リビルド(もちろんエラー無し)して実行すると、画を貼りつけたダイアログを表示する直前にこの例外が発生します。

'System.Resources.MissingManifestResourceException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報: 指定されたカルチャまたはニュートラル カルチャに対して適切なリソースが見つかりませんでした。
"Hoges.resources" が適切に埋め込まれたか、
 実行時にアセンブリ "Fugas" にリンクされたか、
 または必要なサテライト アセンブリが読み込まれて完全に署名されていることを確認してください。


追加情報によると、
「リソースが適切に埋め込まれたか?」
「実行時に何かがプログラムにリンクされたか?」
「サテライトアセンブリが云々...」
ってぇ事を確認すれば良い様な事が提示されたんですけど、

「リソースが適切に埋め込まれたか?」
→どうやって何を確認すんの?

「実行時に何かがプログラムにリンクされたか?」
何かってのは表示されなかったイメージだと思うんですけど、
 リソースってばリンクされてプログラムに含まれちゃうものじゃ無いの??

「サテライトアセンブリが云々...」
→.NET以外にusingして無いもんですから、何が何やらチンプンカンプンです。


ググってみたんですけどさっぱり意味がワカンナイ

ダメだこりゃ。
諦めた方が早いわw


ウィザードを使って追加したクラスとかフォームを、ソースファイルレベルでネームスペースとかクラス名とかの名称を変更したりしながら、パーシャル使ってソースを分割させたり、ビルドの順序が微妙に変わったりすしてるうちにリソースを追加したりすると、こういった現象が起こるっぽいです。
オイラは良く解って無いんですけど、マイクロソフトによると仕様だそうです。

ですから、Form1とかゆーウィザードが作ってくれる名称を変更する事無くイメージをリソースにインポートすると、問題無く表示されちゃったりするんで、、、しかもソースレベルでdiff取っても違いがさっぱりわかんないとゆーがっかり

フレームワークでお仕事するのもイーんですけど、こーゆーところで躓く事が多いんでキライ!

2014年08月26日

ドハマリ状態から抜けるとうれすい

今日は昨日のドハマり状態とは全然違って、決して順調では無いけど前に進めて気分がEです。

まぁなんですな。良く理解できてないのに応用しようとしちゃダメって事か。

@php_mbstringは別途インスコしないとつかぇねぇ。
Ayumのローカルリポジトリは便利だけど、外に出てアップデート出来ないと大変。
Bvmwareのbios起動はタイミング勝負
CMySQLを外部クライアントからアクセスさせるには、ポートを開けたり、ルートの設定をしたり、アクセス出来る端末の設定をしたりしなきゃいけないってぇ事も解りました。
DWebClientは応用を利かせにくいので、少しでも応用する可能性があったら、WebRequestの使い方を覚えていた方が捗る。
Eそもそもhttpでファイルをアップロードするには、鯖との連携が必須!クライアント単独では無理w

Dに関しては「このサンプルを参考にすれば簡単だよ!」と言われてしぶしぶやってみて、言われた効能を理解したつもりになれるものの、ちょっと応用しようとしたら、やっぱり知らない事が多くって、途端にドハマリする事になるから、

年寄りがあらたしい言語を敬遠しちゃう理由はこれなんだろうなーーー

と思いました。


結局なんだかんだで二日ほど無駄に費やしてしまったんだけど、若い人達って2時間位でなんとかするんだろうなと思いました。
一応オイラ自身にとっては勉強になったんだけど、お客さんには無関係ですからねー。
そう思うと、この業界であと20年食っていけるかが非常に心配になりました。

そうそう。ホストオンリーネットワークで構成したvmware上のyumリポジトリを、お外に出る事無く更新する方法を探さないと。

2014年08月25日

vmwareはNATで使うのが良さそげ

オイラはlinuxに精通して無いので、vmwareを経由してlinuxを使う際のNIC設定は、ホストオンリーでは無くNATが良さそうだと言う事に気が付きました。

ゲストOSから外に出るのを遠慮してたんで、ホストオンリーでやってたんですけど、php-mbstringのインストールがうまく出来なくって、しかもホストオンリーからNATへの設定換えもうまくいかなかったので、

あたらしい仮想マシンを作りました。


もう何をやってるんだかさっぱりわかんなくなってますww

で、問題の障害を超えたかと言うとそうでは無くって、

php-mbstringをインストール出来たにも関わらず、

Call to undefined function mb_strlen()

というエラーが出ている体たらく。。。

もう疲れた。

2014年08月12日

IISが繋がんなくなった

IISと言えばインターネットインフォメーションサービスの略で、オイラは鯖蔵のアプリをローカルで開発する際に利用しています。

普段は違う鯖にアクセスしてるんですが、いきなり404が出てきたんで慌てふためいちゃいまして紆余曲折。

「ぁ、メンテナンス中でしたか。」

という事だったので、作業用の鯖をlocalhostに変えたんですね。
まぁ、スクリプトのメンテをしてなかったけどしかたねーし。

ところがです。


IISを経由したホムペもタイムアウトになっちまって接続できなくなったんですよ。
アンインスコしてしまったわけでも無く、モノはあるんですよね。


おかしいなーと思って、インターネットインフォメーションサービスマネージャーを起動したら、操作ペインのWebサイトの管理ってトコに表示されている「開始」アイコンが有効になってました。

「起動していない。IISが起動していない!」


すかさず起動ボタンをクリックしたらエラーになりまして、

「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」

ぇ、、、


どうもポートが占有されちゃってるようで。

じゃぁそのポートを使ってるのは誰?


というわけで、コマンドプロンプトで、

netstat -nao

とぶち込みました所、とあるPIDのプロセスが使っているという事でした。

で、タスクマネージャーを起動して、サービスタブをクリックしたら、そのPIDのプロセスがありましたよ。

vmwareのNATサービスでした。

そう言えば心当たりが以下自粛...


コンピューターの管理ウィンドウからサービスを選んで、念のためvmware関係のサービスを停止して、再度IISを起動してみたところ、

無事にlocalhostにアクセスできましたとさ。


本日も先人に感謝いたします。

2014年08月01日

サンプルコードの警告はとりあえず無視した方が良いのかも

最近のお仕事ぶりは、
「コピペ上等!とりあえず動きゃいーやw」
という進め方が多いので、
「もうオイラは技術的に駄目だな。こりゃw」
という諦めに近い言い訳がオイラの精神を支配しているみたいです。

いろいろとゴタク並べてもショーが無いし、
とりあえず「出来ますよ」ってハッタリかましておいて、お仕事貰って、もがきながら動くもんが出来て、お金を貰えりゃあ、
中身なんて何だってイーんですよ。

ダークサイドに染まっております。


その昔C/C++でsocketプログラミングを勉強した際には、サンプルコードを良く読んで、手順の一つ一つを咀嚼してから自分なりに実装してみて、その結果サンプルコードと近いもんになっても良しとしていて、動かしているうちにサンプルコードではハンドリングされてなかった異常系の対処なんかを取りこんでいるうちにソースが汚くなっちゃって、どっかでリエンジニアリングしてオリジナルにしちゃった。
ってな経験とソースが残ってるので、

「出来ればC/C++でやりたいなー」

とは思っていても、

「C#は簡単・楽です云々...」

とご提示いただいた仰せには敵いませんから、
拾ったサンプルコードを持ってきて動くように合わせていまっす。


まぁイーです。モノ覚えも悪くなってきたお年頃ですから。


C#でソケット鯖のサンプルがありまして、とりあえず動かしてみようとコンパイルしてみたところ、

「警告 CS0618: 'System.Net.Dns.Resolve(string)' は古い形式です:
'Resolve is obsoleted for this type, please use GetHostEntry instead.
http://go.microsoft.com/fwlink/?linkid=14202'


ってな警告が出て、Resolveが使えないならGetHostEntryを使えばいーじゃない。
という様な事を促されました。

ほうほうなるほどと思って、一応ググってオイラ以外の事象を探してみたところ、ResolveとGetHostEntryは同じ動作をするもんらしいので、
「名称の変更だけなのかな。」

と思って、他に何も疑う事無く実行してみたところ、例外が発生したんですよ。

"要求したプロトコルと互換性がないアドレスを使用しました。"


何で?どうして?いくらM$とは言え、動かないサンプルを提示してるわきゃないよな。

→デバッグ。サンプルコードを御参照くださいね。
どうもここで例外が出たっぽい。

listener.Bind(localEndPoint);

アドレスと言えば localEndPoint か。

localEndPointをウオッチしてみると、AddressFamily が InterNetworkV6 になっている。。。

おっと、ソケットのコンストラクタには AddressFamily.InterNetwork を指定しているぞ。

もしや!

と思いまして、Socketのコンストラクタに指定する第一パラメータに与える引数を AddressFamily.InterNetworkV6 にしてみたところ、例外は出なくなりました。


ところで、GetHostEntry では無くて Resolve を使ってみたところ、AddressFamily.InterNetwork を指定したままでも動いたので、
念のためウオッチしてみました。

Resolve を利用して得た IPHostEntry は ipv4 のアドレス群が設定されていました。
GetHostEntry を使った場合は ipv6 のアドレス群も設定されてました。

サンプルコードでは、IPAddress として選択するアドレスを、IPHostEntry の0番目にしていたので、ipv6のアドレスが選択されていて、Socket のコンストラクタにはipv4のAddressFamilyを指定していたので、

そりゃ互換性がねーやwww


すごく納得いたしました。

・・・おっと、こんな検証をするからオイラの仕事は遅いんだ。
そんな事はほったらかして次に進むようにしないと。

警告は気にしないでとりあえず先に進めなけりゃ素早い開発は出来ませんね。
海外のプログラマー達にお仕事を取られるばっかりです。

まだまだダメな技術者のオイラです。


追記:
GetHostEntryはv6とv4の情報を、両方含めて返してくれるんですけど、その分別が面倒なんで、Resolveを使う事にしました。はぃ。

2014年07月24日

windows media player で/closeが効かなくなった

windows media playerをコマンドプロンプトから起動する際に、挙動を指定するパラメータがいくつかあるんです。

で、動画を再生して、終了したら跡形も無く消える。
って動作を期待して、

"c:\Program Files\Windows Media Player\wmplayer.exe" /play /close /fullscreen c:\hoge.mp4

とまぁ↑のようなコマンドを打ち込んだんですよ。

フルスクリーンになって再生して終わったんですけど、

windows media player のウィンドウが閉じないんですよ。


どうした事かと思って、引数のあれを変えこれを試してと試行錯誤したんですけど、ぜんっぜんワカンナイ。

もちついてググってみたら、
/closeはサポートされなくなった模様
って情報をゲット!

どうりで閉じられないわけだ。
対応策を考えないといけません。

マイクロソフトのヴァカヨロー!涙

2014年06月30日

C#で_splitpath

※重要※
GetDirectoryNameがタコのせいでの仕様のためか、本記事のソースは御利用できません。
っつかまともにディレクトリを取ってくれませんでした。
後日まともなものが出来たら本記事を改修いたします。



ずっと以前にCEで_splitpathっつーのを書いたんですけど、C#でも書く必要が出てきたので書いちゃいました。

っつか、本来の正しい方法が解かんなかったんで、対処のメモでつ。

そもそもC#の文法とか書き方とかにまだ理解できてない点が多くってですね、他愛も無い事にハマっちゃいました。


splitpathと言えば、windowsで8.3形式のファイル名から、
ドライブレター、パス文字列、ファイル名と、あればその拡張子を含んだ文字列を、必要に応じてパーツに分けてくれる優れモノのapi(w)ですが、
C#でコーディングしてると、それが無い事に気が付きました。
Pathというクラスがあるので、splitpathが無くても不自由しないんですけど...ぃゃしないんでしょうけど、必要が出たので作ってみる事にしました。


最初はまぁsplitpathに分割するメソッドを書いておきゃぁいいよね。
と思ってこのように実装。

private void SplitPath(string PathStr, ref string Drive, ref string Dir, ref string Fname, ref string Ext)
{
Drive = Path.GetPathRoot(PathStr);
Dir = Path.GetDirectoryName(PathStr);
Fname = Path.GetFileNameWithoutExtension(PathStr);
Ext = Path.GetExtension(PathStr);
}


ぅんぅん。まぁこんなもんでしょう。


で、それをテストするためのプログラムを作ってテストしたんでしゅよ。



private void TestSplits()
{
string Drive = @"";
string Dir = @"";
string Fname = @"";
string Ext = @"";

SplitPath(@"", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"C:", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"C:\", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"C:\hoge\piyo\fuga", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"C:\hoge\piyo\fuga.exe", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"\hoge\piyo\fuga.exe", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"\hoge\piyo\fuga", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"hoge\piyo\fuga.exe", ref Drive, ref Dir, ref Fname, ref Ext);
SplitPath(@"hoge\piyo\fuga", ref Drive, ref Dir, ref Fname, ref Ext);
}


そして早速実行...例外発生!

ぇぇぇえええ〜〜っ!

例外って土湯事??
・・・デバッグの結果、
どうやらGetPathRootに空文字列を渡したのがいけなかったらしいです。

GetDirectoryNameも空文字を渡すと例外になるっぽいです。

でもGetFileNameWithoutExtensionGetExtensionは全く平気w

この違いはなんでなんだろう?
ちょっと考えてみたけど解かんないからスルーw


とりあえずエラーをキャッチして空文字で埋めてあげる事にしますた。


private void SplitPath(string PathStr, ref string Drive, ref string Dir, ref string Fname, ref string Ext)
{
try {
Drive = Path.GetPathRoot(PathStr);
}
catch { Drive = @"";}

try {
Dir = Path.GetDirectoryName(PathStr);
}
catch { Dir = @""; }

Fname = Path.GetFileNameWithoutExtension(PathStr);
Ext = Path.GetExtension(PathStr);
}


さてと。これで例外は出ないからテストテスト。。。

ちゃんとフルパスが分割されて、、、ぇえーっ!!

ディレクトリの文字列にドライブレターが残ってんじゃん!
それじゃぁsplitpathじゃないし。

で、解説を読んでみたけどさっぱりわかんない。


仕方が無いので、ドライブレターがある時にはそれをさっぴく事にしました。


Drive が "C:\" で、
Dir が "C:\hoge\piyo\fuga"の時には、
Dir を "hoge\piyo\fuga"にしたい。
つまりDirの行頭からDriveを消しちゃえば良いのさ。


というわけで作ってみたんですが、


private void SplitPath(string PathStr, ref string Drive, ref string Dir, ref string Fname, ref string Ext)
{
try {
Drive = Path.GetPathRoot(PathStr);
}
catch { Drive = @"";}

try {
Dir = Path.GetDirectoryName(PathStr);
if ((Drive.Length > 0) && (Dir.Length > Drive.Length))
{
Dir.Replace(Drive, "");
}
}
catch { Dir = @""; }

Fname = Path.GetFileNameWithoutExtension(PathStr);
Ext = Path.GetExtension(PathStr);
}

Dirの中身が全然変わりません。

ここでハマりましただ。

で調査する事2時間程。

Replaceメソッドは「新しい文字列を返す」のでした。

あ〜こんな事に気が付かないとは。なんという恥。正直はずかちい。

というわけで、このように書いたら目的通りに動くようになりましたとさ。


private void SplitPath(string PathStr, ref string Drive, ref string Dir, ref string Fname, ref string Ext)
{
try {
Drive = Path.GetPathRoot(PathStr);
}
catch { Drive = @"";}

try {
Dir = Path.GetDirectoryName(PathStr);
if ((Drive.Length > 0) && (Dir.Length > Drive.Length))
{
Dir = Dir.Replace(Drive, "");
}
}
catch { Dir = @""; }

Fname = Path.GetFileNameWithoutExtension(PathStr);
Ext = Path.GetExtension(PathStr);
}


C#ってば、ガベージコレクションが動くらしいのでメモリの解放なんざまったく気にしていませんが、
動いたからまぁいいや。
ここで終わりに出来るのがC#のイートコだゆねw