USBメモリも暗号化してはいかがですか

USBフラッシュメモリも、Windowsで使用する場合、NTFSでフォーマットすれば、Windowsの暗号化機能が使用でできます。
データのバックアップなどで使用する場合は、十分有効です。
ハード的に暗号化できるUSBフラッシュメモリもありますが、高価です。
Windowsの暗号化ファイルシステム(EFS: Encrypting File System)については、以下のサイトが詳しく、
2台以上のパソコンで、暗号化用証明書を同一にする方法なども書かれています。
http://07.net/EFS/

Windowsの暗号化だけでは心配な方は、以下の様な、暗号化ソフトを併用されてはいかがでしょうか。
TrueCryptはWindowsとMacで同じように利用できるので便利です。
http://ja.wikipedia.org/wiki/TrueCrypt

Windowではログインパスワード解除ツール「Ophcrack」などがよく知られていますが、Macはファームウェアパスワードを
設定しないと、簡単にパスワードを解除できますのでご注意ください。
http://www.lifehacker.jp/2012/10/121019break_into_win.html
http://www.lifehacker.jp/2012/10/121019break_into_mac.html

SqlDependencyのSQL文にご注意

SQL Server 2005以降、テーブルが更新されると、それをイベントとしてアプリケーションが
受け取れる仕組みを作成するSqlDependencyクラスがあります。
これを使うと、サーバープログラムとクライアントアプリケーション間で、実装が面倒な
ソケット通信などの処理を作成すること無く、クライアントアプリケーションに通知する
仕組みが作成できます。
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqldependency.aspx

具体的な実装方法は、以下のサイトを参照ください。
http://dotnet.dzone.com/articles/c-sqldependency-monitoring
http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/

大まかな流れは以下の通りです。
A SQL ServerでQUEUE等を作成
B アプリケケーションでテーブルの変化を通知してほしい、SQLECT SQL文を作り、そのSQL文の結果が
変化したとき実行されるメソッドを登録するイベントを設定
C 実行されるメソッドを定義

このBでのSQL文に制約があり、SqlDependencyクラスの制約にあっていないと、大量のイベントが
発生し、Cのメソッドの処理でCPUがフル状態となってしまいます。
以下のSQLは経験上ダメなのでご注意ください。他にもダメな場合があるかもしれません。
・外部結合(Outer Join)のSQL
・3つ以上を結合するSQL
もし、どうしてもこのような条件のSQLを使いたい場合、SqlDependencyクラスを使うため専用の
テーブルを作成するのもひとつの回避方法です。

Markdown記法

マークダウン記法は次のページを参照いただければ、説明の必要もありませんが、
プログラムのドキュメントなどで利用されている簡易マークアップ言語です。
http://kojika17.com/2013/01/starting-markdown.html

オープンソースのプログラムのドキュメントなどで拡張子”.md”のファイルがあれば
それは、マークダウン記法です。マークダウン記法のエディタ、ビューアもフリーで
ありますし、FireFoxのアドインなどもあります。

jQueryでinputの値取得はpropで

checkboxの値取得もattrを使っていましたが、input関係は1.6以降で追加されたpropの方がいいですね。
思い込みは怖いですね。
「jQueryにおけるattrとpropの違いと使いドコロまとめ」
http://qiita.com/kbyay_/items/7a7ce9547f29b34a63b1
「jQuery 1.9 .prop() 」
http://js.studio-kingdom.com/jquery/attributes/prop

ついでに、「input 要素の disabled 属性と readonly 属性の違い」
http://www.koikikukan.com/archives/2009/04/26-003300.php

そして、「readonly=”true”」と「readonly=”readonly”」
http://stackoverflow.com/questions/6172911/what-is-the-difference-between-readonly-true-readonly-readonly
なんと、readonlyは値は不要。

なお、最初の「qiita」は日本の半分のプログラマーが見ているという噂も。
http://itpro.nikkeibp.co.jp/article/NEWS/20131128/521324/?ST=develop&P=1
http://thebridge.jp/2013/05/qiita-gets-220k-monthly-user

JavaScriptにも「名前空間」を

JavaScriptは個人的は得意ではありませんが、Ajax以来WEBアプリでは必須の技術になっています。
なんと、Office 2013でのOfficeアプリでは、HTML+JavaScriptの世界です。
http://www.atmarkit.co.jp/ait/articles/1301/25/news063.html

