<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>親鶏と酒とエンジニアリングと私</title>
<link>https://ameblo.jp/utams/</link>
<atom:link href="https://rssblog.ameba.jp/utams/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>自分的に苦労したり新しいと思ったりGoogle先生が答えてくれない技術系の悩みについての解決策を模索していくブログです。</description>
<language>ja</language>
<item>
<title>[PostgreSQL] text型のNULL検索</title>
<description>
<![CDATA[ PostgreSQLでtext型の列に画像などのバイナリデータを入れておくケースはあると思います。<br><br>その場合にその列にデータが入っていないものだけを抽出したいという場合、<br><br>TABLE1のVALUEという列が対象の列だとすると、普通は<br><br><hr><br>SELECT ID FROM TABLE1 WHERE VALUE IS NULL OR VALUE = '';<br>SELECT ID FROM TABLE1 WHERE NOT VALUE IS NULL OR VALUE &lt;&gt; '';<br><br><hr><br><br>というような書き方をすると思います。<br><br>しかし残念ながらPostgreSQLにてtext型のカラムに対して<br><br>「IS NULL」<br>「= ''」<br>「&lt;&gt; ''」<br><br>といった記述をすると、インデックスが効かないのか、中身をすべて精査するのか、、、<br>理由は判りませんが、とにかく非常に検索が遅くなってしまうのです。<br>※件数が少ない場合は問題ないかもしれませんが、多くなると本当に遅い！！<br><br>これを回避するにはこのように書いてあげれば良いです。<br><br><hr><br>SELECT ID FROM TABLE1 WHERE&nbsp;BIT_LENGTH(VALUE) = 0;<br>SELECT ID FROM TABLE1 WHERE&nbsp;BIT_LENGTH(VALUE) &lt;&gt; 0;<br><br><hr><br><br>「BIT_LENGTH」関数を使ってあげると、NULLでも空文字列でも「0」を返してくれます。<br><br>こうすると、数万件が対象でも一瞬で結果が返ってくるようになります。<br>text型への登録有無の検索で悩んでいる方は是非ともお試しあれ。<br><br><br><br>※本記事は PostgreSQL 8.4 で検証しています。
]]>
</description>
<link>https://ameblo.jp/utams/entry-11378476699.html</link>
<pubDate>Sat, 13 Oct 2012 13:43:31 +0900</pubDate>
</item>
<item>
<title>[リモートデスクトップ]マルチモニター環境でサブモニター側に綺麗に最大化する</title>
<description>
<![CDATA[ 外部モニターをサブモニターとして接続（画面拡張）している環境でリモートデスクトップ接続をしたい場合のお話です。<br><br><hr>メインモニター ： 通常のデスクトップ画面<br>サブモニター ： リモートデスクトップウィンドウを最大化したデスクトップ画面<br><hr><br><br>といったように、モニター毎に異なるデスクトップの表示を行いたいといったケースはあると思います。<br><br><br>しかしながら、<i>"リモートデスクトップ接続の設定画面から設定した場合"</i>には、<br><br><b>「リモートデスクトップでのモニター解像度はメインモニターの解像度によって決定される」</b><br><br>といった悲しい仕様になっています。<br><br><br>よって、メインモニターとサブモニターで解像度が異なる場合、<br>サブモニター側でリモートデスクトップウィンドウ最大化すると<br><br>・上下にスクロールが発生してしまう<br>・上下に余白ができてしまう<br><br>といったように、綺麗に最大化されてくれません。<br><br><br><span style="font-size: 10px; "></span><span style="font-size: 10px; ">＃このエントリを"探し当てた結果"読んでおられる方々には上記症状をよく理解していただけるかと思います。&nbsp;<br>＃ちなみに、そもそもサブモニター側で最大化がうまくできないという方は<br>＃<b>リモートデスクトップウィンドウをサブモニターに持って行って「Ctrl+Alt+Break」<br></b>＃で最大化自体はされると思います。</span><br><br><br>この解決方法があまりに掲載されていないので、ここで記載したいと思います。<br><span style="font-size: 10px; ">＃漁れば見つかることには見つかるのですが、直感的な書き方ではなかったので。&nbsp;&nbsp;<br></span><br><br><br><span style="font-size: 16px; "><b>- 手順 -</b><br></span><br><b>まず、リモートデスクトップ接続の設定画面からごく普通にrdpファイルを作ります。</b><br>接続先やローカルリソースなど、とりあえず接続したい情報でしっかりと設定を行うようにしてください。<br><br><br><b>次に、出来上がったrdpファイルをメモ帳やエディタで開きます。<br>ここからが重要です。</b><br><br>ファイルの中から<br><br><b>　screen mode id:i</b><br><br>という記述を探してその値を「<b>2</b>」に変更します。<br><span style="font-size: 8px; ">※これは画面を最大化するのか、ウィンドウ表示するのかを示すプロパティです。2は最大化を表します。<br></span><br>結果的には<br><b><br>　screen mode id:i:2<br><br></b>となります。<br><br>同様にして<br><br><b>　desktopwidth:i<br>　desktopheight:i</b><br><br>という記述を探します。<br><span style="font-size: 8px;">※これはリモートデスクトップでのモニター解像度を表します。</span><br><span style="font-size: 8px;">※設定画面ではメインモニター解像度からの選択しかできませんが、実は&nbsp;直接ファイルを開いてやれば好きな値に指定可能なのです。</span><br><span style="font-size: 8px; line-height: 15px; "><br><span style="font-size: 12px; ">例えばサブモニターの解像度が「1024x768」であれば<br><br></span></span><b style="font-size: 12px; line-height: 18px; ">　desktopwidth:i:1024<br>　desktopheight:i:768<br></b><br><span style="line-height: 15px;">という風に設定します。</span><br><br><span style="line-height: 15px;">さらに</span><br><br><span style="line-height: 15px;"><b>　winposstr:s<br></b></span><br>という記述を探します。<br><span><span style="font-size: 8px;">※これはリモートデスクトップウィンドウの初期表示位置と初期表示サイズを表します。</span><br><span style="font-size: 8px;">※前回の情報を記憶する仕組みなのか、設定画面では設定できない情報です。</span><br><span style="font-size: 8px;">※カンマ区切りで左から「0固定,1固定,ウィンドウ左端の位置,ウィンドウ上端の位置,ウィンドウの右端の位置,ウィンドウの下端の位置」です。</span><br><br><span>例えばメインモニターの解像度が「1200x900」、サブモニターの解像度が「1024x768」であれば<br><br><b>　winposstr:s:0,1,1200,0,2224,768</b><br><br>という風に設定します。<br><span><span style="font-size: 8px;">※補足すると、ここではサブモニターの左上からサブモニターの右下にかけてリモートデスクトップウィンドウが展開されるような設定を行っています。</span><br><br><br><b>あとはrdpファイルを上書き保存します。<br><br><br><span style="font-size: 16px; color: rgb(255, 0, 0);">このrpdファイルのダブルクリックで接続を開始してみるとご所望の結果が得られるはずです！！</span></b></span></span></span><br>
]]>
</description>
<link>https://ameblo.jp/utams/entry-11226426976.html</link>
<pubDate>Wed, 18 Apr 2012 12:28:54 +0900</pubDate>
</item>
<item>
<title>[Windows7] Windows Firewall が87エラーで起動しなくなった場合の対応</title>
<description>
<![CDATA[ ある日Windows7のローカルセキュリティポリシーのWindows Firewall に関する項目を触っていると、Windows Firewall が起動しなくなった。<br><br><br>どうせ無効にしていたので起動しないこと自体は別にどうでもいいのだが、なぜかその影響で<span style="color: rgb(0, 0, 0);">LAN内の他PCからの要求を全てシャットアウト</span>するようになってしまった。<br><br><br>とりあえず内部的にどんなエラーが出ているかを調査。<br><br><br>まずは、サービスを開始させたときのエラー。<br><hr><span style="font-style: italic;">ローカルコンピューターでwindows firewallを開始できません。詳細については、システムイベントログを確認してください。これがmicrosoft以外のサービスである場合はサービスの製造元に問い合わせて固有のエラーコード87を参照してください。</span><br><hr><br><br>んー、トンチンカンなエラーメッセージ。<br><br><br>次にイベントビューアからログをあさってみたところ見つけたエラー。<br><hr><span style="font-style: italic;">Windows Firewall サービスは、サービス固有エラー パラメーターが間違っています。 で終了しました。</span><br><hr><span style="font-style: italic;">Windows ファイアウォールで、新しいセキュリティ ポリシーを解析できませんでした。Windows ファイアウォールでは、現在のポリシーが引き続き適用されます。</span><br style="font-style: italic;"><br style="font-style: italic;"><span style="font-style: italic;">エラー コード:    2147942487</span><br><hr><br><br>ふむふむ。推測するに、Windows Firewall の設定はレジストリに保存されていて、その設定が矛盾しているか壊れているかなんだかで起動できていないっぽい。<br><br><br>このエラーメッセージを元にGoogle先生に聞いてみても、現象はあれど解決したものが見つからなかった。<br><br><br>そういえば、ローカルセキュリティポリシーの設定時に固定IPを入力したという事を思い出した。<br><br><br>[Win]+[R] -&gt; regedt32 でレジストリエディタ起動。<br><br><br>入力した固定IPを検索キーにしてローラー検索。<br><br><br><br>おおっ！！<br>予想通り Windows Firewall のレジストリ設定にぶつかった。<br><br><br><br>うちの環境では以下のキーがヒットした（一部伏せ時）。<hr><span style="font-style: italic;">・[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{AAAAAAAAAA}Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall]</span><br style="font-style: italic;"><span style="font-style: italic;">・[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{BBBBBBBBBB}Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall]</span><br style="font-style: italic;"><span style="font-style: italic;">・[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{CCCCCCCCCC}Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall]</span><br style="font-style: italic;"><span style="font-style: italic;">・[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy Objects\{DDDDDDDDDD}Machine\SOFTWARE\Policies\Microsoft\WindowsFirewall]</span><br style="font-style: italic;"><span style="font-style: italic;">・[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsFirewall]</span><hr><br>エクスポートしておいて取込直せば失敗しても大丈夫ってことで、上記のキーをそれぞれエクスポートしてごっそり削除。<br><br><br>サービスから Windows Firewall を起動してみると。。。<br><br><br><br><br>おおおおっ！！<br><br>起動したっ！！<br><br><br>ちゃんとLAN内の他PCからアクセスしてみても接続を拒否られなくなっていた。<br><br><br><font size="3"><span style="font-weight: bold;">解決！！</span></font><br><br><br>どこにも解決の記事がなかったので相当ぶりにブログを更新してみた次第です。<br><br><br><font style="color: rgb(255, 0, 0);" size="1">※レジストリを触るのでお約束として一応自己責任で。<br>※作業前に削除するキーのエクスポートとシステム復元ポイントの作成は忘れずに。</font><br>
]]>
</description>
<link>https://ameblo.jp/utams/entry-11119618455.html</link>
<pubDate>Wed, 28 Dec 2011 17:14:02 +0900</pubDate>
</item>
<item>
<title>JavaScript で関数のオーバーライド</title>
<description>
<![CDATA[ これは以前から書きたかったエントリで、ようやくブログを書く時間ができたので書きます。<br><br><br>あまり使いどころは無いかもしれないけれど、Javascript の関数をオブジェクト指向的にオーバーライドするという話です。<br>Google先生に聞いても、本当の意味での上書きばかり出てきてしまって、あまりまともな回答が得られなかったので自分で方法を考えてみました。<br><br><br>例えば、<br><hr>function MainProcess() {<br>&nbsp;&nbsp;&nbsp;    alert('Main Process');<br>}<hr>という関数があったとして、<br><br><br>前処理として「alert('Before Process');」<br><br>後処理として「alert('After Process');」<br><br><br>という処理を挟んで、MainProcess() を呼び出すことで、前処理と後処理も実行されるというようなケース。<br><br><br>HTMLのどこかにこう書くことで実現できます。(理想はonload処理かな？)<hr>var str = MainProcess.toString();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;                                // ①元の関数を文字列として取得する<br>str = str.substr(str.indexOf('{') + 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; // ②関数の内部処理だけを摘出<br>str = str.substr(0, str.lastIndexOf('}')); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;                           // 　そうしないと⑤で関数が実行されてしまう<br>MainProcess = function() { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;                                     // ③元の関数の上書き<br>&nbsp;&nbsp;&nbsp; alert('Before Process');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;                                         // ④前処理を記述する<br>&nbsp;&nbsp;&nbsp; eval('function dummyFunc(){' + str + '};dummyFunc();');  // ⑤元の関数のコードを取込<br>&nbsp;&nbsp;&nbsp; alert('After Process');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                           // ⑥後処理を記述する<br>};<hr><br>もう少しスマートなやり方があれば教えてください。<br>
]]>
</description>
<link>https://ameblo.jp/utams/entry-11119617293.html</link>
<pubDate>Wed, 28 Dec 2011 17:10:57 +0900</pubDate>
</item>
</channel>
</rss>
