WindowsからMacへssh接続する

基本は、Windowsからmac mini へ VNC 接続するんだけど、やっぱりコマンドラインがいいかな、と。 VNC接続ができていると、既にmac側で「リモート接続」が有効になっているので、teraterm で ssh がつながるはずなのだが、うまくつながらない … かと思ったら、こんな落とし穴が。 普通は TeraTerm を起動して、SSH で接続。 ユーザ名とパスワードを入力すればOKなはずなんですが… 何故か、時間が経った後に、エラーになってしまう。 で、色々探したものの、他の人はつながるみたいなんですよね。。。 何故、私の mac mini (mac os x 10.6.4)で繋がらないのかぁ、と思っていたのすが、試しに 「チャレンジレスポンス認証」でやると、あっさり 暫く経つと、パスワードを入れてる画面が出ます。 そして接続と。 何故、デフォルトがチャレンジレスポンスなのか分かりませんが、ひとまずこれでつながりました。 ので、めでたしめでたし。 ■参考サイト macにsshdを設定してみた – webとかmacとかいろいろ技術メモ http://d.hatena.ne.jp/dice-t/20071115/1195187150    

役所風にEnterキーで次のテキストボックスへ移動

先日、子供の出生届に行ってきたわけですが、まだまだ古いパソコンを使っていましたお役所さん。出生届もインターネット越しでもいいんじゃない?と思ったり、思わなかったりしたのですが、ひょいと、パソコンの画面を見ると懐かしのDOS画面でありました。 役所関係や事務関係では、まだまだ強いですよね、この手のインターフェース。 そんな訳で「タブキーで次のフォーカスに移ればいいじゃん」と思っても「エンターキー(Enter Key)で次のフォーカスに移りたい」訳で、そこには、Silverlight とか、WPF とか、WEB やら jQuery やらの話は出てきません。ひたすら、今の業務にそろえたい訳です。 という訳で、UXってのが「ユーザー体験」ならば、かつてのDOS画面風を再現させたっていいじゃないと思いついたのがこの画面。 <001> って、バックを「黒」にして、文字を「緑」にしただけなんですが、もうちょっと工夫が必要ですよね。 MS ゴシックのフォントでは字がつぶれるので、もっと適切な固定ピッチフォントで。 アルファベット&数字が、きれい過ぎる感じがするので、そのあたりも。 とか。 で、真っ先に実装したいのが Enter キーによるフォーカス移動です。 Enter キーのフォーカス移動は、落とし穴が多くって、少なくとも、 ・複数行のテキストボックスが入ると破綻する。 ・漢字の確定の Enter キーと、アルファベットの入力途中の Enter キーを区別する。 ・1行のテキストボックスだと、Enter キーでビープ音が鳴る仕様。 があります。 複数行のテキストボックスの場合は、かつての画面ってこのパターンはなかったんですよ、考えてみれば。DOSで業務画面を作る場合は、テキストのスクロールとかもなくて、大抵の場合、複数行の入力なんてのもありません。 となれば、ちょっと、業務画面チックに Enter キーを変えていくのも良いかと。 namespace SampleEnterManager {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent(); #if true [...]

.NET(C#/VB)で、アプリ設定を読み書き

従来、Windowsアプリケーションの設定は、レジストリを使ったり、*.iniファイルを使ったりしていたわけですが、最近は、xml が主流です。と言いますか、レジストリだったり xml だったりアプリケーション毎にばらばらです。 そんなモノだから、設定関係で誤射しそうな方も出て来ます。 なので、少し裏技ちっくですが、手軽にxmlから読み書きする方法を晒しておきます。 最初に画面はこんな感じ。 <001> 右のグリッドは、プロパティグリッド(PropertyGrid)と言ってお手軽にクラスのプロパティを変更できるものです。Visual Studio でも使われていて、この手の変更にぴったりなのです。 そんな感じで、xmlアクセスはこんな感じ。 using System.IO; using System.Xml.Serialization; public partial class Form1 : Form {     public Form1()     {         InitializeComponent();         // 初期値         setting = new MySetting();         this.propertyGrid1.SelectedObject = setting;     }     // アプリケーションの設定     MySetting setting;     // 保存     private [...]

DataSetを使ってMySQLを扱う場合の勘所

タイトルに「MySQL」とありますが、旧来のDataSet/DataTableを使う場合のコツ、と思ってください。 # SQL to LINQ や ADO.NET Entity Framework を使う場合は、もうちょっと別なスタイルもありです。 業務アプリケーションでデータベースを扱う場合、利用方法は次のパターンに分けられます。 <001>   データベースは次の2種類 ・更新系のテーブル  → 頻繁に更新するデータ  → 売上データ、月次データなど ・マスター系のテーブル  → ほとんど更新しないデータ  → 部門情報、会社名一覧など これを操作する画面が次の2種類 ・一般の画面  → 主に更新用のテーブルを扱う画面  → 一般ユーザーが使うので、利用しやすい画面にしないと駄目 ・マスタ画面  → 主にマスタ系のテーブルを扱う  → 保守に利用するためなので、チープ画面でよい。SEが使う。 これで、DataSetを直接扱うと良いのが、図のなかで「D」(DataSet)となっているところです。 ・一般画面から更新系DBへ  → キャッシュとして、DataSetに保持しておく。  → 部門の一覧をコンボボックスで表示とか。 ・マスタ画面からマスタ系DBへ  → グリッドやリストなどの自動バインド(DataSource)にDataSetを直接指定。  → DataSetの内容を直接マスタに書き込んでしまう。 一般画面から更新系DBへの矢印は、SqlCommandを使ってちまちまと更新します。 ちまちま更新は、ストアドプロシージャにしてもOK。しなくてもOK。パラメータは必須(にすると良い)。 このパターンを、MVCに当てはめると(というか、ベースがMVCなのです。このパターン/考え方は2000年頃から使っている)、 <002> 画面のほうは、いわずもがなの「View」、 参照系のキャッシュ部分は、「Model」、 更新系は直接データベースを扱う(SqlCommandで)ので「Controller」に相当します。 デスクトップ系のアプリケーションを作る場合、VB6(.NETにあらず)の頃は、このデータベースを扱う部分がViewに分散してしまうので、実際の開発(多人数の開発)では、もうひと工夫必要です。 開発プロジェクトの特性として、全てベテランプログラマで揃えらえることはまれです。というか、オープンソースのプロジェクトぐらいしかないでしょう。業務の場合は必ず「新人」と「ベテラン(中堅)」がいます。 そうすると、新人と中堅の技術差があります。あって当然です。 なので、この技術差をうまく活かすために、次のように配置をします。 <003> 新人は画面側を担当します。これは、新人の弾くスキルでは、画面、SQLなどの両方をこなすのが難しいという点。長期に続いていたプロジェクトだと、データベース周りは既に社内にいる人間しかわからないという状態になっているので覚えることが多すぎるので、できるだけデータベースから遠くに置くためです。 なので、中堅、ベテランは、新人がデータベースを扱えるように「DAO(Data Access Object)」を作ります。このDAOは、O/Rマッピングでも良いし、単なる関数呼び出しでもよいし、手順書でも良いのです。役目としては「新人をデータベースから遠くに置く」ためです。新人は「データベース」を扱いたいのではなく、「データ」を扱いたいのですから。 DAO(Data Access Object)の利点は、このほかにも、 ・開発中のデータベース構造が変わっても、DAOが吸収できる(可能性がある)。 ・ワンクッションあるので、実行ログがとりやすい。 [...]

C#からMySQLを扱う(更新編)

C#からMySQLを扱う(更新編) 射撃しながら前進(あるいは迷走)する方への援護射撃。第2弾です。 MySQLでも、SQL Serverでも、Oracleでも、データをグリッドで表示する場合は、DataSetを使うのが断然楽です。 顧客が、グリッドのチープな画面を許容してくださるならば、グリッドでOKでしょう。 // コネクション作成 MySqlConnection cn = new MySqlConnection(  ”Data Source=localhost;Database=konicadb;User ID=konica;password=konica”); MySqlDataAdapter da = new MySqlDataAdapter(  ”SELECT * FROM sample”, cn); DataTable dt = new DataTable(); // 検索 da.Fill(dt); // 表示 dataGridView1.DataSource = dt; こんな風に、DataTable を使って書けます。 ちなみに、DataSet で書く場合は、 // コネクション作成 MySqlConnection cn = new MySqlConnection(  ”Data Source=localhost;Database=konicadb;User ID=konica;password=konica”); MySqlDataAdapter da = [...]