<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5400483695352400154</id><updated>2024-09-01T13:04:39.121+09:00</updated><category term="Programming tips"/><category term="お知らせ"/><category term="arduino"/><category term="iPhone"/><title type='text'>ほぼ業務日誌</title><subtitle type='html'>仕事している中で日々感じたこと、プログラミングメモなど</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://trifield.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-8840241317840362537</id><published>2011-06-13T10:57:00.000+09:00</published><updated>2011-06-13T10:57:20.819+09:00</updated><title type='text'>何時の間にかお名前.comでGoogleAppsのDKIMが設定できるように</title><content type='html'>2011年初め時点では、お名前.comでGoogleAppsのDKIM設定しようとすると&lt;br /&gt;
&quot;_&quot;が引っかかって設定失敗していたのですが、&lt;br /&gt;
いつの間にかできるようになっていたようですね。&lt;br /&gt;
&lt;br /&gt;
情報公開してくださった方に感謝。早速設定しました。&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/8840241317840362537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/8840241317840362537'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2011/06/comgoogleappsdkim.html' title='何時の間にかお名前.comでGoogleAppsのDKIMが設定できるように'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-2314109511042430507</id><published>2010-05-31T06:59:00.000+09:00</published><updated>2010-05-31T06:59:11.527+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><title type='text'>iPhone Developer Program 契約更新顛末</title><content type='html'>iPhone Developer Program 契約更新するときの顛末を、自分のメモも兼ねて。&lt;br /&gt;
もしかすると、さくねんから少しは改善されているのかな?&lt;br /&gt;
&lt;br /&gt;
1) 「更新15日前だよ～」みたいなメール(もちろん英語)が届く。&lt;br /&gt;
&lt;br /&gt;
2) Appリリースしていないのに更新しようか悩む。&lt;br /&gt;
でもまぁ、実機でテストするにはiPhone Developer Program必要なので更新すること。&lt;br /&gt;
&lt;br /&gt;
3) iPhone Developer Programサイトにログインし、表示されていた更新へのリンクをクリック。&lt;br /&gt;
&lt;br /&gt;
4) 更新をカートに入れると、例の通り日本のAppleStoreサイトに飛ばされる。&lt;br /&gt;
&lt;br /&gt;
5) ここで、寝ぼけてiPhone Developer Program登録している英語アカウントでなく、&lt;br /&gt;
日本のAppleStoreで購入している日本語アカウントでログインし決済してしまう。&lt;br /&gt;
&lt;br /&gt;
6) 半日くらいしても音沙汰無いので、思い返してみると、&lt;br /&gt;
もしかして、日本語アカウントも昔SDKダウンロードするのにiPhone Developer Program&lt;br /&gt;
登録していたので、そっちの新規契約扱いになっていないか?&lt;br /&gt;
と、気がつき慌ててAppleStoreのお問い合わせメールで、日本語アカウントでの&lt;br /&gt;
購入手配をキャンセル依頼。 (ライセンス販売はNGと規約に書いてあるけど、ダメ元)&lt;br /&gt;
&lt;br /&gt;
7) ググっると、iPhone Developer Program登録を英語アカウント、&lt;br /&gt;
決済を日本語アカウントにしたときでも、、うまく行ったり行かなかったりするケースがあるらしく、&lt;br /&gt;
ますます不安に。週明けになって音沙汰無ければまたADCサポートに問い合わせかな～&lt;br /&gt;
などと考える。&lt;br /&gt;
(昨年の新規登録時は、英語アカウントで決済して案の定引っかかり、&lt;br /&gt;
サポートに対応して頂きましたが。。。）&lt;br /&gt;
&lt;br /&gt;
7) 週明け(今)になって、&quot;Apple Developer Program Activation Code&quot;というメール到着。&lt;br /&gt;
当然日本語アカウント側のメールに。&lt;br /&gt;
でも、メールの名前は文字化けしていない！&lt;br /&gt;
&lt;br /&gt;
8) ダメもとで、 Activation Codeのリンクをクリック。&lt;br /&gt;
ログインページが表示されたので、iPhone Developer Program登録している英語アカウントで&lt;br /&gt;
ログインすると、Activation Codeの入力画面が表示。&lt;br /&gt;
でもActivation Codeは入力されておらず。&lt;br /&gt;
&lt;br /&gt;
試しに、メールの Activation Codeを手入力したら。。うまく契約更新できたようです！&lt;br /&gt;
良かった～&lt;br /&gt;
&lt;br /&gt;
英語アカウントで Apple Developer Program登録、&lt;br /&gt;
日本語アカウントで決済、&lt;br /&gt;
で、&quot;Apple Developer Program Activation Code&quot;のメール文字化けしていなければ&lt;br /&gt;
大丈夫なのかな？ &lt;br /&gt;
&lt;br /&gt;
さて、今年こそiPhone App取り組みたいです。。&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2314109511042430507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2314109511042430507'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/05/iphone-developer-program.html' title='iPhone Developer Program 契約更新顛末'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-3645065568652717126</id><published>2010-01-18T09:10:00.000+09:00</published><updated>2010-01-18T09:10:34.515+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>サーバー移転の際、役立つかもしれないコマンドやtips</title><content type='html'>今回、サーバーを移転した際にDNS設定変更が反映されたか確認する際のtips&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;（可能であれば）ルーターを再起動する。&lt;br /&gt;
ADSLや光でブロードバンドルーターを使用している場合、PCが参照するDNSサーバーはルーターのアドレスを指定している（参照している）ケースが多いと思います。&lt;br /&gt;
一定時間待っても反映されない場合は、一度再起動することで更新されるようです。&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;（可能であれば）PCを再起動する。&lt;br /&gt;
もしくは、DNSキャッシュをクリアする(Windows)&lt;br /&gt;
PCもまたDNSをキャッシュしているようです。&lt;br /&gt;
PCを再起動するか、Windowsであれば ipconfig /flushdns でクリアできるようです。&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;DNSレコードの状態を問い合わせる(Mac)&lt;br /&gt;
Mac(およびBINDツールが導入されたLinuxなど）で、 digコマンドを使うことでDNSレコードを問い合わせて反映されているか、まだ不安定状態かの様子を知ることができます。&lt;br /&gt;
&lt;br /&gt;
例）dig example.com CNAME&lt;br /&gt;
とすると、安定していれば同じ値のINレコードを返しますが、不安定状態では問い合わせるたびに新しい値と古い値を返してきます。&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/3645065568652717126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/3645065568652717126'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/tips.html' title='サーバー移転の際、役立つかもしれないコマンドやtips'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-6926453006365224933</id><published>2010-01-18T08:59:00.000+09:00</published><updated>2010-01-18T08:59:15.832+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[VB.NET] SerialPortクラスでUSBシリアルを使った場合</title><content type='html'>自分の備忘録。&lt;br /&gt;
VB2005以降で対応した、SerialPortクラスでUSBシリアルを使った場合において、ポートオープン状態でUSBシリアルI/FのUSBポートを抜いた場合、抜かれた時点でイベントが発生せずに送受信を行った時点やしばらくして例外が発生し、アプリが終了してしまいます。&lt;br /&gt;
この例外は、try-catchで補足できない領域で起きているようで、通常のコーディングでは回避できません。&lt;br /&gt;
&lt;br /&gt;
ネットで調べたところ、&lt;a href=&quot;http://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=367746&quot;&gt;SerialPortクラスを利用してUSB接続する際の不具合について&lt;/a&gt;で報告があがっているものの、現時点では回避は難しそうです。&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6926453006365224933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6926453006365224933'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/vbnet-serialportusb.html' title='[VB.NET] SerialPortクラスでUSBシリアルを使った場合'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-3578824589042617430</id><published>2010-01-18T08:44:00.000+09:00</published><updated>2010-01-18T08:44:02.670+09:00</updated><title type='text'>[VC8] UNICODEでコンパイルする際、TRACE()マクロがエラー</title><content type='html'>Visual Studio 2008で、MFCプロジェクトをUNICODEでコンパイルする際、TRACE()マクロのところでエラーになってしまう場合があります。&lt;br /&gt;
&lt;br /&gt;
アプリの起動エントリ(InitInstance()など)で、&lt;br /&gt;
#include &lt;locale.h&gt;&lt;br /&gt;
をインクルードした上で、&lt;br /&gt;
_tsetlocale(LC_ALL, _T(&quot;&quot;));&lt;br /&gt;
を追記することで回避できるようです。&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/3578824589042617430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/3578824589042617430'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/vc8-unicodetrace.html' title='[VC8] UNICODEでコンパイルする際、TRACE()マクロがエラー'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-576218791698684757</id><published>2010-01-18T08:35:00.000+09:00</published><updated>2010-01-18T08:35:24.087+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[VB.NET]リモートオブジェクトでインタフェースと実装の分離手法の一案</title><content type='html'>サーバー/クライアント間通信を実装するのはいつも面倒です。&lt;br /&gt;
前に作ったコードをベースに新たにサーバーを起こしてみたり。&lt;br /&gt;
  &lt;br /&gt;
.NETになって「.NETリモート処理」なるものが実装されました。&lt;br /&gt;
結構お手軽なのですが、ここで問題になるのが「クライアントにもリモート処理可能オブジェクト(DLL)」が必要なこと。&lt;br /&gt;
  &lt;br /&gt;
これは、コンパイル時に型を参照する為ばかりでなく、実行時にも必要です。&lt;br /&gt;
せっかくサーバ側とクライアント側を分離したはずなのに、リモート処理可能オブジェクトと共にサーバ側だけでしか必要の無いDLL等が必要なことを意味します。&lt;br /&gt;
また、クライアント側に実装の詳細が見えてしまいかねません。 &lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
これの解決策は、MSDNのNET Framework開発者ガイドに記載がありますが、&lt;br /&gt;
「別のライブラリでインターフェイスを宣言し、そのライブラリをクライアントと共に配置する方法。」&lt;br /&gt;
です。&lt;br /&gt;
でも、こんな方法もあるということで。&lt;br /&gt;
(一応、VB.NET 2003～2008まで使えています)&lt;br /&gt;
&lt;br /&gt;
１）サーバーソリューションを作り、クラスライブラリのプロジェクトを作ります。&lt;br /&gt;
クラスライブラリプロジェクト内に下記のようにインタフェースだけを定義したクラスを作ります。&lt;br /&gt;
コンパイルすると、インタフェースクラスライブラリのDLLが出来上がります。 &lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
Public MustInherit Class ServerObject
    Inherits MarshalByRefObject

    Public MustOverride Function Func1(ByVal param) as Integer
End Class
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;２）サーバソリューション内にそのライブラリを参照したサーバープロジェクトを作ります。&lt;br /&gt;
サーバープロジェクト内に、インタフェースから派生したクラスとオブジェクトを登録するモジュールを作ります。 &lt;br /&gt;
これらは同一実行モジュール内におくことが出来ます。 &lt;br /&gt;
ポイントは、&lt;code&gt;RemotingConfiguration.RegisterWellKnownServiceType()&lt;/code&gt;で登録するオブジェクトは、インタフェースクラスでなく、派生クラスの物を登録することです。&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
Imports System
Imports System.Threading
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Http

Public Class Server
    Inherits ServerObject

    Public Overrides Function Func1(ByVal param) as Integer
        Return param * 10    &#39; とリあえず簡単なもの^^;
    End Function
End Class


Module mdlMain

    Sub Main()
        Dim channel As HttpChannel = New HttpChannel(30000)
        ChannelServices.RegisterChannel(channel)

        &#39; サービスタイプを登録
        RemotingConfiguration.RegisterWellKnownServiceType(GetType(Server), _
            &quot;Server&quot;, WellKnownObjectMode.SingleCall)

        &#39; ウィンドウが閉じられるまで待機
        Dim sync As Object = New Object
        SyncLock sync
            Monitor.Wait(sync)
        End SyncLock
    End Sub
End Module
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt; ３）クライアントは、別のソリューションを作ります。&lt;br /&gt;
  先にサーバーで作成したインタフェースを定義したライブラリプロジェクトを追加し、(既存のプロジェクトの追加)&lt;br /&gt;
  新たにクライアント本体のプロジェクトを作ります。&lt;br /&gt;
  そして、以下のようにクライアントプロジェクトを記述します。&lt;br /&gt;
  ポイントは、&lt;code&gt;Activator.GetObject()&lt;/code&gt;でインタフェースのオブジェクトを取得するように記述することです。&lt;br /&gt;
&lt;blockquote&gt;  &lt;pre&gt;&lt;code&gt;
Module mdlMain

    Sub Main()
        &#39; HTTPチャンネルを登録
        Dim chan as New HttpChannel

        ChannelServices.RegisterChannel(chan)

        &#39; GetTypeの引数 = &quot;インタフェースDLLの名前空間.クラス名, インタフェースDLLのアセンブリ名&quot; ← 混乱しやすいので注意!!!
        Dim obj as Object = Activator.GetObject(Type.GetType(&quot;SvrObj.ServerObject, SvrObj&quot;), _
            &quot;http://localhost:30000/Server&quot;)

        If Not (obj Is Nothing) Then
            Dim svr As ServerObject = CType(obj, ServerObject)
            Dim i as integer

            i = svr.Func1(10)
            Console.WriteLine(&amp;quot;Server answer = &amp;quot; + i.ToString())
        Else
            Console.WriteLine(&quot;Object nothing.&quot;)
        End If
    End Sub
End Module
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;これで、クライアント側には、クライアントモジュールEXEとインタフェースDLLのみ配置すれば実行することができます。&lt;br /&gt;
欠点は、全てのインタフェースAPIを&lt;code&gt;MustOverride&lt;/code&gt;で定義しなければいけないことでしょうか。&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/576218791698684757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/576218791698684757'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/vbnet.html' title='[VB.NET]リモートオブジェクトでインタフェースと実装の分離手法の一案'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-7804324423011735790</id><published>2010-01-18T08:26:00.000+09:00</published><updated>2010-01-18T08:26:50.489+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[C++]キャスト</title><content type='html'>これは、自分の備忘録^^&lt;br /&gt;
C/C++でプログラミングしているとキャストは避けられない物の一つです。&lt;br /&gt;
なるべく使わないほうがいいのですが、警告レベルを最大に上げてコンパイルしている場合どうしても発生してしまいます。&lt;br /&gt;
(無視するのはもっと気持ち悪い)&lt;br /&gt;
その場合はキャストすることになるのですが、最新版のC++ですと従来の(char)形式からstatic_cast&lt;char&gt;()やreinterpret_cast&lt;char&gt;()形式が採用されています。&lt;br /&gt;
無論従来形式も使えるのですが、従来形式だとあとでエディタで検索かけるときに、単なる変数や引数宣言と区別が付きにくいという欠点があります。&lt;br /&gt;
けど、新しい形式では&#39;_cast&#39;で検索すればOK!&lt;br /&gt;
古くからC++使っている人なんかだと、意外と知らないケースも多いのでは?&lt;br /&gt;
たまには最新版の文献も読みましょう...(と自己反省^^;)&lt;br /&gt;
&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/7804324423011735790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/7804324423011735790'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/c.html' title='[C++]キャスト'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-2843290895296215014</id><published>2010-01-18T08:23:00.000+09:00</published><updated>2010-01-18T08:23:27.589+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]タスクバーを隠す</title><content type='html'>一般的なことではありませんが、Windowsの画面下(普通)にあるタスクバーを強制的に隠してしまう方法です。ついでに出す方法も。&lt;br /&gt;
タスクバーのウィンドウハンドルをどうやって取得するかが勘所。&lt;br /&gt;
これの応用で、いろんなことが出来そうです...&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
void HideTaskBar(void)
{
    const char *pszTaskBar=&amp;quot;Shell_TrayWnd&amp;quot;;
    ::ShowWindow(::FindWindow(pszTaskBar , NULL),SW_HIDE);
}

void ShowTaskBar(void)
{
    const char *pszTaskBar=&amp;quot;Shell_TrayWnd&amp;quot;;
    ::ShowWindow(::FindWindow(pszTaskBar , NULL),SW_SHOW);
}&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2843290895296215014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2843290895296215014'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/win_18.html' title='[WIN]タスクバーを隠す'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-1076363932766553352</id><published>2010-01-18T08:18:00.000+09:00</published><updated>2010-01-18T08:18:41.517+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]NT系OSでシャットダウンする</title><content type='html'>これも、定石の一種かもしれませんが...&lt;br /&gt;
制御系など、専用システムではOSの振る舞いを極力見せないのが肝要です。&lt;br /&gt;
起動は、スタートアップでアプリをダイレクトに起動するのでいいんだけど、終了が問題。&lt;br /&gt;
では、単純にExitWindowsEx()を使用してもシャットダウン出来ません。&lt;br /&gt;
ヘルプに書かれているように「シャットダウン特権」が必要なのです。&lt;br /&gt;
では、その特権をどうやったら得られるか...&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
それが、下記のコードです。下記コードを少し修正してDLL化してしまえば、VBからでも簡単にシャットダウンできるようになります。&lt;br /&gt;
(NT系(NT4.0、2000、XP)では確認済。Vistaや7は試したこと無いけど、UAE回避の手法が必要か?)&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
BOOL ShutDown(BOOL bReboot, UINT nShutdownTime)
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    BOOL fResult;

    // プロセストークンの取得
    if (!OpenProcessToken(GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;amp;hToken)) 
        return FALSE;
        
    // シャットダウン特権の取得
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &amp;amp;tkp.Privileges[0].Luid); 
 
    tkp.PrivilegeCount = 1;     // one privilege to set    
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
 
    // このプロセスに対するシャットダウン特権を有効化する
    AdjustTokenPrivileges(hToken, FALSE, &amp;amp;tkp, 0, 
        (PTOKEN_PRIVILEGES) NULL, 0); 

    if (GetLastError() != ERROR_SUCCESS) 
        return FALSE;
 
    // シャットダウンを実行する
    fResult = InitiateSystemShutdown( 
        NULL,
        NULL,
        nShutdownTime,
        FALSE,
        bReboot);

    if (!fResult) 
        return FALSE;
    
    // シャットダウン特権を無効化する
    tkp.Privileges[0].Attributes = 0; 
    AdjustTokenPrivileges(hToken, FALSE, &amp;amp;tkp, 0, 
        (PTOKEN_PRIVILEGES) NULL, 0); 

    if (GetLastError() != ERROR_SUCCESS) 
        return FALSE;

    return TRUE;
}&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/1076363932766553352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/1076363932766553352'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/winntos.html' title='[WIN]NT系OSでシャットダウンする'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-458590016645530756</id><published>2010-01-18T08:13:00.000+09:00</published><updated>2010-01-18T08:13:43.838+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]Visual C++ MFCでワーカースレッド関数をクラスメンバにする</title><content type='html'>スレッドを使用する場合、スレッド化する関数は静的に宣言されている必要があります。&lt;br /&gt;
しかし、諸般の事情で動的に生成したり、スレッド内でクラスメンバーにアクセスしたい場合の手法の一つです。もっと楽な方法もあるかもしれませんが...&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
１）クラスヘッダで、スレッド化する関数をstatic宣言し、実際のスレッドプロセスをpublicで宣言する。&lt;br /&gt;
publicメンバーとして、&lt;code&gt;static UINT ThreadProcStub(LPVOID pParam);&lt;/code&gt;とする。&lt;br /&gt;
また、publicメンバーとして&lt;code&gt;UINT ThreadProc();&lt;/code&gt;と宣言。&lt;br /&gt;
&lt;br /&gt;
２）AfxBeginThread()でスレッド起動するときに、自分自身(this)を引数で渡す。&lt;br /&gt;
&lt;code&gt;AfxBeginThread(ThreadProcStub, (LPVOID)this, nPriority);&lt;/code&gt;とする。&lt;br /&gt;
&lt;br /&gt;
３）スタブスレッドで渡された引数をキャストし、実際のスレッド関数を呼び出す。&lt;br /&gt;
たとえば、次のように記述します。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
UINT CThreadProc::ThreadProcStub(LPVOID pParam)
{
    CThreadProc* pProc = (CThreadProc*)pParam;

    if (pProc == NULL)
        return 0;

    return pProc -&amp;gt;ThreadProc();
}
&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/458590016645530756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/458590016645530756'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/winvisual-c-mfc_18.html' title='[WIN]Visual C++ MFCでワーカースレッド関数をクラスメンバにする'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-1302853057687038505</id><published>2010-01-18T08:10:00.000+09:00</published><updated>2010-01-18T08:10:01.449+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]Visual C++ MFCで多重起動を防ぐ</title><content type='html'>定番の処理ですが、備忘録として...&lt;br /&gt;
手法としてはミューテックスを使用し、派生したアプリケーションクラスのコンストラクタでミューテックスを定義、デストラクタで開放、InitInstance()内でロックされているかをチェックします。&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
// アプリケーションクラスヘッダのメンバ定義
    CMutex* m_mutexMultiExec; // 多重起動防止用ミューテックス
    CSingleLock* m_lockMultiExec;

