「INTERFACE」を含む日記 RSS

はてなキーワード: INTERFACEとは

2010-03-12

とりあえずIT下請け企業はやめておけ

そういう会社で○年目(5年以下とだけ)がそろそろ終わるのですが、正直転職ばかり考えている。

というのも、自ら設計した仕様書プロジェクトに火がついたことはないが、下請け案件では殆ど火災だらけ。

国内王手のうちのある会社が主要取引先なのだが、はっきり言おう。

仕様書の質が低すぎる。

業界王手がこの様か!と言いたくなるほど仕様書の質が低い。

以下に私の食った仕様書をお教えしよう。

一つのメソッド「仕様書」が1000行を超える

はい、メソッド?なにそれ?おいしいの?と言わんばかりの超大作。

上から下まで流すだけ。保守性皆無。

しかも無理やりループを一まとめにするから、もはや何処で何をしてるのか、、、、。

Basic/Cobol ならまだ分からんでもないが JavaC#

概要設計がない

作ってないんですねきっと。何がしたいのかさっぱり分からない。

それで実装用の設計起こすんだから、そりゃぁ全体で動くわけねーわ。

(このときにクレーム付けられるのって下請けなんですが、でも下請けでは発言権無いですからね、、、|||orz)

メソッドの名前があり、SQL があるだけ

いや本当に何がしたいのか、、、、どういう分岐条件かも分からない。

いやむしろ書いてない!?

これでお金取ってるんだから詐欺だよなぁと。

主要技術無駄遣い

DI, AOP, O/R Mapper いずれも基本となる技術なんですよね、でも。

「何でこんな意味の無いところに使うの?」という使い方で逆に労力を増やしてくれる。

例えば O/R Mapper はテーブルとマッピングを行い、プログラム側で処理しやすく、、、、

とのことで、C# には LINQ まで装備されている。

で、仕様書の指定「すべてのSQL結果に対して対応するO/Rを作成する」ってwwww

ちょっと待て!テーブルじゃなくてSQL単位!?

当然従えば大量にオブジェクトができて、SQL仕様が変わるたびに、、、、以下略

「元のプロジェクトが○位の規模なのにどうしてその倍以上の規模なってんだゴルァ」

とブーたれてくることも、、、、自分設計に言って下さい。

「すべてのオブジェクトシングルトンで実装し、Interface用意してね、DIで使うから」

ってどれだけ無駄すれば気が済むのか、、、、。

(Test 時にMock入れるだけならここまでする意味って無いよな…)

そしてこんなことをして下請けをいじめた挙句「弊社には最新技術ノウハウがございます」とか言う。

素敵、、、、、。

これでは国内生産無理だわ

こんな人海戦術しかないような仕様を書いてるようでは、そりゃ安価海外に流れるなと、、、、。

本当に自分技術を信じる人は、独立系、海外系、自社製品開発に行ってください。((もしくは王手企業でまともな仕様書書いてください))

間違っても下請けプログラマーなんてゴミ押し付けられる仕事場行っちゃダメよ。

2009-11-27

人力検索はてな質問の補記

* AnonymousDiary を人力検索はてなの質問の補記に使うことをお許しください(質問文はこちら)。

tcpdumpネットワーク接続を開始したときに、キャプチャする方法

OSは、Ubuntu 8.04。シェルは、bashをそれぞれ使用しております。

下記、(1)、(2)の手順で、ネットワーク接続を開始したら、

tcpdumpパケットキャプチャするような設定を行いました。

OS再起動さてみたところ、正常に取得を開始してくれません。

そこで

下記、(3)、(4)の手順で試してみると、それぞれ不可思議な挙動を発見しました。

原因が分からず苦慮しております。ご教示いただけないでしょうか。

何卒、よろしくお願い致します。

(1)/etc/capture.sh というファイルに下記シェルスクリプトを書き込み

#!/bin/sh

