<?xml version="1.0" encoding="EUC-JP"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>平原眺望</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/" />
    <link rel="self" type="application/atom+xml" href="http://blog.tokachi-lab.com/atom.xml" />
    <id>tag:blog.tokachi-lab.com,2009-06-11://1</id>
    <updated>2011-05-15T22:31:06Z</updated>
    <subtitle>十勝ラボの旧日記および旧雑感。現在はWordPress版に移転してます。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.25</generator>

<entry>
    <title>引っ越しました</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2010/08/post_25.html" />
    <id>tag:blog.tokachi-lab.com,2010://1.141</id>

    <published>2010-08-31T07:15:26Z</published>
    <updated>2011-05-15T22:31:06Z</updated>

    <summary>引っ越しました。 と、言ってもご近所ですが。 もちろんネットの上での話です。 し...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="システム備忘録" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>引っ越しました。<br />
と、言ってもご近所ですが。<br />
もちろんネットの上での話です。</p>

<p>しばらくアクセス出来ない状態がつづいていましたが、ようやく復旧しました。</p>

<p>DBMSのバージョンアップでバックアップしといたデータをリストアする際に文字コードがぐちゃぐちゃで直すのがめんどくさくなり放ったらかしにしてました。</p>

<p>で、どうにか復旧させましたが、MTに飽きたのでWPに浮気します。<br />
このURLごと変えちまおうと考えたのですが、やっぱり残してWPのURLを</p>

<p><a href="http://tokachi-lab.com">http://tokachi-lab.com</a></p>

<p>ということにしました。<br />
今後の更新はWPだけです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Counterize II に Win7 と Chrome を追加してみるメモ</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2010/06/counterize_ii_win7_chrome.html" />
    <id>tag:blog.tokachi-lab.com,2010://1.140</id>

    <published>2010-06-13T00:52:22Z</published>
    <updated>2010-06-13T01:35:01Z</updated>

    <summary>WordPless に Counterize II を導入してみたけれど、Win...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[WordPless に Counterize II を導入してみたけれど、Windows 7 がカウントされていない。
またGoogle ChromeもMac上のSafariとしてカウントされている。<br>
と、いう事に気づいたのでソースを修正してみた。<br>
表示を期待通りにするためには、ソースの修正のほかにもデータベースのテーブル｀<strong>wp_Counterize_UserAgents</strong>｀ にすでに記録されているレコードの修正も必要。
Windows ７のレコードは`<strong>name</strong>`に'NT 6.1'が含まれるレコードを探して`<strong>osVersion</strong>`を'7'に書き換える。<br>
Clomeの方は`<strong>name</strong>` に 'Chrome' の含まれるレコードを探して、`<strong>browserName</strong>` 、`<strong>browserCode</strong>`、`<strong>browserVersion</strong>`、`<strong>osName</strong>`、`<strong>osCode</strong>`、`<strong>osVersion</strong>`をそれぞれ書き換えること。<br>
<br>
ちなみにうちで見つけた Chrome のUAはこうなってました。<br>
<span style="color:red">Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4</span><br>
<hr style="margin:1em 0.5em;background-color: #00AAFF;">
以下ソースの変更点（追加のみ）<br>
<pre>
ファイル名: browsniff.php

関数: function counterize_detect_browser ($ua)
位置: 170 行目辺り

        } elseif (preg_match('#(Firefox|Phoenix|Firebird)/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
                $browser_name = 'Mozilla Firefox';
                $browser_code = 'firefox';
                $browser_ver = $matches[2];
                if (preg_match('/Windows/i', $ua)) {
                        list($os_name, $os_code, $os_ver) = counterize_windows_detect_os($ua);
                } else {
                        list($os_name, $os_code, $os_ver) = counterize_unix_detect_os($ua);
                }
<div style="color:red;background:azure">// ここから追加
        } elseif (preg_match('#Chrome/([a-zA-Z0-9.]+)#i',
                                $ua, $matches)) {
                $browser_name = 'Google Chrome';
                $browser_code = 'chrome';
                $browser_ver = $matches[2];
                if (preg_match('/Windows/i', $ua)) {
                        list($os_name, $os_code, $os_ver) 
                                = counterize_windows_detect_os($ua);
                } else {
                        list($os_name, $os_code, $os_ver) 
                                = counterize_unix_detect_os($ua);
                }
// ここまで</div>        } elseif (preg_match('#Minimo/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
                $browser_name = 'Minimo';
                $browser_code = 'mozilla';
                $browser_ver = $matches[1];
                if (preg_match('/Windows/i', $ua)) {
                        list($os_name, $os_code, $os_ver) = counterize_windows_detect_os($ua);
                } else {
                        list($os_name, $os_code, $os_ver) = counterize_unix_detect_os($ua);
                }

関数: function counterize_windows_detect_os ($ua)
位置: 505 行目辺り
        } elseif (preg_match('/Windows.98/i', $ua) || preg_match('/Win98/i', $ua)) {
                $os_name = "Windows";
                $os_code = "windows";
                $os_ver = "98";
<div style="color:red;background:azure">// ここから追加
        } elseif (preg_match('/Windows NT 6.1/i', $ua)) { 
                $os_name = "Windows";
                $os_code = "windows";
                $os_ver = "7";
// ここまで</div>        } elseif (preg_match('/Windows NT 6.0/i', $ua)) {
                $os_name = "Windows";
                $os_code = "windows";
                $os_ver = "Vista";

</pre>
<hr style="margin:1em 0.5em;background-color: #00AAFF;">
<a href="http://nukabirakan.com">いろんなブラウザでアクセスしてみて</a>
]]>
        
    </content>