最初、JavaScriptの「自由さ」から、いい加減に作っていると、複数の外部ファイルを同時に使用すると
名前の重複などで、問題になることがあります。そこで、JavaScriptでも「名前空間」らしきものを
使用します。
以下のサイトに「名前空間」のいろいろな定義方法とそのメリット・デメリットが記入されています。
非常に参考になります。
「JavaScript のブロックスコープと名前空間」
https://dev.mozilla.jp/2010/05/js-blockscope-and-namespace/

ついでに、JavaScriptに関する有用なサイトです。
「Google JavaScript スタイルガイド – 日本語訳」
http://www38.atwiki.jp/aias-jsstyleguide2/pages/15.html
「効率的な JavaScript」
http://www.hyuki.com/yukiwiki/wiki.cgi?EfficientJavaScript

iOSはなぜバージョンダウンできないのだ

たまに簡単なiPADのプログラムを作りますが、初めてiOS7の環境で開発して
びっくり。
今まで表示されたボタンのバックが表示されない、ステータスバーもデフォルト
で表示領域になる、テーブルの表示が変わる…
http://d.hatena.ne.jp/Kazzz/20130922/p1

AppleはiOSのバージョンアップを無料、Macでも低価格(あるいは無料)と
し最新のバージョンとすることで、サポートOS範囲を限定することが狙いの
ようです。

iOSでは原則としてバージョンアップしたものはバージョンダウンできないのが
辛いところです。バージョンダウンできるようにするには機器ごとに特殊な
作業が必要です。
http://www.gizmodo.jp/2013/09/ios_7ios_6.html

勉強していないのが悪いと言われればそれまでですが、何とかしてほしいものです。

GitのプライベートリポジトリBitbucket

バージョン管理システムGit(ウィキペディア http://ja.wikipedia.org/wiki/Git)は、Microsoft Visual Studio 2012
でもサポートされるようになり、今後、ますます利用が広がるでしょう。
MACでの開発環境 Xcodeでは、バージョン4くらいから(?)サポートされています。

ただし、サーバーを立てるのは面倒です。
Githubの公開リポジトリのようなものを、フリーでプライベートリポジトリが作成できるBitbucketがあります。
https://bitbucket.org/features
プライベートリポジトリといっても、何人か招待し、リポジトリを共有できます。
クライアント側のツールSourceTreeは、Windows版、MAC版もあります。
https://www.atlassian.com/ja/software/sourcetree/overview

独自に、サーバーを立てるには、以下のサイトを参照ください。
手軽に設置できるGithubクローン「GitBucket」を使ってみよう
http://news.mynavi.jp/column/ide/162/index.html

jQuery ファイルドラッグアンドドロップアップロード

1.最近クライアントからの要望で、ファイルのアップロードをドラッグアンドドロップで行えるような、リッチなクライアントを作成したいというものがあった。

2.そこで、いろいろ調べた結果、jqueryで実装できる、「jQuery File Upload」という、UIを使用することになった。

ファイルのダウンロード及びデモサイトは、http://blueimp.github.io/jQuery-File-Upload/で、確認できる。

【設置の方法】
ダウンロードしたファイルを解凍し、サーバーへコピーするだけ。
コピーしたディレクトリをURLで指定すれば、デモサイトと同様の画面が開く。

 

【使い方】
デスクトップ等にあるアップロードしたいファイルをブラウザの画面に、ドラッグアンドドロップし、
startボタンを押すだけ。

 
【サーバーサイドの処理の実装】
こちらは、使用している環境にもよるが、通常のファイルのアップロードと同様な実装の仕方で、ファイルをサーバー上でコピーすることができる。
–参考サイト
https://github.com/blueimp/jQuery-File-Upload/wiki

のServer-side(ページ中盤以降)
に、PHP、PHYTON、Ruby、JAVA、ASP.net等での実装の仕方のサンプルが、豊富に用意されている。

【まとめ】
今回は、紹介までですが、是非、一度お試しください。

 

運動会・出場者募集システム

運動会 出場者募集システムのトップ画面です。

Undokai_メニュー.JPG

はじめに
自治会の体育委員になったことが、出場者募集システムを作るきっかけとなりました。以前はExcelを使っていましたが、印刷して紙ベースでの利用でした。運動会への取り組みが始まるのは8月末です。ここから10月始めの当日までが勝負です。システムもそれぞれの場面で必要となる物を作り追加していくという同時進行です。
順に説明をするとマスター関係からとなるのですが、この部分は飛ばします。マスターの名称のみ主なものだけを上げます。イメージがわきませんか? 来年も使えることを考えているとか…
年度マスター
競技マスター
出場者マスター

実際の取り組みでは前段階があります。出場者の募集です。その結果を入力するところからシステムの運用が始まります。下の画像は出場者登録画面とリストです。
Undokai_出場者登録.JPG

Undokai_出場者リスト.JPG

人数が足りないところ、ダブっているところが出てきます。調整を検討するための表、担当者が出場を依頼する、種目の変更を頼むための表が必要となります。
調整リストは、家族内での出場者の状況が分かります。
Undokai_調整リスト.JPG

集計リストは、一人の方が何種目に出ているのかが分かります。
Undokai_集計リスト.JPG

また上記以外にExcel手作業で昨年と一昨年の出場者履歴リストを作っています。 このプログラム作成は来年度に持ち越しです。

 出場者が決まったあと、練習、運動会への案内文書があります。これをExcelで作っています。Excelシートの氏名、競技種目をプログラムにより入れ込み自動生成します。家族ごとに案内文がでます。
Undokai_練習参加.JPG

お弁当の申し込み登録画面です。事前にお弁当申込用紙を配り回収した結果を入力します。
Undokai_弁当登録.JPG

 運動会当日に必要になります。出場選手の招集のため競技種目と選手名を掲示します。A3用紙の大きさです。

Undokai_掲示リスト.JPG

 以上が「運動会 出場者募集システム」の全体です。この他に作ったものの使わなかった「雨天順延確認リスト」があります。順延になったとき参加できるかを確認するものでした。
今後、作成するプログラムとしてこれまでに上げた以外に「掲示用競技名リスト」があります。競技名をA3で大書きしたものです。来年の運動会まで徐々に改善をすれば良いでしょう。

ユーザーコントロールのフォーカス移動

プログラムを作っていると、ちょっとしたことでひっかかり、無駄に時間を費やしてしまうことがあります。
そんなちょっとしたことを時々アップしていきたいと思っています。

今回は、最近はまってしまったユーザーコントロールのフォーカス移動です。

#開発環境はMicrosoft Visual Studio 2010、言語はC#です。

IPアドレスを入力するため、テキストボックスを4つ並べたユーザーコントロールを作りました。
並べたテキストボックス間をリターンキーでフォーカスを移動できるように下記のメソッドを作成し、各テキストボックスのKeyDownイベントから呼び出すようにしました。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
// リターンキーの時
if (e.KeyCode == Keys.Enter) {

// 次のコントロールへフォーカス移動
this.SelectNextControl(this.ActiveControl,
!e.Shift, true, true, true);
}
}