tcpdump -i eth0 -s 1500 -C 10 -w /var/log/tcpdump/tcpdump`date '+%Y%m%d%H%M%S'`.log

(2)ネットワーク接続が完了したときに、コマンドが起動するよう

/etc/network/interfeces に次の1行を書き込みました。

up sh /etc/capture.sh

# This file describes the network interfaces available on your system

# and how to activate them. For more information, see interfaces(5).

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface

auto eth0

iface eth0 inet static

address ???.???.???.???

netmask 255.255.255.0

gateway ???.???.???.???

up sh /etc/capture.sh

* ???は、適当な数が割り当てられてます。

OS再起動さてみたところ、正常に取得を開始してくれません。

そこで、(3)、(4)を試してみました。

(3)ネットワークリスタートさせると、つぎのようなエラーが返ってきます。

user@server:~$ sudo /etc/init.d/networking restart

* Reconfiguring network interfaces... SIOCADDRT: File exists

Failed to bring up eth0.

(4)ところが、一度、インターフェイスをdown、upしてから、ネットワーク再起動すると、tcpdumpが正常に動き出します。

user@server:~$ sudo ifconfig eth0 down

user@server:~$ sudo ifconfig eth0 up

user@server:~$ sudo /etc/init.d/networking restart

* Reconfiguring network interfaces... Received cookie: SQ_SYSTEM_SESSION=4gqai700bd5s0tdo9f0fafnbr7

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 1500 bytes

2009-09-29

OOPFizzBuzz

あえてプログラミングゴルフの正反対を目指してみる。

class FizzBuzzProgram{
	public static void main(String args[]){
		for (int i = 0; i++ < 100; ) {
			System.out.println(new Number(i).checkMod3().checkMod5());
		}
	}
}

interface Mod3Mod5Unchecked extends Mod5Unchecked {
	public Mod5Unchecked checkMod3();
}

interface Mod5Unchecked {
	public Object checkMod5();
}

class Number implements Mod3Mod5Unchecked{
	private int no;
	public Number (int no) { this.no = no; }
	public Mod5Unchecked checkMod3() {
		return no % 3 == 0 ? new Fizz(no) : this;
	}
	public Object checkMod5() {
		return no % 5 == 0 ? new Buzz() : this;
	}
	public String toString() { return Integer.toString(no); }
}

class Fizz implements Mod5Unchecked{
	private int no;
	public Fizz (int no) { this.no = no; }
	public Object checkMod5() {
		return no % 5 == 0 ? new FizzBuzz() : this;
	}
	public String toString() { return "Fizz"; }
}

class Buzz {
  	public String toString() { return "Buzz"; }
  }

class FizzBuzz {
	public String toString() { return "FizzBuzz"; }
}

2009-05-22

http://anond.hatelabo.jp/20090518222554

HDMIには対応してないっていうのは、これからTV買い換える人にはちょっとネックじゃないかなって思う。

だって必要ないんだもん。

HDMIを略さずに書くと「High-Definition Multimedia Interface」なわけ。つまり、HD品質映像および音声を伝えるための規格。でもってWiiは「Standard-Definition(現行のDVD相当の解像度)」にしか対応していない。なので付ける意味が無いんよ。ついでに、HDMI端子を付けるとロイヤリティを支払う必要が出てくる。まあ、一台当たりせいぜい数円だけど。

それに、HDMIってのはHDCP必須なので相応のチップが必要になってくる。その分だけ値段も上がるし、そもそもWiiで専ら再生されるのは暗号化が必要なコンテンツじゃない。D2端子より上の品質ぶっちゃけ不要。

2008-12-31

http://anond.hatelabo.jp/20081231190326

そういうのはバッドノウハウとは言わないの?

関数ポインタバッドノウハウとは言わないでしょ。C言語自体がバッドノウハウの結果だと言うなら、当たりだけど:)