//コンストラクタ
CMyApp::CMyApp()
{
    // 多重起動を防ぐ為のミューテックスの定義
    m_mutexMultiExec = new CMutex(FALSE, &amp;quot;MyAppMutex&amp;quot;);
    m_lockMultiExec = new CSingleLock(m_mutexMultiExec);
}

// デストラクタ
CMyApp::~CMyApp()
{
    // 多重起動防止ミューテックスの解放
    if(m_lockMultiExec -&amp;gt; IsLocked())
        m_lockMultiExec -&amp;gt; Unlock();
    
    delete m_lockMultiExec;
    delete m_mutexMultiExec;
}

//　インスタンスの初期化処理
BOOL CMyApp::InitInstance()
{
    // すでに別のインスタンスが起動している場合には終了する&lt;br&gt;
    if(!m_lockMultiExec -&amp;gt; Lock(IGNORE))
        return FALSE;

    // ...そのほかの初期化処理
}
&lt;/code&gt;&lt;/pre&gt;&lt;hr /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/1302853057687038505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/1302853057687038505'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/winvisual-c-mfc.html' title='[WIN]Visual C++ MFCで多重起動を防ぐ'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-6909312500178105100</id><published>2010-01-18T08:00:00.001+09:00</published><updated>2010-01-18T08:01:07.736+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]イベントビューアのログにメッセージを出す。</title><content type='html'>イベントビューアにログを吐き出すだけなら、ReportEvent()を使えば出来るのですが、ただ何もせずにReportEvent()でメッセージを吐き出すと、イベントビューア上では下記のように言われてしまいます。&lt;br /&gt;
&lt;br /&gt;
「イベント ID (0) (ソース ***内) に関する説明が見つかりませんでした。&lt;br /&gt;
リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。」&lt;br /&gt;
&lt;br /&gt;
イベントビューアにMS製のやつみたいにちゃんとしたメッセージを出すには、次のような手順が必要です。&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
１）メッセージリソースを作る。&lt;br /&gt;
イベントログのメッセージは、イベントログがメッセージの実体を持っているわけではなく、レジストリが示しているリソース(EXE, DLL)から取得します。&lt;br /&gt;
その、メッセージリソースをまず作ります。&lt;br /&gt;
下記のような内容を、message.mc等のファイル名で保存し、コンパイルします。&lt;br /&gt;
コンパイルは、mc message.mc 等のように入力して行い、その結果 MSG00411.binとmessage.rc、message.hが生成されます。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
    MessageIdTypedef=DWORD
    LanguageNames=(Japanese=0x411:MSG00411)

    MessageId=0x1
    SymbolicName=MSG_ERR_LOGFILEERR
    Language=Japanese
    ログファイルへの書き込み操作中にエラーが発生しました。
    .

    MessageId=0x2
    SymbolicName=MSG_ERR_LOGFILEOPENERR
    Language=Japanese
    ログファイルが開けません。
    .