</entry>

<entry>
    <title>十勝ラボの業務</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2010/04/post_24.html" />
    <id>tag:blog.tokachi-lab.com,2010://1.139</id>

    <published>2010-03-31T15:00:01Z</published>
    <updated>2010-04-14T09:39:41Z</updated>

    <summary>十勝ラボでは次のようなお仕事をさせていただいております。 	ホームページの作成・...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="システム備忘録" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>十勝ラボでは次のようなお仕事をさせていただいております。<br />
<ul><br />
	<li>ホームページの作成・運営管理</li><br />
	<li>インターネットを利用した在庫管理システムの開発・運用</li><br />
	<li>各種施設での入場券発行システムの設計・開発</li><br />
	<li>計測機器とPCの接続・データ収集プログラムの開発</li><br />
	<li>WindowsおよびUNIX系サーバーの導入・保守・運用支援</li><br />
	<li>PCおよびLANの運用支援</li><br />
	<li>その他、多様なソフトウェアの開発をお受けいたします。</li><br />
</ul></p>]]>
        <![CDATA[<p>なんでイキナリこんな記事を掲載するかって?</p>

<p>だって、<br />
「Microsoft BizSpark プログラム 更新手続き」で、<br />
『事業概要が記載されたURLをご記載ください。』っていうのだもん。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>WebDAV  設定メモ</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/12/webdab.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.138</id>

    <published>2009-12-03T00:47:34Z</published>
    <updated>2010-09-19T09:59:50Z</updated>

    <summary>サーバーをVine4からFreeBSD7.2に入れ替え。 なんとなく動くようにな...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Linux / FreeBSD" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>サーバーをVine4からFreeBSD7.2に入れ替え。<br>
なんとなく動くようになったけど、Lightning のスケジュールが表示されない。<br>
DAV動かすの忘れてたから当然。<br>
<a href="http://blog.tokachi-lab.com/archives/2006/11/webdav.html">以前の設定</a>見ながら動かそうとするもうまくいかず。<br>
Explorerからフォルダにたどり着けません、といわれたり。<br>
ローカルのファイルをコピーしようとしたら、コピー元が読み取れません。<br>みたいな...。<br>
パスワードをなくしてみたり、認証方式を変えてみたりするもNG。<br>
</p><p>原因はささいな、そしていつもどおりのポカ。<br>
ロック用のディレクトリにapacheのアクセス権を与えてませんでした。<br>
いまはとりあえず動いてます。書き込みでエラーが出たのがちょっと気になるが無視。
</p>
<pre>
[etc/apache22/extra/httpd-dav.conf]

#
# Distributed authoring and versioning (WebDAV)
#
# Required modules: mod_dav, mod_dav_fs, mod_setenvif, mod_alias
#                   mod_auth_digest, mod_authn_file
#

# The following example gives DAV write access to a directory called
# "uploads" under the ServerRoot directory.
#
# The User/Group specified in httpd.conf needs to have write permissions
# on the directory where the DavLockDB is placed and on any directory where
# "Dav On" is specified.

# /usr/local/var/apache ディレクトリを作ること。
# chown / chgrp でwww(ユーザ&グループ)にアクセス権を与えること。
DavLockDB "/usr/local/var/apache/DavLock"

# /usr/local/uploads ディレクトリを作り、
# www(ユーザ&グループ)にアクセス権を与える。
Alias /uploads "/usr/local/uploads"

# /upload ディレクトリの設定
&lt;Directory "/usr/local/uploads"&gt;

    # 説明不要 DAV使用
    Dav On

    # 全て許可
    Order Allow,Deny
    Allow from all

    # 認証方式 Diges, realm(領域)は DAV-upload
    AuthType Digest
    AuthName DAV-upload

    # You can use the htdigest program to create the password database:
    #   htdigest -c "/usr/local/user.passwd" DAV-upload admin
    #   htdigestコマンドでパスワードファイルを作ること。
    AuthUserFile "/usr/local/user.passwd"
    AuthDigestProvider file

    # Allow universal read-access, but writes are restricted
    # to the admin user.
    # 読取アクセス全般を許可, 書込は制限
#    &lt;LimitExcept GET OPTIONS&gt;
#        require user admin
#    &lt;/LimitExcept&gt;
&lt;/Directory>

# 特に制限なし, セキュリティなし
Alias /dav "/home/dav"

&lt;Location /dav&gt;
    Dav On
    Order deny,allow
    Allow from all
&lt;/Location&gt;

#&lt;Directory "/home/dav"&gt;
#    Dav On
#
#    Order Allow,Deny
#    Allow from all
#
#    AuthType Basic
#    AuthName DAV
#    AuthUserFile /user/local/user.passwd
#
#    &lt;LimitExcept GET OPTIONS&gt;
#        require user admin
#    &lt;/LimitExcept&gt;
#&lt;/Directory&gt;

#
# The following directives disable redirects on non-GET requests for
# a directory that does not include the trailing slash.  This fixes a 
# problem with several clients that do not appropriately handle 
# redirects for folders with DAV methods.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>.sob .soc  .sod .soe .sog .soh</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/11/sob_soc_sod_soe_sog_soh.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.137</id>

    <published>2009-11-15T05:38:51Z</published>
    <updated>2009-11-15T06:18:19Z</updated>

    <summary>C:/Users/(user-id)/AppData/Roaming/OpenO...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="OpenOffice.org" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[C:/Users/(user-id)/AppData/Roaming/OpenOffice.org/3/user/config/ にある *.so? なファイルのメモ<br>
<br>
<table frame=box rules=all border=1>
<tr><th> 拡張子<th> 要素 <th> 備考

<tr><td> .sob <td> <ooo:bitmap-table <td><dl><dt> ビットマップ。zip アーカイブになってる。<dd>standard.sob</dl>

<tr><td> .soc <td> office:color-table <td><dl><dt>色<dd>cmyk.soc<dd>gallery.soc<dd> html.soc<dd>pallet.soc<dd>standard.soc<dd>sun-color.soc<dd>web.soc</dl>

<tr><td> .sod <td> office:dash-table <td><dl><dt>点線<dd>standard.sod<dd>style_ja.sod</dl>

<tr><td> .soe <td> office:marker-table <td><dl><dt>線の終点<dd>arrowhd_ja.soe<dd>standard.soe</dl>

<tr><td> .sog <td> ooo:gradient-table <td><dl><dt>グラデーション<dd>classic_ja.sog<dd>modern.sog<dd>standard.sog</dl>

<tr><td> .soh <td> office:hatch-table <td><dl><dt>ハッチング<dd>hatching_ja.soh<dd>standard.soh</dl> 
</table>]]>
        
    </content>
</entry>

<entry>
    <title>番外編: AirMac Expless に繋いだプリンタから印刷できなくなった。</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/11/_airmac_expless.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.136</id>

    <published>2009-11-14T22:29:28Z</published>
    <updated>2009-11-14T22:50:33Z</updated>

    <summary>知人宅で「AirMac Expless に繋いだプリンタから印刷できなくなった。...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="システム備忘録" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>知人宅で「AirMac Expless に繋いだプリンタから印刷できなくなった。」って云うので様子を見てきた。<br />
Ｍａｃは１０年くらい使ってないのでようわからん（うちのはＯＳ8だったし）。</p>

<p>症状は、<br />
・ ネットワークは使えている。<br />
・ プリンタは普通にＭａｃから見えている。<br />
・ 印刷させると「接続中」のまま進まない。<br />
・ ＭａｃにＵＳＢで直結すると印刷できる。</p>

<p>今回は、<br />
1) ＡｉｒＭａｃユーティリティ を開き、手動設定でプリンタのタブを選ぶ。<br />
2) 「ＷＡＮポート経由でプリンタ...」をチェックして、すぐにまた<strong>チェックを外す</strong>。<br />
3) 「アップデート」ボタンがイネーブルになるのでアップデートする。<br />
で回復しました。</p>