手続き関数という抽象まことに一般的な存在で(数学では汎関数というのもある)、それをC言語で直接的に表現したのが関数ポインタ関数的なものを オブジェクト指向言語オブジェクトとして実装するほうがバッドノウハウだと思う。 少なくとも私は JavaのComparableインタフェースよりも C言語の heapsort/mergesort/qsort の関数引数 int (*compar)(const void *, const void *) のほうがシンプルで どちらかといえば本質をよりよく表していると思う。 なぜ関数的なものを表現するのに オブジェクトとかinterfaceとか継承とか「余計な概念」を導入する?それこそバッドノウハウでしょ。 まあでもC言語にはクロージャが無いから、関数的なものも扱いづらいことこの上ないが、Cにクロージャが無いこと自体はバッドノウハウとは言わないでしょー。

逆も然りで、オブジェクトを表現するために 関数を使ってれば そればバッドノウハウだけど、オブジェクト関数ほど一般的な概念ではないと思う(オブジェクトなんか無くても別にいい、かも?)。

あ、もちろん難読化や最適化や動的ロードのために件のようなコードを書くのはバッドノウハウに近いだろう。

2008-08-25

http://anond.hatelabo.jp/20080824080254

とりあえず、ベテランよりも俺の方が優秀という事が言いたいのだろうが・・・。

いや。うん、2年目って感じで初々しいね。

Interfaceって何のためにあるんですか?

それはね、Javaには関数ポインタがないからなんだよ。実装としてはvtableだから、関数ポインタなんだよ。知ってる? まぁ、一部言語ではhashTableだが。

>ListやMapループで回して値を取る時Iterator使うのは何故?

それはね、Javaにはポインタがないからなんだよ。

>staticなメソッドを作るときはどんな時?

いや、そもそもnon staticだって、データへのポインタがある、関数コールという意味ではstaticと大差ないジャン

むしろ、staticではなく、シングルトンのクラスのメソッドコールにしたら? Javaなんだから。

あぁ、指摘があったけど、mainとエントリポイントのぞく。w

2008-08-24

http://anond.hatelabo.jp/20080824080254

# Interfaceって何のためにあるんですか?

# ListやMapループで回して値を取る時Iterator使うのは何故?

# staticなメソッドを作るときはどんな時?

この辺ハードル高くね? なんか哲学の域。

経験年数2年半のJavaプログラマがちょっと書くよ。

はてな界隈では、Javaって、あんま人気無いみたいだけど、ちょっと書かせてよ。

SIerお仕事してると、派遣とか常駐とか言う形で、色んな会社に行って、違う会社の人とお仕事するんだけど、「経験年数n年(n>3)です」っていう人達が、恐ろしく使えなくてびっくりすることがしばしば。

特に、Java 5以降の機能

辺りを全く知らなかったり。 って言うか、Javaの極々基本的な知識である

  • equals/hashCodeの実装
  • Serializableの実装
  • Iteratorの実装

が全く出来ないんだよね…。

そういうのを知らなくても(出来なくても)業務をこなせちゃう(?)のが、Java言語特性だとは思わないけど、こういう人達だらけなんだよね…。 PMが新しい人を採用しようとして、ここら辺の知識を割りと厳し目にテストしたら、候補が10人居たのに全滅で、プロジェクトスタートが遅れてしまったりして、もう大変。

他人のJavaスキルを知るために、自分がする質問は

  • Interfaceって何のためにあるんですか?
  • ListやMapループで回して値を取る時Iterator使うのは何故?
  • staticなメソッドを作るときはどんな時?

かな。

2008-04-05

さくらの旧(?)専用サーバ CentOS 4.6 を Linux-Vserver に入れ替えてみた

前置き

契約直後の初期状態

  • ホスト名をsakura2とした。
  • sshd と vsftpd が動いていた。
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.4.ELsmp #1 SMP Sun Feb 3 07:08:57 EST 2008 i686 athlon i386 GNU/Linux
[admin@sakura2 ~]$ cat /etc/issue.net
CentOS release 4.6 (Final)
Kernel \r on an \m

