読者です 読者をやめる 読者になる 読者になる

長岡IT開発者勉強会(NDS)の第51回勉強会に参加してきた #nds51

nagaoka.techtalk.jp


参加して、お題には沿っていなかったと思いますが、ちょっと背伸びしてフロントエンド的な話をさせていただきました。


他のjsフレームワークを知らないので、それらに比べてVue.jsのここがイイ!というのを伝えられなかったのが心残りですが、jQuery+Hogan.jsを使い続けるに比べたら楽になるのはお伝えできた気がします。*1

単一ファイルコンポーネントは自分的にはしっくりくるんですよね。フロントエンド開発に秩序をもたらしてくれる気がしています。責務大好き。

Neo4jをビジネス的に使えないかなぁと思った回でした。知らんことばっかり。

あと、懇親会で振る舞われたパンがおいしかったです。家で作れたら良いですよねぇ。
f:id:nemuzuka:20170325183423j:plain

え、長岡で教えてくれるところがあるの!?行かなきゃ!!

f:id:nemuzuka:20170325183448j:plain

*1:まぁ、元々ReactとかAngularを使ってる人からしたら今更感はあるとは思いますけど...

長岡IT開発者勉強会(NDS)の第50回勉強会に参加してきた #nds50

f:id:nemuzuka:20161212164102p:plain
12/10に長岡市で、長岡IT開発者勉強会(NDS)が開催されました。
NDSとは、

新潟県長岡市のIT系開発者が、自主的に勉強会を開催するために2008年11月に結成されたグループです。
長岡市での勉強会の開催や、議論をを主な活動とします。

情報処理技術に関するものであれば、プログラミング技術、IT最新情報、開発手法、ITマネージメント、スーツネタなど幅広い範囲での学習を目指します。

とあるように、情報処理技術に絡んでいれば何でもありの勉強会です。
それが50回目の開催でした。おめでとうございます。
@civicさんの地道な活動と人徳は見習うトコロが多いです。
私も半分めくらいから参加しだしているので、賑やかしにはなっているかな、と思うのですが...



第50回勉強会(2016/12/10) - 長岡 IT開発者 勉強会(NDS)

セッション内容を見て頂ければわかると思うのですが、都内の勉強会とは少し異なり、1つの勉強会の中で幅広い分野の発表がされています。
地方/都内とか関係なく勉強会の質は上げられるんだ、と気づけて、有意義な時間を過ごせました。
@civicさんの地道な活動と人徳は見習うトコロが多いです(2回目)。

ところでみなさんは、勉強会に何を求めてきていますか?

もちろん、勉強会の後の懇親会でお話をするということも楽しいです。
駐車場の出庫時間の制限があるのに気付かず、ある方に試練を与えてしまうとか、程々にしておかないと友人を無くすことになるかもしれませんが...*1

ともあれ、勉強会に参加する理由は大きく分けて2つあると思います。

自分の「ナカマ」探し

行ってみたい勉強会は、技術的に趣味や興味の合う人を見つけたいと思うことがきっかけではないでしょうか。
内容に興味があるとしても、「どんな人が発表するんだろう」も気になりませんか?

趣味や興味が合うことについて会話/相談できる「仲間」を探す場として「勉強会」に参加する人も多いと思います。

客観的な自己評価

発表したり、聞くことで、

  • 自分はこんなこと知ってる / やってる
  • 他の人はこんな技術 / 方法でやってるのか。自分の所でも活かせそうだ
  • ネットの記事だけだとピンと無かったけど、実際に使っている人の話を聞いて合点がいった!

「俺スゴくない?褒めて!」のように承認要求を満たすことから「自分が知らないことの気づき」まで、得ることができます。
ともすれば、所属する会社にとっての「当たり前」が同業他社では「そんなことしない」ことかもしれないので、自分を「客観的に評価できる」場があるのは、人として成長できる「伸びしろ」を作り出すのに良いことだと思います。
自社でエースだったとしても、他でエースになれるのか、気になりませんか?上には上がいるもんです(自戒)

勉強会は人に会いに行くもので、NDSはアットホームで明るい勉強会です