<p>無駄だった操作<br />
・ 「プリンタとＦＡＸ」で新しく ＡｉｒＭａｃ接続のプリンタを作ってみる。 接続中のまま、変わらず。<br />
・ ログを読んでみる。 わからん。ヒントにならなかった。<br />
・ ＡｉｒＭａｃ をリセットしてみる。 変化なし。<br />
・ プリンタを繋ぎなおしてみる。 変化なし。<br />
・ 一休みしてコーヒーとアップルパイをいただく。 変化あるわけなし。</p>]]>
        
    </content>
</entry>

<entry>
    <title>OpenOffice.org の MySQL コネクタ</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/11/openofficeorg_mysql.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.135</id>

    <published>2009-11-12T01:42:24Z</published>
    <updated>2009-11-12T02:32:45Z</updated>

    <summary>OpenOffice で MySQL に Connector/j でつながらなか...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="MySQL" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="OpenOffice.org" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>OpenOffice で MySQL に Connector/j でつながらなかった。<br />
まずい、コネクタを入れていなかった。</p>

<p>いれてみた。<br />
クラスパスも指定した。<br />
OOo の再起動もした。<br />
でも「JDBC ドライバは読み込まれませんでした。」と出てきた。</p>

<p>64 bit Windows だから？<br />
MySQL を winx64 にしたから？<br />
しょうがないので ODBC にしてみた。<br />
結果オーライ。</p>

<p>でもなんか納得できない。</p>

<p>しばらく経って原因に気がついた。<br />
クイック起動を終了させていなかった。<br />
OOo を再起動させたつもりがしてなかった。<br />
<strong>馬鹿みたい。</strong></p>

<p>でも原因を探っていろいろネットを見ているうちに拡張機能でコネクタなしの接続ができることを知った。</p>