CentOS 5 へのアップグレード(?)

中身の整理
  • なるべく最小構成に近い最新のCentOS4.6にしてみる。
# yum update
# yum remove emacs emacspeak emacs-leim emacs-common
# yum remove NetworkManager
# yum remove bluez-bluefw bluez-hcidump bluez-libs bluez-utils
# yum remove cups cups-libs
# yum remove irda-utils isdn4k-utils pcmcia-cs wireless-tools
# yum remove wpa_supplicant gpm xinetd
# yum remove ppp nfs-utils lksctp-tools autofs
# yum remove xorg-x11-libs
# yum remove selinux-policy-targeted
# yum remove vsftpd
# yum clean all
CentOS 5 にアップグレード(?)してみる
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.9-67.0.7.ELsmp #1 SMP Sat Mar 15 06:54:55 EDT 2008 i686 athlon i386 GNU/Linux
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-notes-5.1.0-2.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/centos-release-5-1.0.el5.centos.1.i386.rpm
[root@sakura2 admin]# cat /etc/issue.net
CentOS release 5 (Final)
Kernel \r on an \m

# yum update glib procps udev iptables
# rpm -Uvh --nodeps http://mirror.centos.org/centos/5/os/i386/CentOS/initscripts-8.45.17.EL-1.el5.centos.1.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/mkinitrd-5.1.19.6-19.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-libs-1.39-10.el5.i386.rpm \
http://mirror.centos.org/centos/5/os/i386/CentOS/e2fsprogs-devel-1.39-10.el5.i386.rpm
# rpm -Uvh http://mirror.centos.org/centos/5/os/i386/CentOS/kernel-2.6.18-53.el5.i686.rpm
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.18-53.el5 #1 SMP Mon Nov 12 02:22:48 EST 2007 i686 athlon i386 GNU/Linux

# yum clean all

[root@sakura2 admin]# yum --version
Loading "fastestmirror" plugin
2.4.3
[root@sakura2 admin]# rpm --version
RPM version 4.3.3
# yum update
Error: Missing Dependency: python-abi = 2.3 is needed by package python-elementtree
  • 解決法がわからないので放置

Linux-Vserver の導入

# vi /etc/ssh/sshd_config
# /etc/init.d/sshd restart
# vi /etc/yum.repos.d/dhozac-vserver.repo
# yum update kernel
# yum install util-vserver{,-core,-lib,-sysv,-build}
[admin@sakura2 ~]$ uname -a
Linux sakura2 2.6.22.19-vs2.3.0.34.1 #1 SMP Mon Mar 17 05:32:04 EDT 2008 i686 athlon i386 GNU/Linux

ホストOS環境の整備

# yum update bash screen rsync
# /etc/init.d/iptables save
# /etc/init.d/iptables start
# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**filter
:INPUT ACCEPT [1067:96557]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63680:6208436]
:e0 - [0:0]
-A INPUT -i eth0 -j e0
-A e0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A e0 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A e0 -p tcp -m tcp --dport 22 -j ACCEPT
-A e0 -p tcp -m tcp --dport 80 -j ACCEPT
-A e0 -p tcp -m tcp --dport 443 -j ACCEPT
-A e0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Mon Mar 24 19:57:07 2008
# Generated by iptables-save v1.3.5 on Mon Mar 24 19:57:07 2008
**nat
:PREROUTING ACCEPT [179:10642]
:POSTROUTING ACCEPT [213:13895]
:OUTPUT ACCEPT [251:16220]
-A PREROUTING -s ! 10.0.0.0/255.255.255.0 -p tcp -m tcp --dport NNNN -j DNAT --to-destination 10.0.0.1:22
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -d ! 10.0.0.0/255.255.255.0 -j SNAT --to-source AAA.BBB.CCC.DDD
COMMIT
# Completed on Mon Mar 24 19:57:07 2008

