タグ

ブックマーク / ledsun.hatenablog.com (24)

  • 受託開発デザインパターン 「止められなければ実装する」 - @ledsun blog

    背景 受託開発中です、二次請より低い階層におり仕様の決定権を持っていません。 発注元の、仕様の決定が遅れています。 協力会社を使っていて、何もしない空き時間でも費用がかかっています。 フォース(こんな問題がある) 仕様を決定する人は決断力を欠いている傾向があります。 提案された、仕様を否定する決断力も欠いています。 仕様決定待ち時間中も費用は掛かりますが、発注者は「作業をしていない時間は費用が発生しない」と認識していることが多いです*1。仕様決定後に、空き時間で浮いた費用を使って、実装作業を要求することが多いです。 解決方法 「今ある資料から、こういう仕様だと推測しました。○月×日までに仕様変更を提示しない場合は、この仕様で実装します。」と宣言します。 発注元に、止められなかった場合は、提示した仕様で実装します。 納品日がくれば、提示した仕様に従った実装を納品します。 成果物を作成すれば、

    受託開発デザインパターン 「止められなければ実装する」 - @ledsun blog
    msykxxx
    msykxxx 2018/01/21
  • 優秀なプログラマになるために - @ledsun blog

    みんな良いこと言うので、刺激を受けて考えたことを記録します。 生きてるだけで丸儲け ストレス対処法 撤退戦術 タスク殺すマシーン 人間に戻る儀式 運 技術力を身につける方法 車輪を再発明する 脱ゴールデンハンマー病 学習の助 優秀なプログラマとは? おまけ 生きてるだけで丸儲け 優秀なプログラマーになるためのコツ · GitHub 優秀なプログラマーに「育つ」んだし、それには時間が必要 優秀なプログラマーになるということは、上記の通り長時間を要するということも踏まえると、メンタルヘルスにリスクがある環境に長時間暴露されることが不可避である 業界で長きにわたり活躍し続けている人というのは、それだけですでにひとかどの人物 すごく良いです。 優秀なプログラマになる前に、死んでしまっては元も子もありません。 生き延びることはなにより大切です。 幸か不幸か現状のIT業界はハードなストレスにさらされや

    優秀なプログラマになるために - @ledsun blog
    msykxxx
    msykxxx 2017/10/04
  • 失敗プロジェクトの弔い方 - @ledsun blog

    プロジェクトを燃やした経験から、どうすれば有効なふりかえりができるのか考えてみました。 要約 失敗プロジェクト参加者の信用を回復 失敗プロジェクトの撤退戦術を共有 失敗プロジェクトの回避方法を検討 背景 「社内の失敗プロジェクトを振り返って今後に活かそう」みたいな会があったので失敗のポイントを明確にすべく張り切って他のPMに質問しまくってたら「そんな傷口を抉るようなことするな」と怒られが発生したので人間界には主旨はなく気持ちだけがあると悟った回。— モーくん (@calfscalf) 2017年5月9日 を見て考えました。 外野から見たら、確かにまったくこう見えると思います。 なぜ、傷口を抉るようなことをするなと言いたい「気持ち」になるのでしょうか? 失敗プロジェクトの当事者の立場 デスマると、渦中の人は如何にして心を折らずに終戦までもっていくかがんばっている。社内からは、あいつらのせいで

    失敗プロジェクトの弔い方 - @ledsun blog
    msykxxx
    msykxxx 2017/05/25
  • JavaでMimeUtilライブラリを使ってファイルの中身からデータ形式を判定する - @ledsun blog

    ファイルのデータ形式(MIMEタイプ)を拡張子からではなく、ファイルの中身で判別したいことがある。 JavaではMimeUtilというライブラリが使える。 準備 JDKはインストール済みで、binディレクトリにパスが通っている前提。 体 http://sourceforge.net/projects/mime-util/files/mime-util/mime-util-2.1.3/ からダウンロード mime-util-2.1.3.jar 依存ライブラリ SLF4J http://www.slf4j.org/download.html からダウンロードして解凍 slf4j-api-1.5.6.jar slf4j-log4j12-1.5.6.jar log4j http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-

    JavaでMimeUtilライブラリを使ってファイルの中身からデータ形式を判定する - @ledsun blog
    msykxxx
    msykxxx 2015/01/15
  • 2年目プログラマにおススメする5冊 - @ledsun blog

    プログラマは勉強し続ける職業です。を読みましょう。 誰に? 対象とする人 仕事でWebアプリケーションの一部を作ったことがある 仕事SQLを書いたことがある 対象としない人 一人でWebアプリケーションを作れる DBの論理設計ができる 5冊の デバッグルール 楽々ERDレッスン ノンデザイナーズ・デザインブック プログラムはなぜ動くのか 体系的に学ぶ 安全なWebアプリケーションの作り方 デバッグルール プログラム自体は書けるのに依頼された仕事をこなすのに諸先輩に比べると時間が掛かることがあると思います。掛かっている時間の内訳をみると、プログラムを書くことより書いたプログラムが動かなかった時の原因調査に時間が掛かっていることが多いです。何故時間がかかるのでしょうか?エラーメッセージでググって上手い事解法を引き当てるか、コードを適当に変更して正しく動くことを祈るぐらいしかできないからで

    2年目プログラマにおススメする5冊 - @ledsun blog
    msykxxx
    msykxxx 2014/09/24
  • 今日からソフトウェア開発者になった人に本気で勧める5冊 - @ledsun blog

    就職して今日からソフトウェア開発者になった人向け。 気! どれくらい気かって言うと会社の新人に強制的に読ませてるくらい気*1。読破したら偉いとか、興味をもってくれたらうれしいとかじゃない。絶対読め。そして絶対読める。 誰に? 対象とする人 SIerでWebアプリを作る 研究の道具としてプログラミングをしたことはあるがプロダクトを作ったことがない 今まで書いたプログラミングのコード量が3000行以下 文系出身でプログラミングとか知らない、今日からソフトウェア開発者を目指す 対象としない人 新しいことを知るのが好きで、難しいほど興奮する 既にプログラミング経験していて、プログラミングをの腕を上げる具体的な方法を知りたい ソフトウェア開発に興味がない 組み込み系とかソーシャル系とか自社サービスな人は、ネットワークとWebアプリは他のに変えた方がいいかも 5冊の 読むは以下の五冊。そ

    今日からソフトウェア開発者になった人に本気で勧める5冊 - @ledsun blog
    msykxxx
    msykxxx 2014/09/24
  • SIビジネスの流れ - @ledsun blog

    システムインテグレータ(SI)のビジネスは大きく以下のような流れで進みます。 集客 営業 要件定義 製造 検収・請求 フォローアップ 集客 どんなビジネスでも同じですが、まずは見込み客を集めます。システム開発に興味を持ったお客様を探しアポイントを取ります。よく使われる手法に商品・サービスの説明をするテレアポ、割引を謳ったDM、自社の推す技術のセミナー、役員が個人的に懇意にしている既存顧客の紹介があります。会社の規模やブランドにマッチした手法を選ぶ必要がありますが、会社が成長にするにつれ手法を変えていかなければいけないのが難しいところです。 営業 アポイントの取れたお客様に顧客に直接、自社の提供するサービス、商品の説明を行います。また会社の紹介も同時に行います。お客様がある程度の金額を掛けてソフトウェア開発を行いたいと意思表示をされた場合に次の段階に入ります。そこで現状の課題を聞き出します。

    SIビジネスの流れ - @ledsun blog
    msykxxx
    msykxxx 2014/09/24
  • XP祭りに行きました #xpjug - @ledsun blog

    http://xpjug.com/xp2014/ アジャイルが好きな理由 アジャイルソフトウエア開発が好きな人が集まっている会なので、いろんな人にアジャイルが好きな理由を聞いて回ればよかった。 自分が(受託開発で)アジャイルが好きなのは「動くものを見せながらお客さんと話すと話しやすい」からです。 仕様から動きを想像して話を噛み合わせるのはすごく難しい。 ペーパープロトタイプをやると画面上のパーツの配置は決められるけど、動きはやっぱり認識を合わせづらいです。 動くものを見せればすぐに伝わる。今作るものに集中できて開発側のスピードがあがる。 そのぶんビジネス側へのフィードバック量(数も頻度も)増えるので、ビジネスで判断する回数は格段に増える。 これについて来れない(今までの「最初にお願いして半年後に検収」みたいな発注方法を続けたい)発注者もいるので、発注者を選ばないといけないといけない。 この

    XP祭りに行きました #xpjug - @ledsun blog
    msykxxx
    msykxxx 2014/09/09
  • 忍者式テストをやってみた - @ledsun blog

    忍者式テストを二週間くらいやってみた感想です。 忍者式を見習って毎日一時間手動受け入れテストの時間を確保してみた。 「受け入れテストを徐々に増やしていく」感覚が新鮮。 「受け入れテストはテストフェーズの最初に一度に作るもの」は思い込みだった。— ぎゃばん (@ledsun) 2014年6月27日 忍者式テストとは 那須のKent Beckと呼ばれる隠者が発明(発見?)したテスト手法。 特徴をあげると 毎日、手動でテストを行う テストをペア作業で行う 実施のたびにテスト項目を見直す テスト項目の粒度は受け入れテスト 初めてこの手法を知ったのは2005年だったと思います。 当時、自社開発ソフトウェアの結合試験の真っ最中でした。 「バグの発見漏れは減るだろうけど、どうやって導入すれば???」と、 使えそうなのに手が出せなく、もどかしい思いをしました。 導入方法の謎 何年経っても導入方法が分からな

    忍者式テストをやってみた - @ledsun blog
    msykxxx
    msykxxx 2014/08/06
  • プログラミングのためにその1 - @ledsun blog

    このエントリの意図 下のが、おもしろかったので真似します。 プログラミングの生産性を上げるには - Cside::Private programming - プログラムを書き続けるためにやってること - Qiita sassembla.github.io/Public/2014:05:20 22-55-22/2014:05:20 22-55-22.html プログラミングについてアレコレ — さにあらず 興味を持ったものを動かしてみる Twitterはてなブックマークで新しいライブラリが話題になって、 APIや説明記事を読んでいるだけだと興味を維持できない。 動かしてみて新しい発見があるとやる気が維持できる。 直近ではReactJS動かしてみた。 JSXはいいんだけどメソッド名React.renderComponentがあまりしっくりこなかった。 動くサンプルをgithubにあげる 記憶

    プログラミングのためにその1 - @ledsun blog
    msykxxx
    msykxxx 2014/05/26
    「興味あるのもを動かして、手順を説明する」までを最低限やれば良さそう。
  • 大拝承というWebアプリケーションを公開したら楽しかった話 - @ledsun blog

    大拝承というWebアプリケーションを公開しました。 一番大事なこと とても楽しい。みんなもアプリを作って公開しよう。 アプリケーションを公開するとプログラミングしていた時と違う気分になるのが面白い。 TDDでテストが通る最短の実装をするときのプログラマの気分と、 実装の隙を突く嫌がらせテストを考えるテスターの気分の違いに似ている。 クソコードを見たときのイライラ感をいまいちなアプリケーションを見ながら感じられる。 アプリケーションの動きをかっこよく出来たときの爽快感は、リファクタリングしてかっこいいコードが書けたときの気分に似ている。 ドッグフードをべる*1ほど しっかり使い込まなくてもユーザ気分を味わえて楽しい。 受託開発の発注者が実装が難しい機能の仕様の厳密さよりもボタンの配置の細かさにうるさいのはこういう気分かもしれない。 経緯 はてなラボで大承認というアプリが公開される はてぶで

    大拝承というWebアプリケーションを公開したら楽しかった話 - @ledsun blog
    msykxxx
    msykxxx 2014/03/06
  • 技術力アップにつながる勉強会の選び方 - @ledsun blog

    要約 4つの選び方を紹介します。 これから使う技術の勉強会に参加 同じ技術の違うコミュニティの勉強会に参加 流行技術の勉強会に参加 変な人が主催する勉強会に参加 背景 「勉強会に参加しないと不幸になる話 - きしだのはてな」があります。 要約すると、技術力を上げないと長時間労働で価値を提供する羽目になり、技術力を上げる時間がなくなるジレンマのお話です。 ジレンマに陥らないために、技術力を上げるとっかかりに勉強会への参加を勧めています。 また、忙しい人は勉強をしている? - 勘と経験と読経では、勉強会を 必ずしも効率の良い学習手段というわけではない としています。 上記のブログでも引用していただいますが社内勉強会はヤメだ。自主的はいらん、全員技術発表だ! - Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。でこんなことを書きました。 勉強会参加の欠点は「

    技術力アップにつながる勉強会の選び方 - @ledsun blog
    msykxxx
    msykxxx 2013/12/13
  • Grunt livereload でファイルを修正したらブラウザを自動リロード - @ledsun blog

    livereloadとは? ファイルの変更を検知したらブラウザで読み込みなおすgrunt-contribe-watch プラグインのオプションです。 grunt-contribe-connectプラグインとブラウザ拡張と組み合わせて使います。 何がうれしいの? クライアントJavaScriptの開発では エディタでJavaScriptファイルを修正 ブラウザに切り替え ブラウザをリロード の三つを頻繁に繰り返します。 この「ブラウザをリロード」を自動で行ってくれると、以下のような簡単な確認であれば ブラウザにフォーカスを切り替える必要がありません。 レイアウトが崩れていないか エラーが起きないか エラーが起きてデバッグをしたくなっったら、ブラウザに切り替えます。 ブラウザに切り替えないので エディタで Ctrl + S で保存 ブラウザの表示を確認 エディタで修正作業の続き ブラウザにフォ

  • えぇー!MVCのContollerはプレゼンテーションロジックのinput担当だったのかい!? - @ledsun blog

    この話はMVC(Model-View-Controller)の話です。 特にクライアントMVCの話です。WebMVCの話ではありません。 事前 ViewとModelを分けるためにControllerを挟むのだと思っていました。 事後 Contollerはプレゼンテーションロジックのinput担当でした。 参考文献 The Model-View-Controller (MVC) Its Past and Present を読んでください。すべてが書いてあります。 題 WebMVCから考えた俺のコントローラー そんなことより聞いてくださいよ。 WebMVCからMVCに入った口としてはViewとControllerの分け方なんて考えたこともないんですよ。 分かれてて当たり前ジャンと思ってたんですよ。 ところがJavaScriptで3000行くらいあるDOMをゴリゴリするアプリケーションをいじっ

    えぇー!MVCのContollerはプレゼンテーションロジックのinput担当だったのかい!? - @ledsun blog
    msykxxx
    msykxxx 2013/11/20
  • QUnitの概要 - @ledsun blog

    QUnitとは JavaScript用のTestingFrameworkです。 由来 jQueryのテスト用に作られ、今もjQuery、jQuery-UIのテストに使われています。 それ自体はjQueryに依存していませんが、テスト内でDOMを操作したりイベントを生成したりするのにjQueryを使うと便利です。 JavaScript的な側面 実行環境 QUnitとテスト用のスクリプトをブラウザに読み込んで実行します。 テスト結果はそのままブラウザに表示します。 他のツールと連携すると PhantomJSを使えばCLIで実行可能 Testemを使うとテスト修正時の自動リロード(再実行)が可能 Gruntからもgrunt-contrib-qunitプラグインを使って実行可能 ちなみに、mochaというTestingFrameworkはnode.jsで実行します。 インストール npmで入れるこ

    QUnitの概要 - @ledsun blog
  • My first grunt - @ledsun blog

    grunt とは? JavaScript開発でよく使うビルドツール。makeやrakeのJavaScript版です。 Grunt: The JavaScript Task Runnerにて公開されています。 どうやって使うの? コマンドラインから操作します。Node.jsのパッケージマネージャ(npm)を使ってインストールします。 事前準備 Node.jsのインストール Chocolatey Chocolateyを入れてないなら、コマンドプロンプトで以下のコマンドを実行しましょう。 @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET

    My first grunt - @ledsun blog
  • JavaScriptでSigletonオブジェクトを実装してみる - @ledsun blog

    いろいろなSingletonを実装してみます。 関数 var getSingleton = (function() { var instance = null, init = function() { instance = { value: Math.random() } }; return function() { if (instance == null) { init(); } return instance; }; })(); var a = getSingleton(); var b = getSingleton(); console.log(a == b); //true console.log(a.value == b.value); //true var c = Object.create(a); console.log(a == c); //false console.l

    JavaScriptでSigletonオブジェクトを実装してみる - @ledsun blog
  • JavaScriptのパターン シングルトンパターン - @ledsun blog

    定義を確認 GoFの定義したSingletonパターンの目的(Intent)は以下の二つです*1。 あるクラスのインスタンスが1つしか生成されないことを保証する そのオブジェクトへのグローバルなアクセス手段を提供する 実装例 JavaScript デザインパターンの例がいけてます。 ただし、には誤植があるのでLearning JavaScript Design Patternsの例を見てみましょう*2。 var mySingleton = (function () { // Instance stores a reference to the Singleton var instance; function init() { var privateRandomNumber = Math.random(); return { getRandomNumber: function() { re

    msykxxx
    msykxxx 2013/10/20
  • JavaScriptのオブジェクト生成 - @ledsun blog

    JavaScriptには次の三つのオブジェクト生成方法があります。 プロトタイプ風 クラス風(異教徒の呪い、Fxxk your God!!!) 関数の束縛 比べてみましょう。 例に使う関数 ここに指定した文字に挨拶をする関数があります。 var hello = function(str) { return "hello " + str + "!"; }; hello("world"); //"hello world!" この関数と文字をプロパティに持つオブジェクトを考えます。 各々の方法で生成してみましょう。 プロトタイプ風 関数を自身のプロパティを参照するように修正します。 引数は無く、代わりにthisで自オブジェクトのプロパティを参照します。 var greeter = { hello: function() { return "hello " + this.string + "!";

    JavaScriptのオブジェクト生成 - @ledsun blog
    msykxxx
    msykxxx 2013/09/29
    異教徒の呪いw
  • JavaScriptのパターン オブジェクトの拡張 - @ledsun blog

    対象オブジェクトに複数のプロパティを一度に追加します。 以下のデザインパターンを適用する。 extendパターン 元の処理 プロパティを一つずつ設定します。 var mike = {}; mike.firstName = "michelle"; mike.lastName = "jackson"; mike.getFullName = function() { return this.firstName + "." + this.lastName; }; mike.getFullName(); extendパターン 全てのプロパティをまとめてコピーするextend関数を用意します。 var extend = function(sub, parent) { for (var prop in parent) { sub[prop] = parent[prop]; } }; extend関数を使

    JavaScriptのパターン オブジェクトの拡張 - @ledsun blog