<p>Sun Connector for MySQL (Beta)<br />
( <a href=" http://extensions.services.openoffice.org/node/2447">http://extensions.services.openoffice.org/node/2447</a> 2009.11.12 現在空っぽ)</p>

<p>MySQL Connector for OpenOffice.org<br />
( <a href="http://extensions.services.openoffice.org/project/mysql_connector" >http://extensions.services.openoffice.org/project/mysql_connector</a> )</p>

<p><a href="http://wiki.services.openoffice.org/wiki/Database/Drivers/MySQL_Native/Beta#Getting_Started:_Connecting_to_MySQL<br />
">使い方:</a><br />
・ OpenOffice.org で「新規データベース」<br />
・ データベースウィザードで「既存のデータベースに接続」＞「MySQL」<br />
・ 「Native に接続(C)」<br />
・  データベースの名前、サーバURL、ポート番号、Socket を指定。<br />
URL に localhost とすると NG。127.0.0.1 とIPアドレスなら OK。 <br />
Socket は 空白。<br />
・ ユーザID やパスワードを必要なら入力。<br />
・ テスト接続で接続が確認できたら完了。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>mklink コマンド (vista 以降)</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/11/mklink_vista.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.134</id>

    <published>2009-11-08T23:04:08Z</published>
    <updated>2009-11-08T23:26:34Z</updated>

    <summary>いつの間にこんなコマンドが実装されてたんだろ? fsutil hardlink ...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Windows OS" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>いつの間にこんなコマンドが実装されてたんだろ?<br />
fsutil hardlink create ... とかやらずにすむようになって少しありがたい。<br />
</p><hr /><br />
<pre style="color:#666; font-size:95%;">
C:>mklink /?
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

    /D          ディレクトリのシンボリック リンクを作成します。既定では、
                ファイルのシンボリック リンクが作成されます。
    /H          シンボリック リンクではなく、ハード リンクを作成します。
    /J          ディレクトリ ジャンクションを作成します。
    リンク      新しいシンボリック リンク名を指定します。
    ターゲット  新しいリンクが参照するパス (相対または絶対)
                を指定します。
</pre>
ちなみに msys の ln の usage は以下のとおり。<br />
<br />
<pre style="color:#666;font-size:95%">
C:>ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
  or:  ln [OPTION]... TARGET                  (2nd form)
  or:  ln [OPTION]... TARGET... DIRECTORY     (3rd form)
  or:  ln [OPTION]... -t DIRECTORY TARGET...  (4th form)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
When creating hard links, each TARGET must exist.

Mandatory arguments to long options are mandatory for short options too.
      --backup[=CONTROL]      make a backup of each existing destination file
  -b                          like --backup but does not accept an argument
  -d, -F, --directory         allow the superuser to attempt to hard link
                                directories (note: will probably fail due to
                                system restrictions, even for the superuser)
  -f, --force                 remove existing destination files
  -n, --no-dereference        treat destination that is a symlink to a
                                directory as if it were a normal file
  -i, --interactive           prompt whether to remove destinations
  -s, --symbolic              make symbolic links instead of hard links
  -S, --suffix=SUFFIX         override the usual backup suffix
  -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create
                                the links
  -T, --no-target-directory   treat LINK_NAME as a normal file
  -v, --verbose               print name of each file before linking
      --disable-exe-magic     disable the cygwin magic that appends .exe
      --help     display this help and exit
      --version  output version information and exit

The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

  none, off       never make backups (even if --backup is given)
  numbered, t     make numbered backups
  existing, nil   numbered if numbered backups exist, simple otherwise
  simple, never   always make simple backups

Report bugs to &lt;bug-coreutils@gnu.org&gt;.
</pre>
]]>
        
    </content>
</entry>

<entry>
    <title>msys,ls,cmd.exe めも</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/10/msyslscmdexe.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.133</id>

    <published>2009-10-27T22:36:28Z</published>
    <updated>2009-10-27T23:19:19Z</updated>

    <summary>ただのメモです。 Windows のコマンドプロンプトで msys の ls に...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Cygwin / MinGw" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="システム備忘録" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>ただのメモです。</p>

<p>Windows のコマンドプロンプトで msys の ls に日本語を表示させる。</p>

<p>ディレクトリ (ワタシの場合 )<br />
C:\Users\&lt;ユーザ名&gt;\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar</p>

<p>ファイル<br />
Command Prompt.lnk</p>

<p>プロパティ<br />
%windir%\system32\cmd.exe /k cd /d d:/users/&lt;ユーザ名&gt; && doskey ls=ls --color=auto --show-control-chars $*<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>MSYSメモ</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/10/msys.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.132</id>

    <published>2009-10-26T09:46:04Z</published>
    <updated>2009-10-26T10:00:36Z</updated>

    <summary>MSYS の日本語表示のメモ 	less の出力を日本語にする。 環境変数 LE...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>MSYS の日本語表示のメモ<br />
<ol><br />
	<li>less の出力を日本語にする。<br />
環境変数 LESSCHARSET を dos に設定。<br />
 set LESSCHARSET=dos<br />
</li><br />
<li>ls で日本語ファイル名を表示する。<br />
--show-control-chars オプションを指定。<br />
 doskey ls=ls --color=auto --show-control-chars $*<br />
</li><br />
</ol></p>

<p>ついでに MinGW & Msys をインストールしたときの環境変数。<ul><br />
	<li>MINGW_HOME 	(MinGW インストール先)<br />
	<li>MSYS_HOME 	(MSYS インストール先)<br />
	<li>PATH 	%MSYS_HOME%/bin;%MINGW_HOME%/bin;%PATH%<br />
	<li>C_INCLUDE_PATH 	%MINGW_HOME%/include<br />
	<li>CPLUS_INCLUDE_PATH 	%MINGW_HOME%/include<br />
	<li>LIBRARY_PATH 	%MINGW_HOME%/lib<br />
</ul></p>

<p>ところで、Windows7のDOS窓で cd /Users とか通るのだけど、パスの区切りに \ (￥,バックスラッシュ) じゃなく /（スラッシュ）を受け付けるコマンドが復活したのか？</p>]]>
        
    </content>