ゲストOSの設定

[root@sakura2 ~]# /usr/sbin/vserver-stat
CTX   PROC    VSZ    RSS  userTIME   sysTIME    UPTIME NAME
40013   27 301.5M  73.8M  30m36s31  56m38s90  11d06h56 one
40015    5  10.8M   4.4M   0m28s33   0m12s68   9d04h23 two
40016    2   4.2M   1.3M   0m00s47   0m00s64   0m01s97 three

追記

2008-04-02

プログラマ言語によって分断されるのか

プログラマは各々が使う言語やツールによって思考や行動、コミュニティを制限されている。

某巨大掲示板を見るかぎり、言語ごとにテーマが区切られることが多い。

何かプログラムを作る際に、最初に「どの言語を使うか」を論じられることも多い。

ABI(Application Binary Interface)か、外部ライブラリ呼び出しの手段を別途構えることによって、言語横断的なプログラムを作ることはできる。それにも関わらず、プログラマ言語を同じくする者同士でしかつながりあえていないような印象を受ける。それはプログラミング言語がツールである以上に、思考パターンをも制限してしまっているのではないかということだ。

これらの状態を引き起こす引き金は、言語そのものの特性というよりは、あらゆる言語をまとめて一つのバイナリを吐く(あるいは逐次実行する)ツールの不在が上げられる。それぞれの言語コミュニティは自分の言語コンパイラやツール、方法論にしか興味がない。

ゆえに、言語による囲い込みは進行し、プログラマは分断されていく。

2007-09-25

[]PHP VS Rails (Ruby on Rails)

PHP

404 Blog Not Found:そろそろPHPに関して一言いっとくか

PHPを使っても、知識は増えても知恵が増える気がちっともしないのである。


スラッシュドット ジャパン | Ruby on Railsは万能薬ではない

はてなブックマーク - スラッシュドット ジャパン | Ruby on Railsは万能薬ではない

COBOL技術者の憂鬱 - RailsからPHPへ

PHPプログラムを始めてみたい、難しいと思っている人の為に*ホームページを作る人のネタ帳

アフィリエイトは儲かんないってば:PHP初心者によるPHP入門 - livedoor Blog(ブログ)

1日平均13億3800万ページビューを誇るYahoo!JAPAN

この爆裂なアクセスを誇るYahoo!JAPANを支えているテクノロジーのひとつがPHPということでした。

PHPの車輪はバカに出来ない。使うに留めず使いこなしてからが面白い。*ホームページを作る人のネタ帳

service_YouTubeというPEARモジュールを使うと、YouTubeAPIを活用して驚くほど簡単に動画サイトが作れます。

指定したタグがついているすべての画像の一覧表示をいうのをservice_YouTubeを使うと以下の様な文で構築できます。


CakePHPで高速Webアプリ開発:第1回 CakePHPを使いたくなる5つの特徴|gihyo.jp … 技術評論社

Ruby

Shane's Brain Extension: A Ruby Interface to the YouTube API

YouTubeのAPIを使ってみる。 - t-imaizumiのMacとかのはなし

Flickrの画像をはてなに貼り付けるためのHTMLを取得するスクリプト。 - t-imaizumiのMacとかのはなし

InstantRails で 簡単 Ruby on Rails 体験

10分で作るRailsアプリ for Windows - masuidrive

ITmedia エンタープライズ:第1回 Instant Railsで始めるWindows環境のRails (1/2)

Matzにっき(2007-09-15)

Scaling Twitter: Making Twitter 10000 Percent Faster | High Scalability

平均毎秒600アクセスというのも興味深い情報

これは楽天の個別サービスアクセスよりも多い。


【特選フリーソフト】生産性の高いWeb開発環境 Ruby on Rails:ITpro

