■
最近、会社で使っている作業管理ツールを作り直しています。
もともとはASP.NET2.0でざっくり作ったWebアプリですが、
上司の要望を取り入れているうちにだんだんやっつけ仕事に…。
今後も使われ続ける様子なので、今のうちに作り直すことにきめました。
とりあえず今実装している機能はこんなところです。
・作業時間入力(カレンダーコントロールで日を選び、業務、作業の種類と時間帯を入力)
・時間帯ごとに合計時間を算出(残業時間A・B・C、所定勤務時間など)
・振替休日の反映
・Excelの集計表2種類
・ユーザ管理(ID、パスワード、所属部署)
・業務マスタメンテナンス機能
・基準時間帯メンテナンス機能
・休日メンテナンス機能
機能はそのままに、UIとデータ設計を見直します。
データ設計は特に集計がしやすいように配慮して。
今は作業時間帯ごとの合計時間がアプリを通してしか
わからんのです。運用も考えると全てSQLでわかるようにしたほうがいいです。
開発はやはりASP.NET2.0で。
これからはSilverlightかASP.NETAJAXか?とも思いますが、
Webアプリ開発環境としてASP.NET2.0は一つの完成形かと思ってます。
TraceSourceの設定
TraceSourceを使う際のconfigの内容をメモしておきます。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <source name="MainTraceSource" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <!--<add name="EventLog" />--> <!--<add name="TextLog" />--> <!--<add name="Delimited" />--> <!--<add name="XmlWriter" />--> <!--<add name="Console" />--> </listeners> </source> </sources> <switches> <add name="sourceSwitch" value="Warning"/> </switches> <sharedListeners> <add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="Test Application" /> <add name="TextLog" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextLog.txt" /> <add name="Delimited" type="System.Diagnostics.DelimitedListTraceListener" initializeData="DelimitedLog.txt" delimiter="," traceOutputOptions="DateTime" /> <add name="XmlWriter" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Log.xml" /> <add name="Console" type="System.Diagnostics.ConsoleTraceListener" initializeData="true" /> </sharedListeners> </system.diagnostics> </configuration>
実際は上記のsourceタグのコメントをいずれか外して使います。
サンプルソースはこんな感じです。
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespace TraceTest { class Program { static void Main(string[] args) { try { TraceSource trace = new TraceSource("MainTraceSource"); trace.TraceEvent(TraceEventType.Warning, 0, "警告"); trace.TraceEvent(TraceEventType.Information, 1, "情報"); trace.TraceEvent(TraceEventType.Critical, 2, "危機"); trace.Flush(); } catch (Exception ex) { Console.WriteLine("{0}\r\n{1}", ex.Message, ex.StackTrace); } Console.Read(); } } }
Page#Transactionに気づいた今日この頃
いろいろと忙しく滞っていた日記を久しぶりに更新。
こないだASP.NETのPageクラスのTransactionプロパティをはじめて知りました。
今までリファレンスで見ていたかもしれませんが、
あんまり気にしてなかったというのが実際のところです。
データアダプタ内部のCommandクラスはprivateなのでTransactionをセットできないので、
今までASP.NETにADO.NETのデータアダプターをぺたぺた貼り付けても、
「これじゃトランザクションとれないよなあ」と
結局アダプタクラスを自作していました。
しかしながらASP.NETとADO.NETの組み合わせによるRADは
このTransactionプロパティが前提なんでしょうね。
1.1からあったのに今頃知った…orz
でもビジネスロジックとUI層を分離すると結局
ビジネスロジック側でトランザクションを管理しなきゃいかんので、
このプロパティもやっつけで作るときぐらいにしか
使わないのかも。
というわけで今も使ってません。
C#のパフォーマンスカウンタ
『プログラミング .NET Framework 第2版』に簡単便利なパフォーマンスカウンタのコードがあったのでメモしておきます。
using System;
using System.Collections;
using System.Collections.Generic;
using Systme.Diagnostics;
internal sealed class OperationTimer : IDisposable {
private Int64 m_startTime;
private String m_text;
private Int32 m_collectionCount;
public OperationTimer(Sring text){
PrepareForOperation();
m_text = text;
m_collectionCount = GC.CollectionCount(0);
m_startTime = Stopwatch.GetTimestamp();
}
public void Dispose() {
Console.WriteLine("{0,6:###.00} seconds (GCs={1,3}) {2}",
(Double) Stopwatch.Frequency,
GC.CollectionCount(0) - m_collectionCount, m_text);
}
private static void PrepareForOperation() {
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
以下のように使います。
using System;
public static class Program {
public static void Main() {
using (new OperationTimer("何かの処理")){
// 時間を計測したい処理を書く。
}
}
}
Microsoft Loopback Adapterを使ったVirtualPCのネットワーク設定
VirtualPC 2004のホストOSとゲストOSとをMicrosoft Loopback Adapterで接続し、
インターネット共有を使ってゲストOSからインターネット接続を行う手順を紹介します。
ゲスト、ホストの構成は以下のとおりです。OSが異なる場合は適宜読み替えてください。
ホストOS | Windows XP Professional |
ゲストOS | Windows 2000 Server |
Microsoft Loopback Adapterのインストール
まずホストOSにMS Loopback Adapterをインストールします。
「スタート」→「コントロールパネル」→「ハードウェアの追加」をクリックして「ハードウェアの追加ウィザード」を起動後、
以下の手順でウィザードを進めてください。
ウィザードの質問 | 回答 |
既にこのハードウェアをコンピュータに接続していますか? | はい、ハードウェアを接続しています |
インストールされているハードウェア | 新しいハードウェアデバイスの追加 |
インストール方法を選んでください | 一覧から選択したハードウェアをインストールする |
共通ハードウェアの種類 | ネットワークアダプタ |
製造元 | Microsoft |
ネットワークアダプタ | Microsoft Loopback Adapter |
ゲストOSのネットワークアダプタの選択
VirtualPCコンソールから対象となるゲストOSを選択し、「設定」をクリック。
設定画面から「ネットワーク」を選択し、アダプタとして「Microsoft Loopback Adapter」を選択します。
ゲストOSのネットワーク設定
ゲストOSを起動し、「スタート」→「コントロールパネル」→「ネットワークとダイヤルアップ接続」から、
ローカルエリア接続ののTCP/IPのプロパティを以下のように設定します。
IPアドレスを192.168.0.2としているのは、後のインターネット共有で
ホストOS側のIPとして192.168.0.1が指定されるためです。
設定項目 | 値 |
IPアドレス | 192.168.0.2 |
サブネットマスク | 255.255.255.0 |
デフォルトゲートウェイ | 192.168.0.1 |
優先DNSサーバ | [環境に応じた優先DNSサーバのIPアドレス] |
代替DNSサーバ | [環境に応じた代替DNSサーバのIPアドレス] |
ホストOSのネットワーク設定
MS Loopback Adapterをインストールしたことで、
「スタート」→「コントロールパネル」→「ネットワーク接続」に、
MS Loopback Adapterのローカルエリア接続が追加されています。
(以後、これを「VirtualPC接続」とします)
これと異なる、インターネットに接続している実在のNICの接続(以後、これを「物理接続」とします)のプロパティを開きます。
「詳細設定」タブ→「インターネット接続の共有」の、
「ネットワークのほかのユーザに、このコンピュータのインターネット接続をとおしての接続を許可する」
にチェックをつけます。
すると、VirtualPC接続のIPアドレス設定が自動的に以下のようになり、
物理接続を通してゲストOSがインターネットにアクセスできるようになります。
平均年齢40歳の会社で思うこと
私の会社の平均年齢は40歳です。
その中にあっては30歳の私なんぞはまだまだ若手でして、
新卒の方にとっては下手すりゃお父さんお母さんぐらいの年齢の人が
たくさん働いています。
日本の多くの例外にもれず、私の会社も実質的にはまだまだ
年功序列なので、平均年齢の方はとてもいい給料貰ってます。
それに見合うだけの仕事をしていればいいのですが、
ここでもう一つの事実。
社員数100人に対して外部からの派遣社員が100人。
二人に一人が派遣社員です。
給与体系を支えるための安い労働力というわけです。
この本に書いてあるとおりですね。
若者はなぜ3年で辞めるのか? 年功序列が奪う日本の未来 (光文社新書)
- 作者: 城繁幸
- 出版社/メーカー: 光文社
- 発売日: 2006/09/15
- メディア: 新書
- 購入: 17人 クリック: 447回
- この商品を含むブログ (613件) を見る
技術力も高いし仕事に対するモチベーションも高い。
しかしながらヌルイ環境で育った社員のほうが高い給料を貰っているという事実。
たまに優秀な派遣社員の方から
私の会社で働きたいです、とうれしい言葉をもらいます。
私も出来ない社員とあなたを取り替えたいと思うのですが、
そんなことができるわけでもないので、いつも歯がゆい思いをしています。