</entry>

<entry>
    <title>OpenOffice.org の色定義</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/07/openofficeorg_5.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.131</id>

    <published>2009-07-05T08:19:40Z</published>
    <updated>2009-07-05T08:28:20Z</updated>

    <summary>Windows の場合 AppData のOpenOffice/3/user/c...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="OpenOffice.org" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<p>Windows の場合 AppData のOpenOffice/3/user/config/<br />
にある standard.soc に保存されている。</p>

<p>&lt;ooo:color-table ...&gt; 〜 &lt;/ooo:color-table&gt; の間に、<br />
&lt;draw:color draw:name="色の名前" draw:color="#xxyyzz" /&gt; で記述する。</p>

<p>*.ｓｏｃ とつくファイルは総じて色物らしい。使い方、使われ方不明。<br />
だれか、和色のテーブル作って欲しい。<br />
 </p>]]>
        
    </content>
</entry>

<entry>
    <title>Qt4 QList の覚え書き</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/07/qt4_qlist.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.130</id>

    <published>2009-06-30T23:42:18Z</published>
    <updated>2009-06-30T23:46:11Z</updated>

    <summary> Qt4 の QList クラスを使うときのサンプル。 delete はここでは...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="C/C++ , Visual Studio" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Eclipse" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Qt4" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<pre>
Qt4 の QList クラスを使うときのサンプル。
delete はここでは考慮してない。

#include <QtCore>
#include <QCoreApplication>

class XY {
public:
	int x;
	int y;

	XY() { x=y=0; }
	XY(int _x, int _y) { x=_x; y=_y; }
	~XY() {}
	void dump() {
		qDebug() << x << ',' << y << endl;
	}
};


int main(int argc, char *argv[])
{
    QList< XY > list;
    XY a;
    a.x = 1;
    a.y = 2;
    list.append(a);

    XY b(2, 22);
    list.append(b);

    list.append(*new XY(3,333));

    QList< XY >::iterator i = list.begin();
    while (i != list.end()) {
    	XY& xy = (*i);
    	(*i).dump();
        ++i;
    }

    return 0;
}
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>Qt4 自前のsignalの作り方</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/06/qt4_signal.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.129</id>

    <published>2009-06-30T04:38:15Z</published>
    <updated>2009-06-30T05:34:08Z</updated>

    <summary> 自分勝手な sugnal の定義方のメモ 例：フォーカスを持ったボタンでキーが...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Qt4" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<pre>
自分勝手な sugnal の定義方のメモ

例：フォーカスを持ったボタンでキーが押されたときにシグナルを発生させる。

(1) シグナルのセクションを用意する。
<span style="color:deeppink;">signals:</span> というのを class の中に追加。
public、private、protected のどれでもいいのか?
内容的には private か protected だろうな。

(2) シグナルとなるメソッドを追加する。
<span style="color:deeppink;">void signal_key_pressed( int );</span> としてみた。
シグナルには引数をつけることができる。
押されたキーを引数に渡すことをもくろみ int にしてみる。

(3) シグナルを発生させる処理を実装する。
virtual void keyPressEvent(QKeyEvent *event) をオーバーライドし、
<span style="color:deeppink;">emit signal_key_pressed( event-&gt;key() );</span>
でシグナルを発生させる。

(4) シグナル受け取る側のスロットを用意する。
セクション <span style="color:deeppink;">slots:</span> を追加。

(5) スロットのメソッドを宣言する。
<span style="color:deeppink;">void slot_key_pressed(int)</span> とした。

(6) QObject::connect() を用いてスロットにつなぐ。

(7) スロットを実装する。


<span style="color:limegreen;">--- シグナルを送るクラス</span>
class someButton : public QPushButton
{
    Q_OBJECT

private:
    void _init() {  ... }

public:
    someButton (QWidget * parent =0) : QPushButton(parent) {
        _init();
        ...
    }
    ~someButton () { ... };

<span style="background-color:pink;">signals:</span>	// (1)
    <span style="background-color:pink;">void signal_key_pressed( int );</span>	// (2)

protected:
    virtual void keyPressEvent(QKeyEvent *event) {
        <span style="background-color:pink;">emit signal_key_pressed( event-&gt;key() );</span>	// (3)
    }
};

<span style="color:limegreen;">--- シグナルを受けるクラス</span>
class someWidget : public QWidget
{
    Q_OBJECT

public:
    someWidget (QWidget *parent = 0)   : QWidget(parent) {
        _init(this);
        ....
    }
    ~someWidget () {}

    someButton* button;

private:
    void _init() {
        button = new someButton();
        <span style="background-color:pink;">QObject::connect(button,SIGNAL(signal_key_pressed(int)),
            this, SLOT(slot_key_pressed(int)));</span>	// (6)
    }

private <span style="background-color:pink;">slots:</span>	// (4)
    <span style="background-color:pink;">void slot_key_pressed(int);</span>	// (5)
}

<span style="background-color:pink;">void someWidget::slot_key_pressed(int key)	// (7)
{
    switch(key)
    {
    ...
    }
}</span>

</pre>]]>
        
    </content>
</entry>

<entry>
    <title>メールアドレス  javaScript</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/06/_javascript.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.128</id>

    <published>2009-06-25T22:14:05Z</published>
    <updated>2009-06-30T05:44:24Z</updated>

    <summary> メールアドレスを自動収集から隠すスクリプト。 どのくらい効果あるか不明。 参考...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Web Design" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<pre>