このように、勉強会は自分や他人を知る為に良いコミュニティなのです。

  • ある分野について社内に相談できる人がいない場合、「これで本当に正しいか」判断しづらく、悶々と悩む
  • 「会社からの評価が絶対」の場合、自分が評価されないと自信も無くなり、逃げ道も無くなり追い込まれる
  • 社内に「自分よりできる奴がいない」と思った時点で自己学習も疎かになり、後から追い上げてきた若手の有意義な提案も「年長者の老害パワー」でねじ伏せてしまう


そんなことにならない為に、

勉強会で社外の人と繋がっておく

選択は、人生の中でアリだと思います。


ただ、コミュニティ内でそんな「都合の良い」関係を1回の参加で構築できるか、というと難しいのは皆さんご存知のとおりだと思います*2
なので、何度か足を運んで、発表したり参加者の方たちと話してみるのもいいんじゃないかな、と思います。

新潟のエンジニアに楽しい場を提供してくれるコミュニティ「長岡IT開発者勉強会(NDS)」。
1つの開発言語、フレームワークに特化した勉強会とはまたちょっと違うので、(主に地理的に)気軽に参加できる方には1回行ってみることをオススメします。
それでは次の51回目でもお会いしましょう。

*1:その節はご迷惑をおかけしました

*2:気になっているあの人に何も話もせずに自分の思いを察してもらえる、というのはラノベの主人公くらいですよね

iPhone7Plusの落下防止の為にネックストラップを購入しました

ずっとiPhone5sを使っていたのですが、満を持してiPhone7に機種変しました。
カメラ性能が良いとの触れ込みで、特に写真を撮ったりインスタをするわけでもないのに勢いでPlusにしてしまいました。



わくわくして開封の儀を済ませたのですが、

f:id:nemuzuka:20160924133959j:plain


...大きいですね。

わかってはいましたけど、2まわりくらい大きい。
5sの頃はズボンのポケットに収まってくれていたのですが、7Plusは「ここにいるよ」って主張してきます。

ズボンに入れっぱなしにしておくと、変形しそうだし、かと言って胸ポケットに入れてもすぐ落ちるだろうし...ということで、ネックストラップを購入することにしました。

カバー込みの奴もいくつかありますが、既にカバーは購入済み


だったので、単独で付けられる奴無いかな、ということで、探してみた所、ありました。


Simplism Lightningコネクター用ネックストラップ ホワイト  TR-LSI-WT

Simplism Lightningコネクター用ネックストラップ ホワイト TR-LSI-WT



Lightningコネクタに差し込むタイプで、実際にはこんな感じになります。
f:id:nemuzuka:20160924135418j:plain


コネクタの差し込み方にちょっとコツ?が必要で、購入した直後は差し込んだ後のLockが固く、
「iPhone7は対応してないのかな」とか「もっと力をいれないと駄目なの?」と思うくらいチャレンジしたのですが、
1回Lock→解除という感じで素振りをした後、iPhoneに差し込むとすんなりLockできました。
それまでのおっかなびっくりやってた時間は何だったのか...。
出っ張ってる金属部分を手でしまってから差し込もうとしたのが良くなかったのでしょうね。

ネックストラップもつきましたが、ぶら下げ続けるのも落下リスクがあるので、基本は胸ポケットに入れています。
iPhoneの重みで服が引っ張られる感じは慣れるかな...。

Niigata.NET 2015-10 に参加してきた #ngtnet

新潟でも.NETコミュニティ!ということで、参加してきました。
(@AILightタクシーがこれのセッションやるのと等価交換だとはその時は思いもしませんでした...)

ngtnet.doorkeeper.jp


新潟の開発やってらっしゃる方の知り合いが少ないので、新潟での.NETのニーズがどれだけあるのかわかりませんが、集客にはとっても苦労されていた感じです。自分が参加する / しないと判断するなら簡単ですけど、ある程度の人数を集めるって、大変ですよね。
蓋を開けてみると長岡だけでなく、新潟市柏崎市から参加されている方もいらして、幅広く使われているのかなぁ、という印象でした。
私はWebしかやっていないのであんまりMS系の技術に特化して...という機会がなかったのですが、新潟で昔からやってらっしゃる会社さんはWindowsのクライアントアプリをパッケージ化して販売したりされているんでしょうね。いつもとは違う参加者の方を拝見できて、楽しかったです。あ、あと女子率が高かった。

