青色LED的なお仕事のおはなし
中村修二教授、日亜化学工業から面会断られ「拒否された。どうしようもない」
あまり詳しい事情を知らない部外者が口出しするのはアレですけど、この方は抜群に優秀で、お金に厳しいプロフェッショナルなのかもしれませんが、人望はないのではないかなという気がします。
会社との争いの中でも身内から擁護する声がないように思います。
社内での成果をプロジェクトリーダーが全ては俺の功績だ!なんて言い出したら、メンバーからどういう目で見られるかは知れています。
そこに価値を見出すタイプではなさそうだから、別に良いのかもしれませんが。。
プロ野球選手のような金銭的にシビアなプロフェッショナルであっても、例えば引退した稲葉選手のような面倒見がよく人望のある選手は例え外様であっても大事にされ、抜群の実績があっても中村紀洋選手は周囲から敬意を払われないし、大事にもされない。
そういった意味では、この方は実力のみで評価される自分にあった環境をみつけられたので、幸せなのだろう。
大事なのはいずれの環境が正しいかということよりも、自分にあった環境をみつけることなのだと思います。
あとは歳を取ってくると過去を清算してチャラにしたいという想いが湧いてくるらしいですが、当時相当の覚悟を持って会社(と仲間)を訴えたのだろうから、いまさら甘えても誰も赦してはくれないと思う。
当時の覚悟を墓場まで持っていくべきじゃないでしょうか。
個人的には能力云々は関係なしに周りの人を大事にしたいし、僕も周りの人から大事にされたいなと思います。
キレイ事ですか、そうですか。。
カーセンサーのAndroidアプリ
画面描画だけでなく、サービスとして登録していた条件登録や新着通知もアプリ側機能として実装されています。
SI社畜、転職の心得
SI業界の中年末端下請けSEである僕が、実際に転職活動をして感じた点を、僭越ながらこれから転職活動に臨む方へのアドバイスとして記しておきたいと思います。
転職についてのお話はこちら
SI社畜、転職の巻 - 惰ログ新館(仮)
ハイスペックな人材ではなく、市場でひと山いくらで売られている人間だからこそ、身近な存在として参考にしていただけるのではないかと思います。
就職活動に向かう新卒の方にも通じる部分があると思いますので、参考になれば幸いです。
以下、箇条書きにて
・甘えは捨てる。
愛嬌としてわざと弱みを見せる事は戦術としてアリの場合もありますが、相手が自分の良さを理解しようと努力してくれると思うのは甘えです。
特に最終局面でこれでイケると思った段階で甘えがでて、逆転サヨナラホームランを喫する場合がある(体験談)ので注意してください。
・相手が欲しがるであろう自分を売り込む。
大概の人は傑出したアピールポイントを持ち合わせていません。
その中から職務経歴書とにらめっこしつつ、無理矢理にでも自分なりのウリを捻り出すことになったりします。
ただ、それをそのまま押し売りしたのでは到底相手に魅力的な人材と思ってもらえません。
相手が欲しがるものを提供することこそが大事です。
優秀な営業マンであればあたりまえの事ではありますが、ノルマに追われる営業マンは往々にして人間の顔を見れば誰彼構わず手持ちの商品を売りつけようとします。
ましてや日々、何かを売り込む経験を持たず、自分の力に自信(過信?)がある人であればなおのこと、このミスを犯しやすいと言えると思います。
エンピツが欲しい人に消しゴムを売り込んでも買ってもらえません。。
・嘘はつかない。
ネガティブな事を自分から言う必要はありませんが、聞かれたことには正直に自分の中から出てくる真摯な言葉で答えてください。
借り物の言葉やつまらない嘘は質問を繰り返されるうちに往々にして一貫性をなくし破綻します。
嘘を突き通す自信があれば、その限りではありませんが、仮にそれで内定したとしても、面接より遥かに長い時間となる勤務期間を通して、嘘を突き通すことになるのは覚悟してください。
・面接はお互いの自己紹介と相性の確認の場。
面接は相手が自社に見合う人間であるか見定める場でもありますが、こちらが相手の会社を見極める場でもあります。
単に相手の希望に沿った回答に終始して内定をもらうだけでは意味がありません。
単なる試験ではなく、面接を通して、自分との相性や職務内容など求人票にはない情報を得るチャンスと考えてください。
もちろんその結果、違和感を感じれば、こちらから逆お祈りする権利も与えられています。
・合否は自分の出来不出来より、相手の都合次第。
最終的な合否は相手の都合や気分次第となりますので、他者見合いの場合など、実につまらない理由で合否が決定する場合もあります。
面接官や会社が絶対的に正しい選択ができる道理はないので、特に最終面接で落とされた場合は気にする必要はないと思います。
逆に書類や1次で落とされまくる場合はなんらかの対策や補強が必要でしょう。。
最終的に一番大事となるのは『なぜ転職なのか?』ということ。
この動機=目的というものを最初に決め、ぶらさない事です。
いろいろな企業の仕事や待遇を見ているうちにここが曖昧になりがちです。
例えば家族の時間を大事にしたいので、余裕のある勤務内容としたいと考え転職に臨んだとします。
活動を通して自分の市場価値が思いのほか高いことを知らされ、高額の給与を提示される場合などがあるかもしれません。
その際にも安易に飛びつくのではなく、いちど原点に立ち返ってみる必要があると思います。
あくまで転職は自分の幸せに向かっての1ステップであるため、ここを見誤らないようにしてください。
SI社畜、転職の巻
まさか自分がこのエントリを書く日が来るとは。。
もろもろまだ落ち着いてはいないのですが、記録として残しておきます。
現職:
いわゆるSI業界の末端下請けSE。
現状に不満を抱えつつも、業務には一定の満足感を感じながら、日々を過ごしていました。
転職の理由:
・35歳を過ぎ、会社員という立場で新しいことにチャレンジする最後のタイミングであったこと。
・下請けは最後のところで責任を負わなくても構わないため、気楽ではあるのですが、その分、結果に対する満足度もスポイルされてしまうこと。
一番大きいのは今後に向けて。
・技術に関して、SIのタコツボ的環境ではある程度の優位性(?)がありますが、セミナーで講演する、雑誌に寄稿する、OSSコミュニティで貢献する、といったレベルの技術は持ちあわせていません。
かといっていずれかの業界の高い業務知識などもありません。
現職にとどまった場合、今後は社内外の部下を引き連れてSI業界のタコツボを渡り歩くという選択肢しか残らないため。
・その他、自分や家族などプライベート面の事情も鑑みて。
転職先でのお仕事:
まだはっきりとはしていませんが、当初は自社パッケージのカスタマイズ要員、もしくは導入のフィールドエンジニアという立ち位置で業務にあたることになりそうです。
今後の展望:
・現有のそこそこの技術と今までの経験を最大限活かして、会社で存在感を示すこと。
・早急に業界知識を身につけ、職業人として二本目の柱を立て、自分のポジションを確保し、更に押し上げていくこと。
がミッションとなりそうです。
今後を見据えるなら、英語といったものもキーワードになってくるかもしれません…ヤバい、死ねる。。
まずは上記の達成を目指し、それが達成できた時に次の展開が見えてくるのかな…と考えています。
最後に転職活動を通して感じたポイントを、僭越ながらこれから転職活動に望む方へのアドバイスとして記しておきたいと思います…が長くなりそうなので、次エントリにて。。
【SharePointアプリ】iFrame追加
SharePointアプリはサーバーサイドロジックを使用しないSharePointホスト型アプリであっても裏側でサーバーサイド用のポストバック用Scriptやformなどを吐き出しています。
これが悪さをするらしく、画面の縦位置が正しく取れなかったりするようです。
これにより外部のライブラリ(jquery.validationEngine等)が正しく動作しなくなります。
jquery.validationEngineの場合
・デフォルトのformと追加したformがネスト状態になり動作しない。デフォルトformを指定することで逃げられるが、formを二つ配置できない。
・オブジェクトの正しい相対位置が取れないため、バルーンの描画位置がずれる。
これらのフレームワークに付随した不具合を極力回避するために、iFrameを使用してコンテンツ自体はhtml化することにしました。
考慮点はそこそこあるのですが、大きくはまず以下の2点。
iFrameの高さを再計算する。
下記サイトを参考にさせていただきましたが、そのままではSharePointアプリ上では動作しないため、若干変更しています。
iframe の高さを内容に応じて自動で調節する JS 他 | ヨモツネット
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server"> <script> // iFrame高さ計算 var iframeHeight = function () { var iframe = document.getElementById('frmMain'); if (iframe.contentDocument == undefined) { return false; } var childDiv = document.getElementById('frmMain').contentDocument.getElementsByTagName('div')[0]; if (childDiv != null) { iframe.style.height = (childDiv.scrollHeight + 50) + 'px'; } setTimeout('iframeHeight()', 750); } try { window.addEventListener('load', iframeHeight, false); } catch (e) { window.attachEvent('onload', iframeHeight); } </script> <div> <iframe id="frmMain" name="frmMain" src="./ChildPage.html" style="width:800px;" seamless/> </div> </asp:Content>
親画面からCSSをコピーする。
親画面にはテンプレートで追加されたスタイルシートがあり、コンテンツ自体もこの変更に追従する必要があるため、親画面からコピーすることにしました。
function copyParentCss() { var link = window.parent.document.head.getElementsByTagName('link'); for (var i = 0; i < link.length; i++) { $("head").append(link[i].outerHTML); }; }
とりあえずASP.NET系のWebフォームはJavaScript系ライブラリと相性が悪すぎ。
せめて必要のないコードをつらつら吐くのは止めて欲しい。。
本家はASP.NET MVCに移行する気満々で、今後ライブラリとの親和性が改善されるはずもないので、SharePointアプリもそっちに寄せて欲しいです(続ける気があるのなら。。)
【jQuery】jQuery-Validation-Engineで二度目のValidate時にエラーメッセージが表示されない
以下のアプリを開発中に掲題の事象が発生しました。
IE、Cromeで発生しているため、ブラウザ依存ではなさそうです。
SharePointアプリ
SharePointOnlineのSharePointホスト型
ライブラリのバージョン
Inline Form Validation Engine 2.6.2, jQuery plugin
実装にあたり参考にしたサイトではバージョン2.6を利用しているようでしたが、そちらの場合は表示したメッセージが非表示になる際にdiv自体が削除されており、再表示時に再描画しているようでした。
こちらの開発環境ではdisplay: noneで非表示となっており、再表示は既存のメッセージの属性を上書きすることで行っているようでした。
<div class="datepickerformError parentFormaspnetForm formError" style="opacity: 0.87; position: absolute; top: 341px; left: 162px; margin-top: -34px; display: none;">
<div class="formErrorContent">* 必須項目です<br></div>
<div class="formErrorArrow"><div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div></div></div>
displayを弄っているようなところが一見して見当たらず、詳しく原因を調査している時間はなかったため、いったん以下のように再表示時にdisplay: noneを削除する対応を入れて様子を見ています。
これで2回目のValidateでもメッセージが表示されるようになり、今のところ問題は起きていません。
/**
* Updates the prompt text field - the field for which the prompt
* @param {jqObject} field
* @param {String} promptText html text to display type
* @param {String} type the type of bubble: 'pass' (green), 'load' (black) anything else (red)
* @param {boolean} ajaxed - use to mark fields than being validated with ajax
* @param {Map} options user options
*/
_updatePrompt: function(field, prompt, promptText, type, ajaxed, options, noAnimation) {
if (prompt) {
if (typeof type !== "undefined") {
if (type == "pass")
prompt.addClass("greenPopup");
else
prompt.removeClass("greenPopup");
if (type == "load")
prompt.addClass("blackPopup");
else
prompt.removeClass("blackPopup");
}
if (ajaxed)
prompt.addClass("ajaxed");
else
prompt.removeClass("ajaxed");
prompt.find(".formErrorContent").html(promptText);
var pos = methods._calculatePosition(field, prompt, options);
var css = {"top": pos.callerTopPosition,
"left": pos.callerleftPosition,
"marginTop": pos.marginTopSize,
"opacity": 0.87
};
// ここを追加
prompt.context.style.removeProperty('display');
if (noAnimation)
prompt.css(css);
else
prompt.animate(css);
}
},
オープンソースを利用した開発はあまり経験がないのですが、製品のライブラリと違ってブラックボックス化されていないので、手の打ちようがあるのは、良いことなのか悪いことなのか。。