メールアドレスを自動収集から隠すスクリプト。
どのくらい効果あるか不明。
参考:<a href="http://www.projecthoneypot.org/how_to_avoid_spambots_3.php">http://www.projecthoneypot.org/how_to_avoid_spambots_3.php</a>

&lt;div class="widget-contant widget"&gt;
&lt;script type='text/javascript'&gt;
var c = Array('&lt;','/','a','&gt;');
var d = Array('g','m','a','i','l')
var j = Array('@',':','.');
var n = Array('to','ka','c','hi','.','l','ab' );
var o = Array('&lt;','a',' ','h','r','e','f','=','"','&gt;');
var t = Array('c','o','m');
var u = Array('m','a','i','l','t','o');

function f1() {
	for (i=0; i&lt;n.length;  i++) { document.write(n[i]); }
	for (i=0; i&lt;j.length-2;i++) { document.write(j[i]); }
	for (i=0; i&lt;d.length;  i++) { document.write(d[i]); }
	for (i=2; i&lt;j.length;  i++) { document.write(j[i]); }
	for (i=0; i&lt;t.length;  i++) { document.write(t[i]); }
}
function f2() {
	for (i=0; i&lt;u.length;  i++) { document.write(u[i]); }
	for (i=1; i&lt;j.length-1;i++) { document.write(j[i]); }
	f1();
}

function f() {
	for (i=0; i&lt;o.length-1; i++) { document.write(o[i]); }
	f2();
	for (i=o.length-2; i&lt;o.length;i++) { document.write(o[i]); }
	f1();
	for (i=0; i&lt;c.length; i++) { document.write(c[i]); }
}
&lt;/script&gt;

&lt;h3 class="widget-header"&gt;連絡先&lt;/h3&gt;
&lt;div class="widget-content"&gt;
&lt;script type='text/javascript'&gt;f();&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;

</pre>

<script type='text/javascript'>
var c = Array('<','/','a','>');
var d = Array('g','m','a','i','l')
var j = Array('@',':','.');
var n = Array('t','o','k','a','c','hi.','lab' );
var o = Array('<','a',' ','h','r','e','f','=','"','>');
var t = Array('c','o','m');
var u = Array('m','a','i','l','t','o');

function f1() {
	for (i=0; i<n.length;  i++) { document.write(n[i]); }
	for (i=0; i<j.length-2;i++) { document.write(j[i]); }
	for (i=0; i<d.length;  i++) { document.write(d[i]); }
	for (i=2; i<j.length;  i++) { document.write(j[i]); }
	for (i=0; i<t.length;  i++) { document.write(t[i]); }
}
function f2() {
	for (i=0; i<u.length;  i++) { document.write(u[i]); }
	for (i=1; i<j.length-1;i++) { document.write(j[i]); }
	f1();
}

function f() {
	for (i=0; i<o.length-1; i++) { document.write(o[i]); }
	f2();
	for (i=o.length-2; i<o.length;i++) { document.write(o[i]); }
	f1();
	for (i=0; i<c.length; i++) { document.write(c[i]); }
}
</script>

<div style="border:1px solid limegreen; background-color:#aaffcc;">
<h3 class="widget-header">連絡先</h3>
<div class="widget-content">
<script type='text/javascript'>f();</script>
</div>
</div>

]]>
        
    </content>
</entry>