&lt;/code&gt;
&lt;/pre&gt;２）メッセージリソースをリソースファイルに取り込む。&lt;br /&gt;
先に出来た、message.rcをアプリケーションのリソースファイルにインクルードします。&lt;br /&gt;
MFCベースなら、*.rc2に#include &quot;message.rc&quot;とするのが、よいでしょう。&lt;br /&gt;
&lt;br /&gt;
３）プログラムを書く&lt;br /&gt;
下記のような、プログラムを作ります。ここで、InitEventLog()はアプリケーション起動時に1回だけ呼び出し、レジストリに登録します。&lt;br /&gt;
ReportEventLog()でイベントログを記録します。その際、dwIDEventにmessage.hにあるメッセージIDを指定することにより、イベントビューアで見たときにメッセージリソースのメッセージが表示されるようになります。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
void InitEventLog()
{
    HKEY hk; 

    // レジストリキーの生成
    // MyApplicationNameは自分のアプリ名にすること（ReportEventLog()と同じアプリ名)
    RegCreateKey(HKEY_LOCAL_MACHINE,
        (LPCTSTR)&quot;SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\MyApplicationName&quot;,
        &amp;hk);

    // メッセージリソースを入れたアプリのパスを取得(普通、自分自身)
    char szPath[_MAX_PATH];
    GetModuleFileName(AfxGetInstanceHandle(), szPath, _MAX_PATH);

    // イベントIDメッセージファイルをサブキーに登録する
    RegSetValueEx(hk, &quot;EventMessageFile&quot;, 0, REG_EXPAND_SZ, 
        (LPBYTE)szPath,           // ここにメッセージリソースを入れたアプリのパスを登録
        strlen(szPath) + 1);
 
    // イベントログのサポートタイプを登録
    DWORD dwData; 
    dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | 
             EVENTLOG_INFORMATION_TYPE; 
 
    RegSetValueEx(hk, &quot;TypesSupported&quot;, 0, REG_DWORD,
        (LPBYTE) &amp;dwData, sizeof(DWORD));
 
    RegCloseKey(hk); 
}

