TEMTECOMAI ORTHOSTATIC HYPOTENSION

元ダメプログラマで現ダメ中間管理職の駄文

October 2012

野菜多めの餃子を作ろう。
キャベツ、ニラ、ネギ、豚肉、味王、ラード、ニンニクってなあたりを抑えればいいでしょ。
目指すは正嗣風だな。
正嗣で冷凍餃子を買ってきてもいいんだけど、90個 3箱を買っても冷凍庫に入れておけないしね。
焼き餃子、餃子鍋 (つーかオリオン通りのきらく風水餃子) が食べたい。

でもアレだろ? カードはすぐに来ないんだろ?
オータニ カードじゃダメなんだろ?

ココファーム、もちろんローストビーフは持っていくよ。
グレービーソースも忘れずね。

心と前頭葉がすり減っている今の状況では新しいものを考える気力が湧きません・・・
とりあえず去年のようにフレッシュな参加者が増えてくれれば、各自 1〜2品を持ち寄ってもらって何とかなるかなーと。
問題は今後パンをどうしようかってことか。もちろん現地で打ってる焼き立てフランスパンは至極の味なんだけど 2時間待ちとかザラだしね。
前日に業務用スーパーへ行けば何本でも買ってこれるけど、パンにつけるディップの問題もあるわけですわ。
もしオイラの食材からパンが削除されると、何種類も作ってるディップも一緒に削除されるのでものすごく負担が軽減されるわけさ。
それに今年は一緒に移動していた同僚が不参加なので荷物運びの問題もあるわな。
  • 料理は小6のお子ちゃまに運んでもらう。
  • 料理を入れたバッグにはレジャーシートやタオルも入れておく。
  • チェアーは肩に担ぐ
  • テーブルは椅子付を片手で運ぶ。
ここら辺が目いっぱいかな?
自分用のお土産も宅配便で送っちゃえばもう片方の手も使えるかな。
でもテーブル 2台持ちはイヤだなー・・・

フライパンに油を引いて、ちぎったキャベツを入れて焦げ目がチラチラ出るくらいに強火で炒めて塩を軽くふる。
焼きそばのキャベツとか、かつ盛のトンカツ茶漬けのキャベツのような香ばしい香りで美味しい。

口頭で困りごと解決を相談され、微力ながら助けられる範囲で頑張ってみるか、と空いてる時間を使って牛歩の如く進めていたら、実はそれが先方の部門の今期の重要施策だったという話。<br/>
怖い話です。<br/>
<br/>
先方のメンバーたちによる進捗確認会とかに呼び出されてヘコヘコと付いて行ったら 1対4 で私の作業の進捗確認だったという話。<br/>
怖い話です。<br/>
<br/>
対面形式の部屋に入った瞬間に勘がはたらいたので先方と同じ並びに座ってやったさ<br/>
当然ながら話の流れはオレの進捗に始まって、言い訳させられて、問題点を出して。 でもいくら頑張ってもボールは全部オレ側にあるわけさ。 もう全部オレを待っている状態<br/>
てか、オレからのアウトプットがあるまで先方メンバーは完全に手が止まってるっていう苦情なのよ。<br/>
知らんわ、そんな事情。 今はじめて知ったわ。<br/>
人件費で請求させていただきますよ。

EF で SQLite を使うために System.Data.SQLite を使ってみたわけですが、ビューをもとにモデルを生成する際、関数を通した列はモデルに反映されないみたい。
まだ未完成なライブラリだね。

コドモ警察の映画版が 2013年 3月にロードショーwww 公式サイト

自己啓で開発中のプログラムですが、ろくな仕様書も作らないまま手書きメモだけを頼りに作っておりましたところ、土日を遊びほうけて再開してみたら記憶が飛んでいるわけです。
Visual Studio の IDE で記入するタスクってどこに保存されてるんだろうか。
SkyDrive のフォルダーにプロジェクトを保存して別の場所でも開発できるようにしてるんだけど、タスクだけが消えちゃうんだよね。