テックトーク

業務システム開発を支える.NET技術(@masaru_b_cl)

今回の主催のひとり、まさるさんがトップバッター。胃がいたくなる大規模開発での.NET技術の活用話でした。

複数拠点(きっと会社も異なる)で...という開発は経験が殆ど無いのですが、大変だなぁという印象があります。
NuGetで機能単位をモジュール化、というのは良いですね。

codezine.jp

MSBuildの話も聞けました。gradleやmvnみたいなやつですよね。開発前にビルドの仕組みのコンセンサスをとっておくとか「当たり前」だと思っても相手がそうでないことも多いんでしょうね。

エンドの間にSI屋さんがたくさんとか、開発レベルでも横に会社がたくさんあったりするとそれだけで調整が面倒そうですよね。できれば関わりたくない領域ですw
できない奴には何もさせない仕組みがあれば良いのにね。

Windows10体験記 ― これ、どうやって動いてるの?(@84taka0310)

運営されていた方です。忙しそうだったのでちゃんと挨拶できませんでした。

Windows10のお話でした。アプリの検証用にWin10 tabletを買いましたけど、個人的には使いやすい気がします。
(tabletモードでしか使ってませんけどね...)

ヘルプデスクやってると操作を電話で伝えるの難しいですよね。
ショートカット覚えれば楽なんでしょうけど、普通の人は、PCを使いこなすのが仕事じゃないですからね。
僕がアプリ作る時はできるだけ初見でわかるようにしたいと思ってます。

あるアプリが動いてるのか止まってるのかわからない時、リソースマネージャーで他のプロセスが悪さしてないか確認できるってのはいいこと聞きました。


アプリしか作れないけどAzureに触ってみた(@nemuzuka)

僕のタクシー代セッションです。

個人的には社会人2年目くらいまでMFCで何か作ってたなぁという程度の知識でして、付け焼き刃の知識で皆さんの前でお話してもなぁ...という感じでした。
Azureの話でも良さそうだったのでVPSで動いている奴を時間をかけずにAzureに移動してみよう、という話をしました。その為にBizSpark申し込みしたと言っても過言ではありませんw

Azure自体は思いの外さっくり動いてしまったので内部ネットワークまで手を出すことができました。ネットワーク素人にはAWSよりわかりやすい気がしました。でも、無料枠が少ない。

大人の基礎C#(@AILight)

今回主催の石野さんです。

C#の歩みの話を散りばめてくれていましたが、自分の知ってる開発言語に置き換えて聞いてみると、結構C#が先駆けて入れてるのね、ってのはわかりました。
後方互換を維持しながらってのは大変そうですけど。

僕がC#の理解力を上げればもっと楽しめたんでしょうけどね。

LT

いろんな方の話を聞けたのですが、5分に収めるのは厳しい内容ばかりで。私もっと短くしても良かったじゃん、という感じでした。ちゃんと聞きたかった人多かった気がします。

詳細は、 togetter.com

感想

現役、元MVPの方が大勢来られる中でどんな空気なのかわからなかったのですが、結構楽しめました。
日頃使ってる開発言語やツールは異なりますが、developerであることには変わりありませんもんね。

欲を言えば、もっとみんなでワイワイ言えた方がもっと楽しめたんじゃないかな、とも思います。
ほら、新潟の人ってシャイじゃないですか。


あと、今回MSさんからノベリティがありました。
じゃんけんでWindows本も頂いてしまいました!

f:id:nemuzuka:20151011091253j:plain

さすがMSさん、太っ腹!!あとBizSparkの無料枠を増やしてくれれば嬉しいです!!

【読了】はじめよう!要件定義 -ビギナーからベテランまで

はじめよう!  要件定義 ~ビギナーからベテランまで

はじめよう! 要件定義 ~ビギナーからベテランまで

一気に読みきりました。
要件定義って突き詰めればここに書いてあることで十分だと思います。
でも、簡単そうに見えて実際にこれだけのことができている所は非常に少ないと思います。

難しい言葉や難解な図で書かれていて、誰もゴールを共有できないようなドキュメントを「要件定義書」としてありがたがるよりも、最低限これを満たさないと、要件定義が「完了した」としてはいけないと思うのです。
結局、問題を先送りしていまいますし。後でやらなきゃいけなくて、手戻りを少なくしたいんだったら、今のうちに詰めて合意する必要があると思うんです。