37signalsのBasecampはXeon 2.4GHz dual,メモリー2Gのサーバー2台で40万リクエスト/日を処理している。

他にも43Things.comでも20万リクエスト/日の処理


2005-12-31 - きんきん日記

Basecampはデュアル2.4GHz Xeon、2MBメモリマシン上で15個のFastCGIプロセス

50から100個のApache 1.3.xプロセスが動作している2つのWeb/アプリケーションサーバによって、

1日約40万リクエストを処理している。しかし、マシンのロードは通常0.5から1.5程度。

MySQLサーバは他の2つのアプリケーション(Ta-da ListとBackpack)で共有されていて、最大50万行のテーブルを持っている。

このMySQLは3つのアプリケーションから利用されているが、ロードは0.1から0.3の間で、ボトルネックにはなっていない。


Part2 Rubyに学ぶ「Ruby on Railsの正体」:ITpro

Railsを使うことで可能になる自然な英文に近い記述

1.day.ago # 現在時刻から1日前を表すTimeオブジェクト

10.years.from_now # 現在時刻から10年後を表すTimeオブジェクト

1.kilobyte # 1024

●productsテーブルからnameが'book',priceが2079であるようなProductオブジェクトを読み取り,存在しなかった場合はデータベースレコードを新規作成する処理

book = Product.find_or_create_by_name_and_price('book', 2079)


Ruby/Ruby on Rails/model/5分でわかるActiveRecord - PukiWiki

モデル.findで、名前がMr.C、年齢が30歳のレコードを検索

friend = Friend.find_by_name_and_age("Mr.C", 30)


2005-11-13 - きんきん日記


Ruby に挑戦

Ruby配列は賢い

$ irb

irb(main):001:0> a = [ 'dog', 'cat', 'sheep', 'horse' ]

["dog", "cat", "sheep", "horse"]

アルファベット順に並べ変えたいときは

irb(main):004:0> a.sort

["cat", "dog", "horse", "sheep"]

順序を逆にしたいときは

irb(main):005:0> a.reverse

["horse", "sheep", "cat", "dog"]

アルファベット順に並べて、順序を逆にしたいときは

irb(main):006:0> a.sort.reverse

["sheep", "horse", "dog", "cat"]


[Ruby]Ruby Python の比較

2007-02-08

家鴨

http://anond.hatelabo.jp/20070208132935

Javainterface相手ならともかく、C++のtemplateに対してduck-typingを持ち出すなら、テストの書きやすさをセットにしないと負けるよ。

2006-12-18

クロージャの代りに無名クラスを使った場合

元記事:

http://www.arclamp.jp/blog/archives/marulec2006_2.html

http://d.hatena.ne.jp/t_yano/20061216/1166296467

こんな感じですか?

public interface Executable <T> {
    void execute(T argument);
}

public class IterationExecutor<T> {
    private Collection<T> collection;
    public IterationExecutor(Collection<T> collection) {
        this.collection = collection;
    }
    public IterationExecutor(T[] array) {
        this.collection = new ArrayList<T>();
        Collections.addAll(this.collection, array);
    }
    public void each(Executable<T> e) {
        for(T element: collection) {
            e.execute(element);
        }
    }
}

public class IntegerBuffer {
    private int value = 0;   
    public IntegerBuffer(int value) {
        this.value = value;
    }
    public void add(int number) {
        this.value += number;
    }
    public int getValue() {
        return this.value;
    }
}

public class Sample {
    public static void main(String[] args) {
        final IntegerBuffer total = new IntegerBuffer(0);
        new IterationExecutor<Integer>(new Integer[]{1,2,3,4,5}).each(
            new Executable<Integer>(){
                public void execute(Integer it) {
                    total.add(it);
                }
            });
        System.out.println(total.getValue());
    }
}

importなどは省略しました。

Sample以外は再利用可能なので……いやどうだろう

ログイン ユーザー登録
ようこそ ゲスト さん