10月27日の誕生日にプリティーリズム ディアマイフューチャー のオモチャを買ってくれと圧力を受け続けていたのです。<br/>
先日遊びにいったところ 「プリティーリズムじゃなくてサウナ南大門に泊まろ〜」 とか言われたのです。<br/>
オモチャだけなら 4,000円くらいで済むのですが、南大門に泊まるとなると自分とあっちの家族とで大人 2名と子供 3名の料金になってしまうのか、と。<br/>
それをオレが払うことになってしまうのか、と。<br/>
<br/>
とは言え、ここ何回か 「南大門に行こ〜」 てな事を日曜の夜に言われることがあり、南大門へ行くならお昼ぐらいからじゃないとダメだよてな事を言って拒否してたわけで、まぁ今回ぐらいは大目に見るかな〜と OK を伝えたのであります。<br/>
<br/>
「ねぇママ〜、誕生日プレゼントは南大門にお泊りになったからねー」 と 2階にいるママンに伝えるべく階段を駆け上がる。<br/>
<br/>
5分後、階段を下りてきて衝撃の一言<br/>
<br/>
「ねぇ、安くていいから近くの温泉があるホテルに泊まりに行こ〜」<br/>
<br/>
小学 2年生の女の子がこんな事言うわけない。<br/>
確実にママンの希望だろw<br/>
<br/>
<br/>
県内のホテルは紅葉シーズンなので全滅だと予想し、伊藤園グループの安宿で隣県を検索したところ伊香保あたりが良いんじゃないかと。<br/>
<br/>
ちゅーことで伊藤園グループはちょうどズワイガニの食べ放題イベント実施中なのでいつもよりは少し高いけれど、まぁ良しとしますか。<br/>
あ、群馬サファリワールドとかでやる気のない肉食動物を見ることになるのかなぁ。。。

Amazon でダウンロード コンテンツを購入して製品コードを入手。
Origin を起動して製品コードを入力してアクティベート。
さぁいざインストールって言っても何も出てこない。
ちゅーことでヘルプを検索したらコレですわ。



どうしろっちゅーの。

張り切りすぎた。
もう 3時半だし、寝ますよ。
一緒に寝る?

前回の続き。
データベースへの接続文字列は App.config や Web.configに書くわけですが、DB のパスに関しては DataDirectory ってキーワードが使えますわな。
たとえば
<connectionStrings>
    <add name="MyDbEntities" connectionString="Data Source=|DataDirectory|MyDB.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
とか。
これつまり、"|App_Data|" の部分は相対パスで表現した予約変数でして、Web アプリの場合はアプリのルートにある App_Data フォルダーを表し、Windows フォーム アプリの場合は実行ファイルと同じフォルダーを意味する。
ところが SQLite の .NET Framework 用ラッパーで有名な System.Data.SQLite の何が悪いのかわからんけれど、Windows フォーム アプリでは 「テーブルが見つからないよ」 みたいなエラーになるわけです。
Entity Framework で作成したモデル オブジェクトにデータを入れるところまでは問題なし。
コンテキストの SaveChanges() メソッドで DB に書き込もうとしたところでエラーが出て、そのメッセージが 「○○テーブルが見つからない」 的な。
いやいや、テーブルならホラこの通りあるじゃないか、と。
だから最初は全然気づかなかった。
英語のサイトとか調査してて何となく 「Windows フォーム アプリでは絶対パスを書かないとダメ」 みたいな情報にぶちあたったので試してみたらビンゴですわ。
使えねーぞ System.Data.SQLite !!

とりあえずその問題を置いといて開発を進めるため Connection String に実行ファイルのフォルダー パスを書きましたよ。bin\debug フォルダーのパスをね。

んで書き込みテストして、その結果を Visual Studio の中で確認してみようとしたけれどデータが反映されていないじゃないか!!

しばし考えた。
そして答えが出た。
プロジェクト フォルダー内に SQLite のデータベース ファイルがある。
このファイルはコンパイル時に bin\debug フォルダーにコピー出力される。
んで App.config 内の Connection String には C:\hogehoge\...\hogeProject\bin\debug\hoge.db って言う風にデバッグ時の実行ファイルと同じパスを記述してある。
デバッグの中で DB を更新する。これすなわち bin\debug フォルダー内のデータベース ファイルが更新される。
次に IDE のデータツールでデータベース ファイルを開いてテーブルのデータを確認してみる。これすなわち開発時に生成した接続情報を使っているのでプロジェクト フォルダーにあるオリジナルのデータベース ファイルを参照している。
更新されてなくて当たり前じゃないか