これ、初めて要件定義をやる人には読んでほしい良書です。
やさしく、要件定義の本質をついてます。

僕は、システム開発

  • 開発言語やフレームワークに習熟する
  • テストをしっかりやる(テストコードをしっかり書く)

だけで解決するとは思っていません。

実装や開発言語も大事ですけど、それが物事を全て解決するとは思っていなくて、大体失敗するプロジェクトって要件があいまいだったり、仕様の考慮漏れだったり無視できない手戻りが多発して時間が足りなくて...ということだと思っています。
開発言語や開発手法に活路を見出そうとしても解決しないことの方が多いのではないでしょうか?
*1

「要件定義はできていて、あとは設計だけ」という言葉に泣かされたことのある人は読んでみてください。
ここに書いてあることが漏れている場合、リスクレベルを上げた方が良いでしょう。
直接要件定義に関わっていない立場の人も、ただ言われた通りにコードを書けばいいと思うのではなく、この辺りにも興味を持ってもらえるとスキルの幅が上がる筈です。
実装できて要件定義のツボを押さえている人、圧倒的に少ない気がします。実装技術だけでシステム開発は楽になりませんし、売上に貢献するのは難しいですよ...。


ユーザ企業側でベンダーに発注する立場の方も読んでいただければ、
「提出してもらったシステム開発の見積もりに幅があってよくわからないから一番安い所に決めちゃったけどできあがったものがなんじゃこりゃー」
ってことになりくくなると思います。*2


この本に書かれていることがシステムに関わる人の共通の認識になることを祈って。

*1:もちろん、早く動くものを見せる、とか手戻りがあっても対応できる時間を多く確保するために開発言語や開発手法は重要ではありますが

*2:自分たちだけでできないのであればできる会社と組んで要件定義すべきです

Tomcat + DynamoDBでSesison管理を任せてみる

JavaTomcatなWebアプリケーションを作っている時に、Sessionの情報をどう管理しようか、というのが問題になります。
認証済み状態であることをSession上に設定しておき、認証されていないリクエストが来た時にログイン画面に遷移させる、というアプリケーションは多いと思います。
Tomcatのメモリ上にSession情報を配置するのはいいけど、もし、そのTomcatが死んでしまった時、Session情報も無くなってしまいます。
別のTomcatインスタンスにリクエストが飛ばされた時でもユーザに影響が無いようにSession情報を引き継ぎたい、という要望が少なくありません。


イマドキのシステムならDynamoDBで管理なのでしょうか。AWSもそんな事言ってます。

Manage Tomcat Session State with DynamoDB - AWS SDK for Java

少し前の記事ですが、クラスメソッドさんでも取り上げてます。
Amazon DynamoDBによるTomcatセッション永続化とフェイルオーバー | Developers.IO


確かにDynamoDBならEC2インスタンスを使っていなくてもアクセスできるので幅広いシステムに適応できそうです。
また、Tomcatの設定ファイルを変更するだけで、アプリケーション側では特に意識することは無さそうです。

ということで導入してみようと思ったのですが、思いの外ハマったので備忘録を残しておきます。

タイムアウトでないSessionが多数存在する場合、Writeのしきい値を軽く超える

数十ユーザがログイン状態なだけで、DynamoDBに関するエラーログが見られるようになりました。どうも書き込み上限を超えてしまった模様。えっ、早くね?

明らかに有効なSessionのはずなのに存在しないと判断される

また、最後にアクセスしてから明らかにSessionタイムアウトの時間を超えていないにも関わらずログイン画面へ強制遷移されることも発生しました。
DynamoDBと連携するようにしてからです。連携しないようにすると問題は全く起きません。




こんな使い物にならないものをAmazonさんが使えというわけもない、設定方法が悪いんだろうということでいろいろ調査をしてみることにしました。


maxIdleBackupの値を見直す

maxIdleBackupの値を設定しないようにしていました。この期間を超えたものはSessionが最後にアクセスされてからバックアップされる時間です。

今回のSession管理の方針としては、