<entry>
    <title>sudoku</title>
    <link rel="alternate" type="text/html" href="http://blog.tokachi-lab.com/archives/2009/06/sudoku.html" />
    <id>tag:blog.tokachi-lab.com,2009://1.127</id>

    <published>2009-06-25T09:15:17Z</published>
    <updated>2009-06-30T12:17:52Z</updated>

    <summary> 数独のソース 用意するもの、 Eclispe CDT Qt4 Qt4 Ecli...</summary>
    <author>
        <name>てんす</name>
        <uri>http://www.tokachi-lab.com</uri>
    </author>
    
        <category term="Qt4" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tokachi-lab.com/">
        <![CDATA[<pre>
数独のソース

用意するもの、
Eclispe
CDT
Qt4
Qt4 Eclipse Integration
<a href="http://cid-e844b718ee02a287.skydrive.live.com/self.aspx/.Public/examples/sudoku.zip">ソースとバイナリ http://cid-e844b718ee02a287.skydrive.live.com/self.aspx/.Public/examples/sudoku.zip</a>

<h3><span style="color:green; font-size:12pt;">[main.cpp]</span></h3>
#include "qs2.h"

#include &lt;QtGui&gt;
#include &lt;QApplication&gt;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QsudokuClass w;
    w.show();
    return a.exec();
}

<h3><span style="color:green; font-size:12pt;">[qs2.h]</span></h3>
#ifndef QS2_H
#define QS2_H

#include &lt;QtCore/QVariant&gt;
#include &lt;QtGui/QAction&gt;
#include &lt;QtGui/QApplication&gt;
#include &lt;QtGui/QButtonGroup&gt;
#include &lt;QtGui/QGridLayout&gt;
#include &lt;QtGui/QHeaderView&gt;
#include &lt;QtGui/QPushButton&gt;
#include &lt;QtGui/QWidget&gt;
#include &lt;QKeyEvent&gt;
#include &lt;QThread&gt;
#include "ui_qs2.h"

class sudokuCell : public QPushButton
{

private:
    void _init() {
        num = 0;
        QSizePolicy policy(QSizePolicy::Minimum,
                 QSizePolicy::Minimum);
        policy.setHorizontalStretch(0);
        policy.setVerticalStretch(0);
        policy.setHeightForWidth(
                 this-&gt;sizePolicy().hasHeightForWidth());
        this-&gt;setSizePolicy(policy);
        this-&gt;setMaximumSize(QSize(35, 35));
        this-&gt;setFlat(false);
        this-&gt;setCheckable(true);
    }

public:
    int num;
    char label[8];

    sudokuCell(QWidget * parent =0) : QPushButton(parent) 
          { _init(); }
    sudokuCell(const QString & text, QWidget * parent = 0)
         : QPushButton(text, parent) 
          { _init(); }
    sudokuCell(const QIcon & icon, const QString & text, 
           QWidget * parent = 0 ) : QPushButton(icon, text, parent) 
           { _init(); }
    ~sudokuCell() {};
    int  Number (void) { return num; }
    void Number (int new_num) { num = new_num; }
    void Display(int num =-1) {
        label[0] = 0;
        if (num&lt;0) num = this-&gt;num;
        if (num) sprintf(label, "%d", num);
        setText(label);
    }

protected:
    virtual void keyPressEvent(QKeyEvent *event)
    {
        int key;

        switch (event-&gt;key()) {
        case Qt::Key_Left:    key = Qt::Key_S; break;
        case Qt::Key_Right:    key = Qt::Key_D; break;
        case Qt::Key_Up:    key = Qt::Key_E; break;
        case Qt::Key_Down:    key = Qt::Key_X; break;
        case Qt::Key_Space:    key = Qt::Key_0; break;

        default:
            key = event-&gt;key();
            break;
        }
        QApplication::postEvent(parentWidget(),
             new QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier));
    };
};

class QKeyEvent;

class QsudokuClass : public QWidget
{
    Q_OBJECT

    int x;
    int y;
    bool cancel;

public:
    QWidget *gridLayoutWidget;
    QGridLayout *gridLayout;
    sudokuCell *cell[9][9];
    bool chk[9][9];
    QThread *probe;

    QsudokuClass(QWidget *parent = 0)   : QWidget(parent) {
        setupUi(this);
        x = -1;
        y = -1;
        for (int i=0; i&lt;9; i++)
            for (int j=0; j&lt;9; j++)
                chk[i][j] = 0;

    }
    ~QsudokuClass() {}

    void Number (int num) 
        { if (x &gt;= 0 && y &gt;= 0) cell[y][x]-&gt;Number(num); }
    int  Number (void)
        { return (x &gt;= 0 && y &gt;= 0) ? cell[y][x]-&gt;Number() : -1; }
    void Display(int v, int h, int num =-1) 
        { cell[v][h]-&gt;Display(num); }
    void Display();
    void emuClick(int x, int y);

    void setupUi(QWidget *widget)
    {
        if (widget-&gt;objectName().isEmpty())
            widget-&gt;setObjectName(QString::fromUtf8("QsudokuClass"));
        widget-&gt;resize(350, 350);
        gridLayoutWidget = new QWidget(widget);
        gridLayoutWidget-&gt;setObjectName(
            QString::fromUtf8("gridLayoutWidget"));
        gridLayoutWidget-&gt;setGeometry(QRect(5, 5, 340, 340));
        gridLayout = new QGridLayout(gridLayoutWidget);
        gridLayout-&gt;setSpacing(1);
        gridLayout-&gt;setMargin(1);
        gridLayout-&gt;setObjectName(QString::fromUtf8("gridLayout"));
        gridLayout-&gt;setSizeConstraint(QLayout::SetDefaultConstraint);
        gridLayout-&gt;setContentsMargins(0, 0, 0, 0);

        widget-&gt;setWindowTitle(QApplication::translate("QsudokuClass", 
                "Sudoku?", 0, QApplication::UnicodeUTF8));
        for (int y=0; y&lt;9; y++) {
            for (int x=0; x&lt;9; x++) {
                QString name,label;
                name.sprintf("CELL_%d%d",y,x);
                cell[y][x] = new sudokuCell(name,gridLayoutWidget);
                cell[y][x]-&gt;setText("");
                gridLayout-&gt;addWidget(cell[y][x], y, x, 1, 1);
                QObject::connect(cell[y][x], SIGNAL(clicked()), 
                        widget, SLOT(sel_change()));
            }
        }
        QMetaObject::connectSlotsByName(widget);

        probe = NULL;
    }

private:
//    Ui::QS2Class ui;

private slots:
    void sel_change();

protected:
    virtual void keyPressEvent(QKeyEvent *event);
};

#endif // QS2_H

<h3><span style="color:green; font-size:12pt;">[qs2.cpp]</span></h3>
#include "qs2.h"
#include "sudokuThread.h"

void QsudokuClass::sel_change()
{
    if (x &gt; -1 && y &gt; -1)
        cell[y][x]-&gt;setChecked(false);

    for (int i=0; i&lt;9; i++)
        for (int j=0; j&lt;9; j++)
            if (cell[i][j]-&gt;isChecked()) { x = j; y = i; Display(i,j); }
}