でも、このユーザーコントロールをフォームにはりつけて、リターンを押していくと、ユーザーコントロール内で、フォーカスがぐるぐる回ってしまいます。
nextcontrol.png

Control.SelectNextControlメソッドの仕様を確認してみました。
すると、5つ目の引き数の説明が、
「タブ オーダーの最後のコントロールに到達した後、タブ オーダーの最初のコントロールから検索を続行する場合は true。それ以外の場合は false。」

「それ以外の場合」というのがどんな場合かよくわかりませんでしたが、「最初から検索しないなら他に何か見つけてくれるかも」と、とりあえず最後の引き数を false にしてみました。
すると、4つ目のテキストボックスまで来たらそれ以降フォーカスが移動しないだけでした。
「それ以外の場合」は、単に先頭に戻らないということでした(^^;

上記のフォーム、リターンキーでフォーカスを移動したくてはまっていますが、Tabキーだとちゃんと全てのコントロールにフォーカスが移動していきます。
ので、
SelectNextControl を this.ProcessTabKey(!e.Shift);
に変更して、Tabキーを偽装してみましたが、結果は同じでした(T0T)

が、
Tabキーを押した時とTabキーを偽装した時の違いを考えていて、ふとひらめきました。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
// リターンキーの時
if (e.KeyCode == Keys.Enter) {

// 次のコントロールへフォーカス移動
this.Parent.SelectNextControl(this.ActiveControl,
!e.Shift, true, true, true);
}
}

これでうまくいけました。
this.SelectNextControl を、
this.Parent.SelectNextControl に変えただけです。

親フォームから呼べばよかったんですね (^0^)v

もっと見る

5月25日は、関西IT支部の技術交流会(カフェはお休み)

X