C# で登録済みDSNを取得する
using (Microsoft.Win32.RegistryKey odbcDriversKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources")) { if (odbcDriversKey != null) { foreach(string dns in odbcDriversKey.GetValueNames()) { // some process } } }
VSTO(Excel)でアクティブなセルが含まれている範囲を選択する
リボンに追加したボタンを押した際、アクティブセルの含まれる範囲を選択状態にする。
using Excel = Microsoft.Office.Interop.Excel; // 中略 private void button_Click(object sender, RibbonControlEventArgs e) { Excel.Window window = e.Control.Context; Excel.Range activeCell = window.Application.ActiveCell; Excel.Range currentRegion = activeCell.CurrentRegion; currentRegion.Select(); }
Play2+Scalaでのバリデーションについて:verifyingを一度に複数利用する際の注意
verifyingを利用する上で注意すべきこと
先日verifyingを一度に複数利用できることを紹介しました。
記事を作成した時点では気がついていなかったのですが以下の様な場合、注意が必要です。
val form = (id:String) => Form( tuple( "old" -> nonEmptyText, "new" -> nonEmptyText, "confirm" -> nonEmptyText ) verifying("新しいパスワードと確認用パスワードが一致していません", result => result match { case (old,newPass,confirm) => newPass == confirm }) verifying("古いパスワードと新しいパスワードが同じです",result => result match { case (old,newPass,confirm) => old != newPass }) verifying ("パスワードの更新に失敗しました",result => result match { case (old,newPass,confirm) => User.updatePassword(id,old,newPass) }) )
この例ではユーザーのパスワードの更新を行おうとしています。
ただしこの例では期待通りの動作はしません
もしこのままであった場合、3つの要素に対するバリデーションのどこかでエラーがあった場合でもパスワードが更新されてしまいます
つまりどこかでエラーがあった場合でもエラーがあった場所で評価をやめるわけではなく、すべて評価を行うというわけです。
この問題を改善すると以下のようになります。
val form = (id:String) => Form( tuple( "old" -> nonEmptyText, "new" -> nonEmptyText, "confirm" -> nonEmptyText ) verifying("新しいパスワードと確認用パスワードが一致していません", result => result match { case (old,newPass,confirm) => newPass == confirm }) verifying("古いパスワードと新しいパスワードが同じです",result => result match { case (old,newPass,confirm) => old != newPass }) verifying ("パスワードの更新に失敗しました",result => result match { case (old,newPass,confirm) if( old != newPass && newPass == confirm) => User.updatePassword(id,old,newPass) case (old,newPass,confirm) => false }) )
これで期待通りの動作をするようになります。
ただこれだと最後のバリデーションがあまりかっこよく無いのが…
Scala Conference 2013/Scala Hack-a-thonに参加して来ました
Scala Conference 2013
ScalaConference
ScalaConference2013では以下のプログラムを聞かせて頂きました。
- Up up and Out: Scaling Software with Akka
- Akka を用いたデータストリーム処理・解析プラットフォーム
- BRMS開発でのScala利用事例
- ランチタイムLT大会
- リクルーティングセッション
- Effective Actors
- オブジェクト指向から視る "Better Java" としての Scala
- 使ってわかったScalaのここがダメ!Play2によるシステム開発事例
- Play Framework - The modern web framework that packs a punch
技術的なことなどは他の方がまとめてくださると思うので参加者が少なかったリクルーティングセッションの話をメインに
箇条書きで少々見づらいかもしれませんがご勘弁を…
株式会社アドヴァンストソフトエンジニアリング様
株式会社ドワンゴ様
- リストラをしているのでは?との噂があったがそれは誤解
- 期間雇用していた方の多くは雇用の終了
- 現在はほぼ100%社員の内製
- 以前はエンジニアの働きやすい会社というのが少なかったが最近は増えてきている
- 現在技術的負債が溜まってしまっているせいでちょっと困ってる
- BtoCという形の上ではしょうがなく負債が溜まってしまうことがあった
- 技術的負債生まれたのであればちゃんと解消する
- そう入っても仕事はいっちゃうんじゃないの?
- そういう時はサポート室が間に割って入って負債を返済させる
- コードがかけることが第一
- 選考の際にはGithubを持っているとなおよし
エムスリー株式会社様
- 日本国内の医師の80%が加入しているポータルサイトを運営している
- インターネットを活用しより健康的で経済的な社会へ
- GithubにScala関連のライブラリを提供
- Play2.0などを利用
株式会社ENRAPT様
ファンコミュニケーションズ株式会社様
Demand Side Science 株式会社様
- DSPを作っている
- 2013/01から活動開始
- 技術者は社長を含めて9名
- DSPとは端的に言ってディスプレイ広告を出したい人向けの広告
- 大規模な高奥主や広告代理店向け
- DSPが目指すもの
- でかい
- はやい
- つよい
- Scalaに決めたのは面白そうだったから
- LLに比べてパフォーマンスが期待できる
- Scala経験不問でデマンドサイドをサイエンスしていける仲間を募集中
このセッションで一番気になったのはドワンゴ様のサポート室
ニコニコ動画ではどうしても素早いリリースが必要であり、技術的負債が蓄積しやすい環境にある
それを返済しなくてはならないのだが次々に仕事を頼まれてしまう…
そういう時、サポート室に相談し一定期間技術的負債を返済する期間を設け新しいタスクをシャットアウトしてくれるというシステムらしい
ファンコミュニケーションズ様の毎月1万円分技術書購入、セミナーへの参加費用を会社が負担してくれるというのが素直に羨ましい
このとき購入した技術書はあくまで個人の所有物で退職の際などにも返却の必要はないだとか
Scala Hack-a-thon
いまいち作りたいものが思い浮かばなかったためNinety-Nine Scala ProblemsS-99: Ninety-Nine Scala Problemsを解いていました
お昼からはちょっとしたLTの開始
Jamie氏からスタックトレース等についての話がありました
こちらは当日のTwitterなどを追うと様子がわかるかと思います。
途中で気になったのが職場の人間にScalaを紹介したいのですが…という話
Javaを利用している現場にScalaを導入したいのだがどうやって紹介したものか?
そこで参加者のみなさんから紹介スライドにいろいろアドバイスが欲しいといった内容
スライドはJavaとScalaはこんなに文法がにているんですよと言った内容
会場からは現場の人々はJavaをある程度わかっているのだから、
そんば部分を紹介するよりはScalaにしかできないこと、Javaなら大変だけどScalaなら簡単にできることを推したほうが良いのでは?といった意見が
個人的に好きになんでも作っていいといわれると何作ればよいものかと考えこんで手が止まってしまうので
次回参加する際には先になにかネタを考えていったほうがいいなーとちょっと後悔
PlayframeworkでSORMを使う
Playframework2.1でSORMIntroduction - SORMを利用する際sbtで詰まったので解決法をメモ程度に
Build.scala
val appDependencies = Seq( // Add your project dependencies here, jdbc, anorm, "com.github.nikita-volkov" % "sorm" % "0.3.5" exclude("com.google.guava", "guava-base") exclude("org.slf4j", "slf4j-api") )
excludeを利用するとsormが利用しようとしているライブラリを無視?できるようです。
guava-baseとslf4j-apiはplayでははじめから入っているのでここでは無視するだけで大丈夫です。