ということにして、Tomcatが停止した時のSession情報の退避先としてDynamoDBを使用することにしているので、ぶっちゃけた話、稼働している間はDynamoDBに更新する必要はありません。
ということで、maxIdleBackupの値をSessionタイムアウトの時間に設定して、Tomcatが停止しない限りDynamoDBに書き込まないようにしました。

これでめでたしめでたし…とはいかなかった

上記設定を行うことで、

あるTomcatが停止→DynamoDBに書かれる→ロードバランサーが別のTomcatインスタンスにアクセス→メモリ上にSessionが無いのでDynamoDBに問い合わせ、メモリ上に展開→別Tomcatに振り分けられても問題なくアクセス可能

という当初の図式が完成しました。良かった良かった。

ですが、しばらくアクセスしていると、まだ明らかに有効なSessionのはずなのに存在しないと判断されてしまいます。これはおかしい。

設定上だけの問題ではないということで、ライブラリを見てみることにしました。問題は2つ。

一度DynamoDBにputされてしまうとDynamoDBの値でメモリ上のSessionが書き換えられてしまう

DynamoDBにputされたSessionに対して、値の同期をとる処理が走るが、DynamoDBの値でメモリ上のSessionを書き換える処理も走ってしまう。

1台のTomcatでSession情報をDynamoDBに保存する設定をして、簡単なJSPを使って実験してみました。
(AmazonDynamoDBSessionManagerForTomcat-1.0.1.jarを使用しています)

f:id:nemuzuka:20141223145639p:plain




更新する度にカウンタが上がります。
f:id:nemuzuka:20141223145650p:plain
ですが、しばらく繰り返していると…



f:id:nemuzuka:20141223145704p:plain
!?


カウンタが巻き戻っています。これはいけません。
ライブラリが一定時間アクセスされていないSessionをDynamoDBにputする処理の他に、定期的にDynamoDBに登録された情報をSessionに置き換えているようです。
今回のSessionの管理方針としては、Sessionの最新データはTomcat側で持つ、ですからこの処理は不要です。

DynamoDBからgetしてきた時のSessionの最終更新日時の値が不正

DynamoDBの値を元に生成したSessionの情報の最終更新日時の初期値が、「Sessionの生成日時」になっていました。
これだと、別のTomcatに振り分けられた時に生成日時からの経過時間がSessionタイムアウトの時間を超えた場合にSessionタイムアウトと判定されてしまいます。これもマズイ。DynamoDBに設定するのを、Sessionの最終更新日時に変更しました。



というわけで、本当にこれを運用しているところがあるのか?という疑問を持ちながらですが、TomcatのSession管理の仕組みを構築することができました。
ソースも公開しておきますが、根本的に使い方が間違っているとか無いですかね?心配になってきました。
悪いことは言わないからElastiCache使え、ってことでしょうか。
(そもそもTomcatを使うなんて…ということでしょうか)
他所様のシステムの設定情報を拝見したいものです。


どちらにせよ、有効なSessionデータが多数存在する時にTomcatが停止する際に、書き込み上限を超える可能性、というのはあるのですが
DynamoDBにおけるスループット超過対策 〜 Fallback-Queueingパターン | Developers.IO
を組み込んでおけばいいのかな、とも思います。*1

同じようなことで時間を取られている方の助けになれば幸いです。

*1:本当にクラスメソッドさんにはお世話になっております

第37回 長岡IT開発者勉強会に参加してきた #nds37

第37回勉強会(2014/08/09) - 長岡 IT開発者 勉強会(NDS)


すごく久しぶりに参加しました。
テーマは並列・並行処理、ということでしたが、いろんな言語でいろんな方法があるのよねぇ、と、とても勉強になりました。
Webアプリの場合、そんなに気にしなくてもAPサーバ側で打ちとってくれたり、各Threadの同期とかはRDBMSでやっちゃうので言語で頑張ることは意識しないのですが、バッチ処理とかで並列処理することあるしなーと思って聞いてました。

1つの言語に固執するのも良くないなぁ、と思いはじめておりますが...。JSON返せればいいと思ってるので、サーバサイドはまだJavaでいいや。

老害感いっぱいですが、LTもしてみました。

当面はビジネスに絡めて考えることに時間を割こう、と思いました。