void QsudokuClass::Display()
{
    bool complete = (probe) ? ((sudokuThread*)probe)-&gt;complete:false;
    for (int i=0; i&lt;9; i++)
        for (int j=0; j&lt;9; j++) {
            QFont font;
            if (complete || chk[i][j]) {
                font.setPointSize(12);
                font.setBold(true);
            } else {
                font.setPointSize(8);
                font.setBold(false);
            }
            cell[i][j]-&gt;setFont(font);
            cell[i][j]-&gt;Display();
        }
}

void QsudokuClass::emuClick(int h, int v)
{
    cell[v][h]-&gt;setChecked(true);
    sel_change();
}

void QsudokuClass::keyPressEvent(QKeyEvent *event)
{
    if (x &lt; 0 || y &lt; 0)
        return;

    switch (event-&gt;key()) {
    case Qt::Key_Space:    cell[y][x]-&gt;Number(0); break;
    case Qt::Key_0:    cell[y][x]-&gt;Number(0); break;
    case Qt::Key_1:    cell[y][x]-&gt;Number(1); break;
    case Qt::Key_2:    cell[y][x]-&gt;Number(2); break;
    case Qt::Key_3:    cell[y][x]-&gt;Number(3); break;
    case Qt::Key_4:    cell[y][x]-&gt;Number(4); break;
    case Qt::Key_5:    cell[y][x]-&gt;Number(5); break;
    case Qt::Key_6:    cell[y][x]-&gt;Number(6); break;
    case Qt::Key_7:    cell[y][x]-&gt;Number(7); break;
    case Qt::Key_8:    cell[y][x]-&gt;Number(8); break;
    case Qt::Key_9:    cell[y][x]-&gt;Number(9); break;

    case Qt::Key_S:    emuClick((x+8)%9,y); return;
    case Qt::Key_D:    emuClick((x+1)%9,y); return;
    case Qt::Key_E:    emuClick(x,(y+8)%9); return;
    case Qt::Key_X:    emuClick(x,(y+1)%9); return;

    case Qt::Key_R:
        Display();
        return;

    default:
        {
            int dummy;
            dummy = 0;
        }
        return;
    }

    chk[y][x] = cell[y][x]-&gt;Number();

    if (probe) {
        ((sudokuThread*)probe)-&gt;cancel();
        probe-&gt;terminate();
        delete probe;
        probe = NULL;
    }

    for (int i=0; i&lt;9; i++)
        for (int j=0; j&lt;9; j++)
            if (!chk[i][j]) cell[i][j]-&gt;Number(0);

    Display();

    probe = new sudokuThread(this);
    probe-&gt;start();
}

<h3><span style="color:green; font-size:12pt;">[sudokThread.h]</span></h3>
/*
 * sudokuThread.h
 *
 *  Created on: 2009/06/25
 *      Author: Tenshi
 */

#ifndef SUDOKUTHREAD_H_
#define SUDOKUTHREAD_H_

#include "qs2.h"

class sudokuThread
    : public QThread
{
    Q_OBJECT

protected:
    QsudokuClass* sudoku;

    int  num(int v, int h) 
         { return (sudoku) ? sudoku-&gt;cell[v][h]-&gt;Number() : -1; }
    void setNum(int v, int h, int num) 
         { if (!sudoku) return; else sudoku-&gt;cell[v][h]-&gt;Number(num); }
    void probe(int loc);
    void run() {
        while (!cancel_flag) {
            ans = 0;
            probe(0);
            if (ans == 1) {
                complete = true;
                wait();
            }
        }
        exit ();
    }

public:
    int  ans;
    bool complete;
    bool cancel_flag;

    sudokuThread(QObject *parent = 0)
    {
        sudoku = (QsudokuClass*)parent;
        cancel_flag = false;
        complete = false;
    }
    virtual ~sudokuThread() { }
    void cancel() { cancel_flag = true; }
};

#endif /* SUDOKUTHREAD_H_ */

<h3><span style="color:green; font-size:12pt;">[sudokuThread.cpp]</span></h3>
/*
 * sudokuThread.cpp
 *
 *  Created on: 2009/06/25
 *      Author: Tenshi
 */

#include "ui_qs2.h"
#include "sudokuThread.h"

void sudokuThread::probe(int loc)
{
    if (cancel_flag)
        return;

    if (loc==81) {
        ans ++;
        QApplication::postEvent(sudoku,
          new QKeyEvent(QEvent::KeyPress, Qt::Key_R, Qt::NoModifier));
        msleep(300);
    } else {
        int x = loc % 9;
        int y = loc / 9;
        int bx = (x/3)*3;
        int by = (y/3)*3;

        if (num(y,x)!=0) {
            probe(loc+1);
        } else {
            for (int n=1; n&lt;=9; n++) {
                bool used = false;
                int ix,iy;
                for (ix=0; !used && ix&lt;9; ix++)
                    if (num(y,ix)==n) used=true;
                for (iy=0; !used && iy&lt;9; iy++)
                    if (num(iy,x)==n) used=true;
                for (iy=by; !used && iy&lt;by+3; iy++)
                    for (ix=bx; !used && ix&lt;bx+3; ix++)
                        if (num(iy,ix)==n) used=true;
                if (used) continue;

                setNum(y,x,n);
                probe(loc+1);
                setNum(y,x,0);
            }
        }
    }
}


</pre>]]>
        
    </content>
</entry>

</feed>

