DataGridのSelectedItemsを任意のListにキャストする
DataGridのSelectedItemsは、「System.Windows.Controls.SelectedItemCollection 」というクラスに値が保持されます。バインドされるオブジェクトが何が来るかわからないので、型はobject。
これを任意の型のListにキャストする場合はこう書く。
this.DataGrid.SelectedItems.Cast<Hoge>().ToList();
こうすると、List
ITコンサルティングってやる意味あるのかな
微妙にそんな事を感じてしまった今日この頃。意味があるというか、意義を見出すのが本当に難しいなぁと。
企業がITに期待することなんて「売上UP」か「生産性向上」のどちらかでしかない。で、大変残念ながら、導入するだけで売上UPするITソリューションなんて、どこにも無い。
ビジネスモデルやそれを支えるビジネスプロセス、更には営業戦略やマーケティング等の総合的な取り組みがあって、初めて売上をUPするための対策が取れる。単価を上げるのか、顧客を増やすのか、商材を増やすのか、購入回数を増やすのかを決めた上で、ITを活用するノウハウを貯めて成功する確率を高めていくしか無い。差別化を図るのは、目に見えない所であるべきだ。
生産性向上というのは「今までやっていることをもっと速く出来るようになること」ではなく「手を動かさなくてもいいようにすること」が達成できていないと意味がない。そのためには、企業内に流れる情報の集約と集計がなされていなければ絶対にできない。トラッキングできないデータは改善できないし、業務システムの活用意義ってドラッキング。重要なのは、トラッキングする視点。人の行動なのか、モノの動きなのか、お金の動きなのかという中で、何をトラッキングできれば、手を動かす必要なく仕事上の判断や意思決定を下すことが出来るのか、改善できるのかと言うのを考え無くてはならない。
・・・こういう事を考えるのが、ITコンサルティングというものだとすれば、うーん、これってITの話なんだけって思っちゃった。経営の話だよねぇ・・・。
ITコンサルティングというものが意味があるとすれば、上記の前提が腹落ちしていないと意味がないんじゃないか、意義が見いだせないんじゃないかなと思う所があって、表題の一文に至ったというわけ。ITの使い方を教えてくれっていうITコンサルティング、多分いらねーわ。
今みたいな話をまとめて、「誰でも出来る、IT戦略構築フレームワーク」を作ろうかなって思っています。多分、無いはずなんだよね。こういうの。40歳になる時までに作り上げたいな。現在、38歳と10ヶ月。14ヶ月かけて、トライアンドエラーよ。
SQLAlchemyの結合条件の制御
モデル定義で外部キー定義する場合は、こんな感じでJOINできる。Flask-SQLAlchemyの場合です。
Order.query.join(OrderDetail, Customer, Destination, Item)
こんな感じのSQLが生成される。
FROM orders INNER JOIN order_detail ON order.id = order_detail.order_id INNER JOIN customer ON customer.id = order.customer_id INNER JOIN destination ON destination.customer_id = customer.id INNER JOIN items ON item.id = order_detail.item_id
今回はこのCustomerが曲者です。
CustomerはOrderの外部キーでもあるし、Destinationの外部キーでもあるという構成なので、この書き方をしてしまうと結合順が優先されて、顧客と納品先が結合されます。そうすると、顧客に対して納品先がN件ある場合、注文明細がN倍に膨れ上がって表示されてしまいます。
どうするかというと、結合条件をJOIN関数の第2引数にくれてやります。
Order.query.join(Customer, OrderDetail, Item).\ join(Destination, Destination.id == Order.destination_id)
こういうSQLに変わりました。
FROM orders INNER JOIN order_detail ON order.id = order_detail.order_id INNER JOIN customer ON customer.id = order.customer_id INNER JOIN items ON item.id = order_detail.item_id INNER JOIN destination ON destination_id = Order.id
はー、まじでAlchemyすごく便利。
Python3でZIP圧縮する場合の文字化け対策
結論
頼む!UTF8がわかるアーカイバソフト使ってくれ!!
ピンズドなエントリ。やはり人類はエクスプローラーによるZIP圧縮や解凍に困っていた。Windows7でUTF8がわからない場合に辛い。パッチがMSから公開されているが社内のセキュリティポリシーがどうだのかんなので、手を出せないという。Windows10ならUTF8がわかるようになっている。
ASCII文字でエンコード出来ない文字列があった瞬間に、強制的にUTF8でエンコードしている。いやね、そりゃそうなんだよ。全世界で使うんだから。
PythonのZipファイルエンコードの仕様をモンキーパッチを当てて逃げるというやり方しかないのが、Pythonで日本語ファイルを含むZipファイルを作る時の辛み。