すんげー疲れたよ。
そんでオリジナル ファイルへの接続以外に debug フォルダーのデータベース ファイルを開くための接続を作ったりして混乱してきて気持ち悪くなってきたよ。

そう、結局解決策としてどうするか。
これも英語のサイトで見つけたんだけど、App.config に書かないで Connection String を動的に作成する方法。
static で適当なクラスを作り、実行ファイルのフォルダー パスとデータベース ファイルを使って作ったフルパスを System.Data.EntityClient.EntityConnectionStringBuilder なんぞに突っ込む。
さらに System.Data.SqlClient.SqlConnectionStringBuilder なんぞも使う。
そいつをコンテキストのコンストラクターで取り込む、と。
具体的なコードは面倒だから載せないよ。

8月ごろからでしょうか、ちょっと訳あって月度の CSV ファイルを読み取って、ベースになる Excel ファイルをもとに 200程度のファイルを複製して CSV の中身を転記する処理を書くことになったわけです。
今までは別の手法でデータを拾ってきて Excel ファイルに張り付けていたらしいのだけれど、その手法が NG になるので CSV から取得することになりました。

まぁ今までの手法で取得した内容と CSV の内容が微妙に違うってのもあるし、出力する Excel ファイルの書式が担当者の趣味と性格が入り込みすぎて汎用性ゼロって問題もあるのですが、それはおいおい汎用化への説得をしていくとして。

で、プラットフォームをどうしようか、という話になるわけです。
今までは Excel 2003 を使って *.xls を使ってた。 じゃぁこれからはって言うと、まず 3人いる担当者の Office のエディションとバージョンがバラバラなんですね。
1人目は Office 2003 Professional なので Excel 2003 と Access 2003 がある。
2人目は Office 2010 Professional なので Excel 2010 と Access 2010 がある。
3人目は Office 2010 Standard なので Excel 2010 だけ。
Office 2003 はそのうち 2010 に切り替わるとしても、2010 Standard ってのがちとネックかな、と。
CSV の情報を一度加工しなきゃならないし、それを蓄えておいた上で順次読み出ししながら転記しなきゃならんので Access を使おうかってなるわけです。
今回対象としている処理、今後は全データを一気に処理しちゃうようになるので、この際 Access 持ってない人には休んでいただいて、Access が入ってる 2人のうちどちらかの人に処理してもらえば問題ない。

でさっそく Access でゴリゴリと書き出して何とか最低限の処理ができるようになった。ホントは選択したデータだけ出力する機能も付けたかったけど、まずは全データを出力するほうが先。
でテストですよ。
これが終わらねーんだわ。
だんだんと処理スピードが落ちてきて、Excel ファイル 1つ書き出すのに 1秒も掛かってなかったのが 100件目ぐらいになると 10秒ぐらい掛かってるの。
その後もみるみるうちに処理スピードが落ちて行って、まるでアキレスと亀の話ですわ。

あ、まだ前置き。
もう一つの作戦として、Access じゃなくて C# の Windows フォーム アプリで作っちゃえば Access いらないじゃん、と。
こっちは完全に自己啓発ってことで自宅で作業ですわ。
Windows フォームと SQL Server Compact 4.0 あたりでどうだろうか、と。
そんでもってどうせだから Entity Framework のコードファーストで POCO なんかを使ってデータ モデルを作成してみようかなぁなんて趣味も入れちゃうわけですよ。
あらかた読み込み処理が終わったところで気づかされましたよ。

SQL Server Compact データファイルを使った DB アプリって、アプリとデータファイルさえあれば良いって事じゃないんですね。アプリを実行する PC に SQL Server Compact の関連ファイルをインストールしないとダメなんですね。
なんじゃそりゃ。SQL Server エンジンが実行されてない環境でも良いですよっていうメリットはあっても、結局余計なものをインストールしなきゃ使えないってことじゃないですか。
XML ファイルやテキストファイルをデータストアにできるような手軽さまではダメなのね。

つーことで DB は SQLite に決定。これなら DLL だけで済みそう。

