あいそびの開発ノート
2022-03-18T20:38:00+09:00
isoq
ソフトウェア開発で見つけたこと、気づいたことなどのメモと日記です
Excite Blog
Windows 10 VPN接続の「VPNに接続できません」エラー解消方法
http://isobe.exblog.jp/241395437/
2022-03-18T20:38:00+09:00
2022-03-18T20:38:00+09:00
2022-03-18T20:38:00+09:00
isoq
コンピュータ
ものすごくハマった問題の解決策のメモです。
Windows 10でのVPN接続で、以下のエラーが出ました。
VPNに接続できません
リモートコンピューターと最初にネゴシエートするときに、セキュリティ層で処理エラーが検出されたため、L2TP接続に失敗しました。
Web検索しても解決策がみつからず、悩んだのですが、原因がわかりました。
ローカルネットワークのローカルIPアドレスのネットワークアドレスが、接続先ネットワークのネットワークアドレスとぶつかっていたため!
でした。
例えば、PCのIPが192.168.10.100で、接続先のネットワークが192.168.10.xだったということです。
どちらのネットワークアドレスも変更できないような場合は、解決が難しいかもしれませんが、幸いなことに、使用していないネットワークインターフェイスの固定IPアドレスだったので、PCのIPを変更したところ、つながるようになりました!
]]>
CMFCButton::EnableFullTextTooltipについて
http://isobe.exblog.jp/240337985/
2020-05-21T14:57:00+09:00
2020-05-21T14:59:55+09:00
2020-05-21T14:57:22+09:00
isoq
C/C++/Win32
CMFCButton::SetTooltip() によって任意のツールチップ文字列を表示したい場合は、EnableFullTextTooltip(false) で呼び出しておく必要があります。
なんなのこれ?
]]>
C++のコンマの使い道(の指南にはなっていませんが)
http://isobe.exblog.jp/240272987/
2020-04-28T22:11:00+09:00
2020-04-28T22:22:16+09:00
2020-04-28T22:11:16+09:00
isoq
C/C++/Win32
#include <iostream>
bool a()
{
std::cout << "Hello World!\n";
return true;
}
bool b()
{
std::cout << "Good Bye!\n";
return false;
}
bool c()
{
std::cout << "Dead!\n";
return false;
}
int main()
{
0; // 作用が無いため、コンパイラに無視される
int x = (0, 1, c(), 3, 4, 5); // x = 5 と同義(ただし、それ以外の作用が無い値は無視されるが、c()は呼び出される)
a(), b(), c(); // 左から順に処理される
do
{
std::cout << x << std::endl;
} while (a(), b(), c(), x--); // whileとしては x-- のみ評価されるが、それ以外の関数も左から順に評価される。
do
{
std::cout << "The End!" << std::endl;
} while (0,0); // フクロウの顔をコードに描きたいときにはこう書く!(右の0のみ評価され、左の0は無意味)
// C6319 テストされた式内でのコンマ演算子を使用すると、作用が存在しないときに左辺の引数が無視される原因となります
// これは、左の0 に作用が無いため、コンパイラに無視され、コード化されない可能性がある事を示す
}
]]>
「windowsセットアップは1つ以上の起動に不可欠なドライバーをインストールすることができませんでした。ドライバーが適正であることを確認し、再度インストールを実行してください。」の解決方法
http://isobe.exblog.jp/240170763/
2020-03-08T16:24:00+09:00
2020-03-08T16:24:41+09:00
2020-03-08T16:24:41+09:00
isoq
Windows
CD-ROMが入っていると、そこから起動するために不可欠なドライバーを探すらしい。
ドライバーが見つからないと、このエラーが出るらしい。
]]>
生涯プログラマー生活
http://isobe.exblog.jp/238526241/
2018-05-17T02:11:00+09:00
2018-05-17T02:11:20+09:00
2018-05-17T02:11:20+09:00
isoq
開発日記
今年ではや43歳になりますが、
現役のプログラマーをさせていただいております。
しかし最近は、キーボードを叩くだけではなく、
ハンダゴテを握ったり、
オシロスコープで波形を見たり、
開発対象を追いかけたり、
来客中にコンデンサーを爆発させて冷や汗をかいたりと、
仕事の幅は際限なく膨らんでいっていますし、
ものすごい過密なスケジューリングでやっつけ仕事が多いですが、
楽しくやっています。
]]>
秋月のUSBオシロスコープがUbuntuで動いた
http://isobe.exblog.jp/238526232/
2018-05-17T01:55:00+09:00
2018-05-17T01:55:37+09:00
2018-05-17T01:55:37+09:00
isoq
Ubuntu / Linux
すごい時代になったものです。
でもハードウェアへのアクセスがあるソフトを使用するとなると、少し敷居が高い。
秋月電子通商のUSBミニオシロ/データロガー OSC001 PCB SCOPE を愛用しているのですが、今までWindowsでしか動かなかったので、最近の普段使いのUbuntuからデュアルブートのWindows 10を起動し直すのも面倒だし、、、、
どうしたらUSBオシロスコープへのアクセスができるようになるか探して、見つけた。
USBオシロスコープは、HIDデバイスとして認識されることは、 $ ls /dev や $ dmesg の結果を見てわかった。
調べたところ、こんな情報が出てきた。
Hid - WineHQ Wiki
このサイトによると、 Wine の HID 対応は実装済みだけど、デバイスファイル /dev/hidrawX へのアクセス権が無くて使用できないと。。。それだけか。。。
$ sudo chmod 666 /dev/hidrawX を実行したところ、PCB Scopeソフトが実行できるようになりました。
毎回打つのが面倒なので、udevルールファイルを作成。
内容はこんな感じ。
SUBSYSTEMS=="usb", ATTRS{idProduct}=="f891", ATTRS{idVendor}=="04d8", ATTRS{manufacturer}=="Mikroelektronika", ATTRS{product}=="USB HID Library", MODE="0666"
]]>
Outlookの文字化けメッセージのデコード
http://isobe.exblog.jp/22458982/
2016-02-15T10:50:59+09:00
2016-02-15T10:50:59+09:00
2016-02-15T10:50:59+09:00
isoq
コンピュータ
ClamWin Free Antivirus
---------------------------
(-2147352567, '\x97\xe1\x8aO\x82\xaa\x94\xad\x90\xb6\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81B',
(4096, 'Microsoft Outlook',
'\x93Y\x95t\x83t\x83@\x83C\x83\x8b\x82\xf0\x95\xdb\x91\xb6\x82\xc5\x82\xab\x82\xdc\x82\xb9\x82\xf1\x81B \x82\xb1\x82\xcc\x91\x80\x8d\xec\x82\xf0\x8ds\x82\xa4\x82\xbd\x82\xdf\x82\xc9\x95K\x97v\x82\xc8\x83A\x83N\x83Z\x83X\x8c\xa0\x82\xaa\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B', None, 0, -2147024891), None)
---------------------------
OK
---------------------------
Outlook でメールを開こうとしたら、上記の文字化けのエラーメッセージが表示されて、何かと思ってバイナリエディタで解読してみました。
したら、以下の内容になりました。
'\x97\xe1\x8aO\x82\xaa\x94\xad\x90\xb6\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81B'
= 例外が発生しました。
'\x93Y\x95t\x83t\x83@\x83C\x83\x8b\x82\xf0\x95\xdb\x91\xb6\x82\xc5\x82\xab\x82\xdc\x82\xb9\x82\xf1\x81B \x82\xb1\x82\xcc\x91\x80\x8d\xec\x82\xf0\x8ds\x82\xa4\x82\xbd\x82\xdf\x82\xc9\x95K\x97v\x82\xc8\x83A\x83N\x83Z\x83X\x8c\xa0\x82\xaa\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B'
= 添付ファイルを保存できません。この操作を行うために必要なアクセス権がありません。
最近、テスト目的でClamWinをインストールしたのですが、ClamWinは、Outlookと一緒に働いている事を知りました(笑)
]]>
特定の条件でAvahiでの名前解決が出来ない問題
http://isobe.exblog.jp/21074016/
2015-04-01T23:04:35+09:00
2015-04-01T23:04:37+09:00
2015-04-01T23:04:37+09:00
isoq
Ubuntu / Linux
このように、特定の条件でAvahi名前解決が出来なくなる問題が起こる原因は、自動名前解決サービスの Avahi が停止したためと考えられます。
DHCPサーバーに接続して、PCを起動した際、次の様なメッセージが表示される事があります。
(日本語版の Ubuntuだと、日本語で表示されるかもしれません。)
Network service discovery disabled
Your current network has a .local domain,
which is not recommended and
incompatible with Avahi network
service discovery. The service has been
disabled.
これは、その環境の DHCPサーバー/DNS サーバーにより、 .local というドメイン名が既に使用されており、 Avahi が起動時にそれ検出、競合を避けるために Avahiがサービスを停止した事を示すメッセージです。
これについて、次のページで、対処方法が解説されています。
https://wiki.ubuntu.com/JauntyJackalope/ReleaseNotes#Avahi
Avahi will not start if a .local domain is present
The avahi-daemon package, which implements the mDNS "zeroconf" standard, includes a check to avoid running when a conflicting .local DNS domain is present. It is reported that some ISPs advertise such a .local domain on their networks, which will leave Ubuntu 9.04 hosts unable to see names advertised on the local network (327362).
To force the use of mDNS on a network configured this way, users can run the commands:
sudo sed -i -e'/AVAHI_DAEMON_DETECT_LOCAL/s/1/0/' /etc/default/avahi-daemon
sudo service avahi-daemon start
PCにて、上記の2つのコマンド
sudo sed -i -e'/AVAHI_DAEMON_DETECT_LOCAL/s/1/0/' /etc/default/avahi-daemon
sudo service avahi-daemon start
を実行することで、 そのPCからAvahiの名前解決が可能になります。
ただし、そのPCだけが名前解決が出来る様になっただけで、他のPCや装置も同じような設定を行う必要があります。
そられの中には、ユーザーでは設定を変更出来ないものもある可能性があります。
そうなると、現実問題として、解決には、DHCPサーバー/DNS サーバー側にて、 .local を使用しないように設定するか、別の.local を使用しないDHCPサーバー/DNS サーバーを使用するしかありません。
]]>
電車の中からテスト
http://isobe.exblog.jp/21066763/
2015-03-31T08:31:17+09:00
2015-03-31T08:37:38+09:00
2015-03-31T08:36:11+09:00
isoq
日記
川崎と蒲田の間にある多摩川。
河川敷が広くて、野球やら、サッカーやら、ランニングやら、様々なスポーツで利用されています。場所多摩川[#PARTS|USER|99676#]
]]>
はーるを愛するヒートーハー
http://isobe.exblog.jp/21065153/
2015-03-30T21:04:00+09:00
2015-03-30T21:18:14+09:00
2015-03-30T21:18:14+09:00
isoq
日記
春ですなー
きもちえがったです。
そして、近くのスーパーというかマイバスで、
30本入りブレンディ(粉)を買ったところ、
マルちゃんの大きめのカップラーメン(豚骨)が、
98円の30%OFFだったので、おひるはカップ麺。
あと、おにぎり1つ。
マイバスのおにぎりは、
最近のロ◯ソンのおにぎりよりうまかった。
ロー◯ンは、米がまずくなったよね。
だから、ここ最近は、ローソ◯では、おにぎり買ってない。
ローソンは、ほぼ毎日使ってるから、期待してるんだけどね。
中でトレイが重なっているだけのサラダを立てかけて、
ミックスしないで欲しい!と言っておく!
愛しているからゆえにね。
今週末は花見出来るといいなぁ〜
]]>
そろそろ再開
http://isobe.exblog.jp/21057674/
2015-03-29T11:07:56+09:00
2015-03-29T11:07:57+09:00
2015-03-29T11:07:57+09:00
isoq
日記
履歴によると、2012年1月までは、ほぼ毎月の投稿をキープしていたようです。
なぜ更新が止まってしまったのか?
過去のメールボックスを整理していたら、当時のメールが出てきました。
このあたり↓が関係していそうです。
【ドラクエ・パラダイス】運営チーム
2012/02/20
━━━━━━━━━━━━━━━━━━━━━ ◆vol.014━━2012.02.20━
★ドラクエ・パラダイス★ 期間限定メールニュース(無料)
http://form.square-enix.com/c.p?02cazav2Mpd
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
こんにちは、ドラパラメールニュース編集部です。
ついに、『ドラゴンクエストX』ベータテストの日程が決定しました!
届いたばかりの齊藤プロデューサーからのメッセージをご覧ください!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★『ドラゴンクエストX』ベータテストは2月23日スタート!
(以下省略)
わかった!これだ!謎は解けた!(笑)
というわけで、年甲斐もなくというか、世代相応にというか(笑)、
どっぷりとMMORPGになったドラクエ10にはまっていたわけですが、
今までのオフラインRPGと違って、
オンラインRPGでは、エンディングを終えても、世界が動いているわけで、
その世界には友達がいて、チームの仲間がいて、
自己顕示欲を満たすための通貨を稼ぐ必要があって、
そのためにノルマ化された日課の作業があったり、
なかなか抜け出しにくくなっています。
Ver.2のエンディングを迎えまして、
そろそろいい加減に終わろうかとおもひまして課金ストップ。
このページでは、株式会社スクウェア・エニックスを代表とする共同著作者が権利を所有する画像を利用しております。当該画像の転載・配布は禁止いたします。
ここ最近、社会復帰を果たしましたので、
ブログ(このままここで続けるかは考え中ですが)を再開しようと思います。
これからもよろしくお願いします (^^)ノ"
あいそび拝]]>
MFCをまねしたちょこっとした便利マクロ
http://isobe.exblog.jp/18831375/
2013-10-22T16:03:33+09:00
2013-10-22T16:01:14+09:00
2013-10-22T16:01:14+09:00
isoq
C/C++/Win32
#include <tchar.h>
#define TRACE(str, ...) \
{ \
TCHAR c[256]; \
_stprintf( c, str, __VA_ARGS__ ); \
OutputDebugString( c ); \
}
]]>
CTabView/CMFCTabCtrl のタブをマウスホイールでスクロールさせる
http://isobe.exblog.jp/14560256/
2012-01-31T01:06:00+09:00
2012-01-31T01:07:46+09:00
2012-01-31T01:06:44+09:00
isoq
C/C++/Win32
で、MFCのCTabViewを使ってみたところ、タブが収まりきらなくなると画面外にタブが並び、それを画面内に持ってくるにはボタンで、タブを1つずつ移動していかないといけない。これがとても面倒で、タブがたくさんあるとうっとうしい。ボタンが小さくて、右の方にあるから余計に使いにくい。
そこで、マウススクロールでタブを切り替えできないかと、それらしき機能を探したが見つからない。
CTabView で使用しているタブコントロールは、 CMFCTabCtrl です。
一番簡単なのは、CMFCBaseTabCtrl::GetActiveTab() で現在アクティブなタブのインデックスを取得して、CMFCBaseTab::SetActiveTab() を使って、+1 や -1 したインデックスのタブをアクティブにして、EnsureVisible() で画面に表示する方法。
でも、今回は、タブをアクティブにしないでスクロールだけしたかった。
というのも、たくさんタブがあって、その1つ1つがアクティブになった時に画像データを読み込むんだけど、画像データのサイズが半端なくでかい。
最小100MB~最大1GB強の画像データ・・・ってどんなんだ!
A4一枚程度を 1200dpi / 48bit カラーでスキャンした生データなのです。
だから、なるべく使ってない画像は開きたくない。
そこで、次のように、ちょっと危険な手を使って、スクロールを実現してみました。
// CMFCTabCtrl のハッククラス(ポインタをキャストして使用する)
class CMFCTabCtrlEx : public CMFCTabCtrl
{
public:
int GetTabsHorzOffset(){ return m_nTabsHorzOffset; } // オフセット取得
void SetTabsHorzOffset(int nOffset) // オフセットをセット
{
m_nTabsHorzOffset = nOffset;
AdjustTabs();
AdjustTabsScroll();
RedrawWindow();
}
int GetTabsHorzOffsetMax(){ return m_nTabsHorzOffsetMax; } // オフセットの最大値を取得
private:
CMFCTabCtrlEx(); // インスタンス化拒否
};
BOOL CXxxTabView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
CMFCTabCtrlEx* pTabCtrlEx = (CMFCTabCtrlEx*)&GetTabControl();
pTabCtrlEx->ScreenToClient(&pt);
if(pTabCtrlEx->IsPtInTabArea(pt))
{
int nPos = pTabCtrlEx->GetTabsHorzOffset();
int nMax = pTabCtrlEx->GetTabsHorzOffsetMax();
int nScroll = 50; // スクロール量(ピクセル?)
if(zDelta < 0)
{
int nTarget = nPos + nScroll;
if(nTarget > nMax) nTarget = nMax;
if(nTarget < 0) nTarget = 0;
pTabCtrlEx->SetTabsHorzOffset(nTarget);
}
else
{
int nTarget = nPos - nScroll;
if(nTarget < 0) nTarget = 0;
pTabCtrlEx->SetTabsHorzOffset(nTarget);
}
}
else
{
return CTabView::OnMouseWheel(nFlags, zDelta, pt);
}
}
CMFCTabCtrlのソースコードを眺めて、スクロール処理している部分を特定して、擬似的にそれを実行する。
変数が、protected だったから、CMFCTabCtrl のままだとアクセスできないから、ダミーの派生クラスCMFCTabCtrlExを作成して、そのポインタに無理矢理CMFCTabCtrlのアドレスを突っ込んで、独自処理を組み込んだ見せかけの派生クラス上で処理させました。
こんな事が出来るのも、C++だからこそ。
.NETじゃ絶対に出来ないなぁ。
]]>
MFC なぜかメッセージボックスが表示できなくなる原因が判明
http://isobe.exblog.jp/14548744/
2012-01-29T17:52:00+09:00
2012-01-29T17:53:42+09:00
2012-01-29T17:52:58+09:00
isoq
C/C++/Win32
MessageBox(_T("test"), _T("test"), MB_OK);
とか
AfxMessageBox(_T("test"));
とかです。
本当に基本的なメッセージボックスの表示方法ですが、どこに書いても音が鳴るだけで、メッセージボックスが表示されない!
そして、音の後に [Alt] キーを押すと、なぜかメッセージボックスが表示される・・・
メッセージボックスの表示が [Alt] キー入力を待っているような感じになってしまっていたのです。
原因がわからず、プログラム全体を 少しずつコメントしたり戻したりした結果、努力の甲斐無く、全く原因がつかめませんでした。
そして、スケルトンからやり直して、ちょっとづつコードを足していって・・・最初は問題なく、表示されていたため、ちょっとがんばってたくさんコードを移植すると発生! (^^;) もっとじっくりやればよかった・・・
それでもその間のコードを確認しながらやってみるてやっと鍵を見つけました!
ここです!
void CXxxxYyyyView::OnPaint()
{
CPaintDC dc(this); // これを消していました
CPaintDC は、画面の無効領域だけを更新するためのDCですが、使わなかったので、消してしまって、CDC* pDC = GetDC(); とやって、そちらのDCを使用していました。
が、どうやらここで、CPaintDC をインスタンス化しないことが原因で、メッセージボックスが出なくなっていたようです。
こんな事もあるんですね・・・・ MFC ・・・・・
]]>
MFCのCImageでPNGファイルのアルファブレンドがおかしいの解決方法
http://isobe.exblog.jp/14546992/
2012-01-29T12:54:00+09:00
2012-01-29T12:56:25+09:00
2012-01-29T12:54:57+09:00
isoq
C/C++/Win32
Photoshop、Office、Windows Paint(on Win7)では、正常に表示できる画像が、CImageで読み込むと、色が崩れたり、アルファ値がおかしかったりする。 Visual Studio 2010 IDE のリソースエディタ で読み込んでも、CImage と同じ画像が出てくるので、CImage自体に問題があり、Visual Studio 2010にもその問題が引き継がれているらしい。
これは、おそらくCImage のバグ。
なかなか原因がつかめなかったのですが、次のサイトで解決策を発見。
wrong alpha blending with CImage::AlphaBlend() & *.png
これを参考に、次のようにして問題が解決しました。
CImage m_image;
if(SUCCEEDED(m_image->Load(strFileName)))
{
if(m_image->GetBPP() == 32)
{
// PNGのアルファ問題回避
if(strFileName.Right(3).CompareNoCase(_T("png")) == 0)
{
unsigned char * pCol = 0;
long w = m_image->GetWidth();
long h = m_image->GetHeight();
for(long y = 0; y < h; y ++)
{
for(long x = 0; x < w; x ++)
{
pCol = (unsigned char *)m_image->GetPixelAddress(x,y);
unsigned char alpha = pCol[3];
if(alpha != 255)
{
pCol[0] = ((pCol[0] * alpha) + 128) >> 8;
pCol[1] = ((pCol[1] * alpha) + 128) >> 8;
pCol[2] = ((pCol[2] * alpha) + 128) >> 8;
}
}
}
}
// アルファチャンネルON
m_image->SetHasAlphaChannel(true);
}
}
]]>
https://www.excite.co.jp/
https://www.exblog.jp/
https://ssl2.excite.co.jp/