void ReportEventLog(WORD nType, WORD nCategory, DWORD dwIDEvent, LPVOID lpData, DWORD dwLen)
{
    HANDLE h = RegisterEventSource(NULL, AfxGetAppName());

    if (h != NULL)
    {
        ReportEvent(h, nType, nCategory, dwIDEvent, NULL, 0, dwLen, NULL, lpData);
        DeregisterEventSource(h); 
    }
}
&lt;/code&gt;
&lt;/pre&gt;&lt;hr /&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6909312500178105100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6909312500178105100'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/win.html' title='[WIN]イベントビューアのログにメッセージを出す。'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-134386569058922494</id><published>2010-01-18T07:42:00.001+09:00</published><updated>2010-01-18T09:29:13.906+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="お知らせ"/><title type='text'>サーバー移転のお知らせ</title><content type='html'>2010/1/7より、メール&amp;amp;Webのホスティングサービスを引っ越ししました。&lt;br /&gt;
DNS設定の関係上、メールの遅延などが発生する可能性があります。&lt;br /&gt;
お取引先の方でお急ぎの方は、電話などでご連絡いただけると幸いです。</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/134386569058922494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/134386569058922494'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/blog-post.html' title='サーバー移転のお知らせ'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-2405188971055598342</id><published>2010-01-18T07:27:00.003+09:00</published><updated>2010-01-18T07:55:56.059+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming tips"/><title type='text'>[WIN]定期的に起動するスレッド-CreateWaitableTimer()</title><content type='html'>マルチスレッドプログラミングで、定期的に何か処理をしたいというケースがあります。&lt;br /&gt;&lt;br /&gt;他にすること無ければSleep()で寝ていればいいんですが、一定時間内に通信が無かったら何か処理をする(状態問い合わせ)といった処理を実装する場合、Sleep()では困ってしまいます。&lt;br /&gt;&lt;br /&gt;こういった場合、CreateWaitableTimer()でタイマイベントを生成し、SetWaitableTimer()で時間設定をした上で、WaitForMultipleObjects()で他のイベントと待つことが出来ます。&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;※(2002.9.25追記)とはいっても、Windowsですから、正確にms単位の時間待ちは出来ないものと思ったほうが正解です。&lt;br /&gt;&lt;br /&gt;マウスを動かしたり、ディスクアクセスが入るだけで、0.1sec単位で平気でずれます。&lt;br /&gt;&lt;code&gt;&lt;br /&gt; hTimerEventHandle = CreateWaitableTimer(NULL, FALSE, NULL);&lt;br /&gt;&lt;br /&gt; LARGE_INTEGER  largeTime;&lt;br /&gt; largeTime.LowPart = 0;&lt;br /&gt; largeTime.HighPart = 0;&lt;br /&gt; SetWaitableTimer(hTimerEventHandle, &amp;amp;largeTime, nInterval, NULL, NULL, FALSE);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;【注意事項】ここに掲載されている内容について引用流用は自由ですが、内容やサンプルに基づくいかなる結果に関して一切の責任を負いません。自己の責任の上でご活用ください。&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2405188971055598342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2405188971055598342'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2010/01/win-createwaitabletimer.html' title='[WIN]定期的に起動するスレッド-CreateWaitableTimer()'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-6577533592085305986</id><published>2009-07-04T21:17:00.006+09:00</published><updated>2009-07-05T10:19:14.603+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="arduino"/><title type='text'>ubuntu 9.04でarduino-0016を動かしたときに、メニューがつぶれて見えない</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;DELL Mini9上で動かしているubuntu 9.04で、arduino-0016を動かそうとすると、&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;なぜかこんな感じにメニューがつぶれて見えない事象が発生。&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDVm3SWsZxsDgoWLbhf641WkbcZouQ7wxMbJZ-APFqfs8m1mKRKpDFWNGJWPfiKGvlvhqo-bZcuyFvL7bIjUl0UCABTChWWJHRC1h0N7-zP_KJOQOkHRoGbNtnH9reWjJacZVOPn_Stwe0/s1600-h/Screenshot-Arduino+-+0016.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 292px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDVm3SWsZxsDgoWLbhf641WkbcZouQ7wxMbJZ-APFqfs8m1mKRKpDFWNGJWPfiKGvlvhqo-bZcuyFvL7bIjUl0UCABTChWWJHRC1h0N7-zP_KJOQOkHRoGbNtnH9reWjJacZVOPn_Stwe0/s320/Screenshot-Arduino+-+0016.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354580946676828546&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ネット見ても解決策見つからなかったのですが、リリースノートに下記のようにあり&lt;br /&gt;look-and-feelを指定できるようになったようです。&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;Moving selection of Linux look-and-feel into the arduino script so it can&lt;br /&gt;be changed by users.&lt;br /&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;/div&gt;arduinoの起動スクリプトをエディタで開いてみると、&lt;br /&gt;&lt;blockquote&gt;java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel processing.app.Base&lt;br /&gt;&lt;/blockquote&gt;確かにGTKLookAndFeelを指定している様子。&lt;br /&gt;試しに、下記のように指定を止めてみると、とりあえずメニューがちゃんと選べるようになりました。&lt;br /&gt;&lt;blockquote&gt;#java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel processing.app.Base&lt;br /&gt;java processing.app.Base&lt;br /&gt;&lt;/blockquote&gt;こんな感じ。&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5fFYMTV_5_CZUgu2AqmlAqaQ0bH5ZKt2YorZyLc3Wr80RJ6AGCiwIRYQfIPjXYJ6C_6Oovo_TG0ElX8-kKjpNHaJ9Edv6OV7waUHYsEOl1_iqELpPGtUXzYA-gjo9ql3Oip4rCKWRU8Nd/s1600-h/Screenshot-Arduino+-+0016-1.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 314px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5fFYMTV_5_CZUgu2AqmlAqaQ0bH5ZKt2YorZyLc3Wr80RJ6AGCiwIRYQfIPjXYJ6C_6Oovo_TG0ElX8-kKjpNHaJ9Edv6OV7waUHYsEOl1_iqELpPGtUXzYA-gjo9ql3Oip4rCKWRU8Nd/s320/Screenshot-Arduino+-+0016-1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354582750976855458&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とりあえず、これで回避してみようと思っています。</content><link rel='replies' type='application/atom+xml' href='http://trifield.blogspot.com/feeds/6577533592085305986/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5400483695352400154/6577533592085305986' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6577533592085305986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/6577533592085305986'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2009/07/ubuntu-904arduino-0016.html' title='ubuntu 9.04でarduino-0016を動かしたときに、メニューがつぶれて見えない'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDVm3SWsZxsDgoWLbhf641WkbcZouQ7wxMbJZ-APFqfs8m1mKRKpDFWNGJWPfiKGvlvhqo-bZcuyFvL7bIjUl0UCABTChWWJHRC1h0N7-zP_KJOQOkHRoGbNtnH9reWjJacZVOPn_Stwe0/s72-c/Screenshot-Arduino+-+0016.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5400483695352400154.post-2774790299957138922</id><published>2008-01-17T12:01:00.001+09:00</published><updated>2009-07-05T10:18:11.682+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="お知らせ"/><title type='text'>ブログ移行しました。</title><content type='html'>先日あった、ホスティングサービスの長時間ダウン。&lt;br /&gt;結局6時間くらいかかりました。&lt;br /&gt;&lt;br /&gt;今日、ホスティング会社からお詫びと経緯説明の文書が郵便で届きました。&lt;br /&gt;メールでもいいと思うけど、さすがなのか？？&lt;br /&gt;冗長構成になっていても、うまくいかないことがあるものです。難しい。&lt;br /&gt;&lt;br /&gt;で、今回のように長時間ダウンの場合単一サイトに全てホスティングしていると&lt;br /&gt;音信不通になって困るので、殆ど稼働していない(?)本ブログを別サイトに移行することにしました。&lt;br /&gt;(これを機に、更新頻度あげられればいいのですが(苦笑))&lt;br /&gt;&lt;br /&gt;今後とも何卒よろしくお願いします。</content><link rel='replies' type='application/atom+xml' href='http://trifield.blogspot.com/feeds/2774790299957138922/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5400483695352400154/2774790299957138922' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2774790299957138922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5400483695352400154/posts/default/2774790299957138922'/><link rel='alternate' type='text/html' href='http://trifield.blogspot.com/2008/01/blog-post.html' title='ブログ移行しました。'/><author><name>トライフィールド</name><uri>http://www.blogger.com/profile/16916056808355504602</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>