そしてようやく本題の Excel 処理。
うちの開発メンバーも、どうしても Excel を扱いたいって場合は泣く泣く VB.NET を使ってたのですが、イロイロと調べていたら、Microsoft の Open XML SDK を使えば COM を使わずに Office 2007 以降のファイル フォーマット (*.xlsx とか) を読み書きできるようになるって言うじゃありませんか。
さっそく調べたのですが、出てくる話題は 「使いづらい」 「やりたい事の数倍の労力が必要」 という悪口ばかり。
ところが Open XML SDK というキーワードと一緒に ClosedXML てキーワードがやたらと出てくる。
詳細はググってもらうとして、さっそく使ってみましたよ。
導入は NuGet を使って楽ちん。
まるで COM を使って Excel を扱っているかのような滑らかさ。
ここ数年の開発で一番感動したかもしれない。
既存ファイルを開く。新規ファイルを作成する。名前を付けて保存する。上書き保存する。シートをコピー する。シートの名前を変える。セルに値を書き込む。セルの値を読み取る。
最低限これだけできれば今回の開発には十分です。

ということで開発も絶好調。
POCO のモデル クラスとデータ コンテキスト クラス、業務処理を行うクラス、CSV を読み込んでモデル データを生成するクラス、Excel を読み込んでモデル データを生成するクラス、Excel に書き出すクラス、ファイル関連のヘルパークラス、時間計算のヘルパー クラスなどを粛々と進めている最中でございます。

次回、「SQLite の Connection String に "DataDirectory" のキーワードが使えないじゃないか」 の巻き。

職場で世間話をする中で、同じ会社の誰かを話題にすることはよくあります。
その人の面白エピソードだったり、性格の話だったり、時には陰口のようなマイナスの話題もあるでしょう。
同じ部門でちょっとクセのある、物凄く上位の先輩へ対する陰口の話題を新人が切り出したらどうだろうか。
周りの諸先輩は一緒に話題を盛り上げるのだろうか。
それともたしなめるのだろうか。
(時と場所にもよると思うけれど)

オレに言わせれば十年早い。いや、その新人を知っているから言えるのかもしれないけれど、少なくとも仕事つながりの人の悪い面を言い出すような経年でも経験でも立場でもないと思う。

もし職場に若い社員が配属されてきたら、もしその社員が部門の中で最も若く、最も職歴が短かかったら。
仕事を教えて早く任せられるようにするのも大事だし、早く肩を並べて仕事ができるように育てるのも大事。
新卒者を採用する経験がない部署だと "人間を育てる" って事が欠落してるんじゃないだろうか。
詳しくは言えないが、彼らは自分たちの仕事にも誇りを持てなくなってきてるのかもしれない。

オレは無駄な仕事なんてないと思ってる。
もし無駄だと感じたら改善すればいいだけの話。
アサインされた仕事をどうしても自分の仕事として消化できないのなら嘘八百並び立ててその仕事の無駄さ加減を叫んでみればいいと思う。
そして自分が何をやりたいのか声に出せばいいと思う。
そういう事だって可能な部署だと思うよ。

ところでその新人、まだ間に合うだろうか・・・
周りを見て様子をうかがいながら場の雰囲気をつかんできてこの結果だからなぁ・・・

"曲がりなりにも箸" という名前の箸、錫 100% でできていて食べ物をつかむときに曲がりやすいので、食べ物を取りづらくなってダイエットに効果的ってなことをテレビで言ってたわけだが、メーカーのサイトにはそんなことは一言も書いてない。
つーかそうなったら刺し箸しちゃうだろ。

週末にアポストで注文した物のうち iPod Classic だけが届いた。
さすがに Lightning - 30ピンアダプタは届かなかったけど、SB オンライン ショップで予約した iPhone 5 16白は動く気配なしなのでよしとする。
てか先週の金曜に SB から 「いつ入荷するかわかんねーから問い合わせするな」 のメールが一斉発信されたけど本日のお昼に 32 と 64 の白黒祭りが発生。気づけば 16白だけがまだ予約 2日目分が入荷しない事態に。
オイラは 17日 11:14 予約なので今月中に入手できるか微妙だね。

んでさっき iTunes に接続して同期完了。
このあいだボッコレた iPod が 40GB で、20年ぐらいかけてためた CD 全部が入っちゃってるってのに Classic は 160GB、動画入れるつもりもないので使い切れる容量じゃないな。

あとはヨドバシで注文したアルパインへの接続アダプターが届けば元通り。
まぁこいつが無くてもカーステに接続できるけど、音楽聞きながら充電できないってのが精神衛生上よろしくない。
あと数日の辛抱か。

↑このページのトップヘ