はてなキーワード: ソースコードとは
私は、ずっと IT 技術者として飯を食ってきたが、仕事が楽しいと思うことがあまりなかった。その原因について考えてみる。
私は、中学生のときにプログラミングを始めた。いまは40代なので、だいたい30年前からプログラムを書いていることになる。ただ、中学時代の私は、とんでもない「ぼっち」でプログラミング話で盛り上がれる友達がいなかった。しかも、書いていたプログラムも、開発ツールというマニアックなもので、ゲームとか楽しげなものに関心があまりなかった。プログラミングをすることは、ある種の修行のようなもので、決して楽しいことではなかったし、またそれは自分にとっては社会的な孤立の象徴であった。
社会人になった後、ひょんなきっかけで、IT業界に足を踏み入れ、気がついたら職業プログラマになっていた。才能があるのかどうかは不明だが、子供の頃からプログラムを書いてきた私は、まちがいなくデジタルネイティブであるとは言える。まあ、とにかく、コードを書くことを覚えるのに時間はかからなかった。
ただ、私はどうにもチームで仕事をするのが苦手だった。ITの仕事は、調整が多い。仕様変更は日常茶飯事だ。厳しい納期の下、ソースコードに変更を次々と加えるのはリスキーな行為で、関係者に深い信頼関係がないと、人間関係がギクシャクする。
私は、プログラムを書き始めた時、ぼっちであったので、「プログラミング=独りの作業」という思い込みがあったのかもしれない。それがゆえか、ソフトウェアの設計等に関して、他のプログラマと調整したり妥協したりすることが非常に難しかった。自分がいちばんうまくやれる、という思い上がりもあった気がする。そういうわけで、人間関係が険悪になることが非常に多かった。
最近のいくつかのプロジェクトで、喧嘩別れに近い体験をいくつかしたために、プログラミングの仕事をすることにトラウマに近い思いを抱くようになってしまった。
しばらく仕事を離れて休んでみて、いま思うのは、もうちょっと自分が柔軟になれないだろうか、ということだ。答えは決して一つではないはずだ。もう少し、他者の意見を尊重できる人間になりたい。そしてプログラミングの仕事をもっと楽しめるようになりたい。
プログラミングは、人間とコンピュータの間を取り持つ作業で、コンピュータのもつ潜在能力をこの現実社会で開花させるという重要な仕事である。時には、コードが社会を変えることもある。そういう意味でやりがいがあって然るべき仕事だとは思うんだよね。いまの私の課題は、この仕事をストレスをあまり感じずに楽しむことだ。
いったいどうしたらいいんだろうね。ペアプログラミングでもやってみるといいのだろうか?
ここ一ヶ月間私は気になって仕方がない。
もう一度言おう。sendとreciveだ。
誰かをお忘れではないですか。
(゚∀゚)ラヴィ!!
reciveから逃亡していたのだった。
ところで、私はSEだ。IT業界の雑用係として名を馳せている。エクセルシートでレポートを書き、エクセルで調査表を作成し、excelで仕様書を修正し、Excelでソースコードを打ち込んでいる。エクセルでチャットに励むのも、エクセルに目覚まし時計を頼むこともエクセルでコーヒーを沸かすことも、、、できる。そんなエクセル戦士たる我が日々戦っているものはなんであろうか。難解なシステムか?不毛なレビュー会議か?睡眠時間か?……いや、どれもそうであるが、どれもそうではない。一番は誤字脱字、二番目は文言の不統一だ。レビューで誤字脱字が一つ見つかると平均して五分時間が伸びる。たった六つで三十分だ。鬼の首でも取った勢いで指摘する人もいれば、淡々と告げる人もいる。だが、これだけは共通している。間違えれば、確実に時間が伸びる。
そこは本質ではない、そこはレビューで確認してほしい点ではないんだ。内心でどう喚こうと、口に出していかに取り繕うと、誤字脱字の指摘にレビュアーは時間を最大限に割く。どいつもこいつもだ。修正は終わるところを知らない。
今いる場所もまぁ似たようなところだ。どこも一緒。だが、IFなんつー物騒なところにアホくさいスペルミス。これはどういうことだ?使用箇所は軽くgrep検索しただけで200行以上。ソースコードのタイムスタンプを見るに八年前はすでにこのフォルダ…ディレクトリ名を使用していた。
これだけ省略形?
今気づいた。
聞いていて、こっちが間違っているような気がした。何でたかが一ディレクトリの名前が違うことに義憤とも私怨ともつかぬものを燃やせばならんのだ。アホらし、アホらし。
その数時間後、仕様変更の連絡違いで30ファイルのエラーログを修正しなければいけないことをレビューで告げられて、闇の炎は再燃することになる。何の因果から、レビュー議事録を送ろうと開いたメールボックスには、TOEIC団体申し込みの最終案内が入っていた。
少なくとも八年前、ディレクトリ名にreciveと名付け、魔のレビュアーの監視を全て逃れて、見事システムに組み込むことに成功した名も無きエンジニアよ。私が今、敬意さえ込めた眼差しで見つめていることをあなた様は知る由もないだろう。人が多ければ多いほどいい。そうすれば、猫は犬に変わり、日本語はJanglishになる。あなた様は確かに、間違いを正しさへ変えたのだ。工数、信用、評価、どれも欠けることなく。
凄いよ、くそったれ。
幼稚で愚かな底辺SEの一人より。
僕はプログラマーです。
でも僕のMacBookProには何故かAdobeのソフトウェアが入っています。
デザイナーの人がデザインファイルを.psdや.aiや.fw.pngのまま当然の様に投げて来るからです。
僕はAdobeのソフトウェアに精通しているわけではありません。
ですので複雑なレイヤー構造のファイルを切り出すのにはかなり時間を要します。
でもレイヤー構造の説明をしてくれるデザイナーの人は殆ど居ません。
デザイナー同士だとその複雑な構造でもやり取り出来るのかも知れませんが、僕には大抵よく分かりません。
例えば、Photoshopのエフェクトレイヤーが掛かっているボタンはボタンだけ切り出す時に凄く苦労します。
例えば、薄くシャドーが掛かってるデザインは素敵な質感を表現出来るかもしれませんが説明してもらわないとどこまで切り出したら良いか分かりません。
一所懸命頑張って切り出した画像でアプリを作っていたら「この部分が滲んでいる」とか「ここが1pxズレている」とか言われます。
僕はAdobeに精通する為の努力をしなきゃいけないのでしょうか?
そもそもAdobeのソフトウェアは高価です。 今なら毎月3000円払わなきゃいけません。
でも実際使う機会は月に2〜3回あるか無いかです。
一回の起動が1000円です。
じゃあデザイナーの人にも僕がソースコードのまま投げても良いのでしょうか?
Xcodeは無料です。 AppleのiOS Developerライセンスは年8400円です。
ビルドから実機へのインストールくらいならボタン押すだけで出来ます。
じゃあデザイナーの人にもGitでデザインファイルを共有して貰っても良いのでしょうか?
Gitは無料です。 レポジトリは僕が作ります。 GUIクライアントは有料かもしれません。
多少学習コストは掛かりますがcommitとpullとpushくらいならすぐ覚えられます。
デザイナーの人が数分で切り出せるボタンを試行錯誤して30分掛けて切り出す間、僕がコードを書けばデザイナーの人が8時間プログラムを書くよりも随分作業が進む自信はあります。
きっと何かしらのデザインルールでレイアウトされたデザインの座標を一個一個調べながらボタンを配置していく間、僕がコードを書くよりも、最初からこのボタンはここに配置するってレイアウト図を見せてくれればバグを一個や二個くらい潰せる時間が作れます。
デザインファイルを最初からpngで書き出して貰ってレイアウト図と一緒にくださいというのはプログラマーの怠慢でしょうか?
どう書き出すとプログラマーが使い易いか一番良いのか分からない、とよく言われます。
でも、最初に言ってくれればどういう風に切り出して欲しいか説明します。
もしかするとアニメーションを追加する為にレイヤーにしたり、書き出す構造が変化することもあるかもしれません。
それでも僕がどこまで切り出せば良いか分からないシャドーを書き出した方が良いのでしょうか?
AdobeのツールはGUIだから誰でも分かるのかもしれませんが、それはデザイナーの人が
self = [super init]; if(self) { [self setShadowImage:[UIImage imageWithNamed:@"shadow。png"]]; } return self;
別に上の謎の文字列だって適当な文字列じゃないんです。 きちんとした意味があります。 誰だってちゃんと分かるはずです。
ボタンが1px右が正解か2px左が正解かを判別するよりも簡単に間違ってるかどうか分かるシンプルなものです。
確かにAdobeのツールはよく出来ているので僕でも頑張れば使うことが出来ます。
でも、僕はAdobeのツールを使った時の生産性よりも、Stack OverflowやはてなダイアリーやClass Referenceと睨めっこしながらキーボードを叩いて居る方が生産性が高い人種だと思っています。
ただ、デザイナーの人がもう一手間かけて頂けるだけで、僕はもっとコードを書いたりデバッグ出来るし、結果的にプロジェクトとして良い物が出来上がるんじゃないかなというだけなんです。
デザイナーの人がAdobeのツールを習得するためにマウスやペンタブを触っていた時間を僕はプログラムを覚えるためにキーボードを叩き続けていたんです。
もし、デザイナーの人がもう一手間かけて頂けたら...
フォロー、フォロワー数はTwitter社が手動入力している - Togetter
これを見て、いろいろと考えさせられた。
普段我々プログラマはHTMLやそれに類するものを書くときに、
ソースコードをユーザに見られてもいいように、クラス名やIDをちゃんとしたり不要なコメントを残さないようにしたりしているが(もちろんコーディングルール等もあるが)、ユーザがそれを見たときにどう思うかについては配慮が足りないのではないかと思った。
たとえば、
<span>1234</span>
というHTMLを見たら、手入力していると思われても無理からぬことだ。
巷ではUIだ、UXだと言われているが、次世代のUI/UXはここまで踏み込むべきではなかろうか。
つまりHTMLやJavascriptのソースを見たユーザのことを考えるべきではないかと。
先程の例でいえば、
<span id="hoge"> <script type="text/javascript"> $("#hoge").text("1234"); </script> </span>
ちなみに、こんなとこにscriptタグ書いてるのは位置が対応している方が分かりやすいというユーザへの配慮である。
ただし、これでもちょっと勘の良い人なら、"1234"ってテキストをただ出してるだけじゃないの?と思ってしまうだろう。
それならば、もうちょっと飾り付けすればいい。
<span id="hoge"> <script type="text/javascript"> var foo = String.fromCharCode(49) + String.fromCharCode(50) + String.fromCharCode(51) + String.fromCharCode(52); $("#hoge").text(foo); </script> </span>
これだとどうだろう?ぐっと、それっぽさが増したのではないだろうか?
そしてこれが一番大事なことだけど、最初の例に比べて温もりが感じられるようになった。
私は普段Rails(erb)を使っているのだが、
<span><%= "1234" %></span>
私は30そこそこのしがない管理職でして、コードは最近書かない元プログラマーなんですが、管理職というものになって苦労することも沢山あるのですが、その中で最近一番苦労させられてるのが、一部のスマホアプリのエンジニア。
一般化するのもあまり好きじゃないのですが、偶然なのか、似た状況が立て続けに続いたので、傾向として捉えると共感してもらえる人も中にはいるのではないかと思ったり。
前置きが長くなりましたが、iPhoneやAndroidのアプリを作るエンジニアに最近多いなと感じるのが、ライブラリや他人のソースコードを組み合わせるだけの人。どうして動いてるのかも理解できず、ドキュメント読みながら実装したら動いて、それで満足してる人。
そのやり方で締切までに仕上げてくるなら問題はないんですが、仕上げてこない。いや、正確には、期日までには提出してくるがバグだらけ、といった表現が正しい。作った本人も、自分のソースコードを理解してないんだから、この辺り怪しいから重点的に動かしてみるか、といった危機感知も弱い。で、開発メンバーで動かす時にバグが大量に出て、みんなでバグ潰し。メンバーの時間がデバッグに費やされ、毎回、その人がいるプロジェクトは夜遅くまで開発することになる。
どこぞのベンチャー企業でバリバリコード書いてました!と言うもんだから任せてはみたものの、よくこれでコード書かせてもらえてたな、と思うぐらいの酷いコード。ベンチャーなのでスピード命なのでしょうが、どれだけ早く作っても、デバッグで時間が取られるようではダメ。クラス設計の知識はほぼゼロ。見よう見まねでコードを書いているだけなのでしょう。それはそれでいいことだとも思いますが、理解がついてきていない様子。
本人が勉強を怠けてるというのもあると思いますが、最近気付いたところとして、巷に溢れているスマホアプリの作り方を解説している本。私はあれが悪さをしているのではないかと思っています。さすがに年取ってるだけで管理職するのも辛いので、スマホアプリを趣味の範囲で作ってみたりしているわけですが、スマホアプリ関係の本は、だいたいが、そのOSの持っている機能の解説に寄っている。そして、そこに書かれていることを複写すればだいたい動く。OSの持ってる機能や、誰かが作ったライブラリをどのようにクラスに落とし込むか。そういったことを全く意識せずに実装に進むと、メモリは大量に食うわ、似たコードがいくつもあるわで、バグの温床としては最高ですね。
自分でいうのもあれですが、私のように、ある程度の現場で開発をしてきた人間であれば問題ないですが、初心者がいきなり、このような本を読み始めるのはよろしくない。ろくに勉強もせずスマホアプリの開発に入ると、結果として、既に存在するものを組み合わせるだけのスキルしか身に付かない。それでもだいたい動いてしまうし、ハイレベルなもの (OSやライブラリがすごいのであって本人はすごくない) ができてしまい、彼はすごい人だ、といった誤認が生まれてしまう。大きい会社とかであれば、ペアプロや長時間のコードレビューがあったりするので、変に知識が偏ってる人はそこで再教育されるのでしょうが、ベンチャーにいってしまうと、そういったチャンスもなく、気付けば中堅レベルの年齢になりつつも、残念なコードしか書けない人になるのでしょう。
iPhoneアプリで学ぶクラス設計、なんて本があってもいいのではないかと思う今日この頃。OSの機能を知る前に学ぶべき、とても大事なものだと私は思います。後、そういう人達をなんとかするのが、私の仕事の1つなのかなとも思います。
【Webサーバを作る】http://d.hatena.ne.jp/kmaebashi/20130804/p1
use Fcntl;
use strict;
use Socket;
use threads;
use POSIX qw(strftime);
use File::Spec::Functions qw(rel2abs);
my $thread = threads->new(\&serverThread, "");
$thread->join;
my $ret;
my %hashmap=(
"htm" => "text/html",
"txt" => "text/plain",
);
$ret = $hashmap{$_[0]};
if ($ret eq "") {
return "application/octet-stream";
} else {
return $ret;
}
}
my $documentRoot = rel2abs("D:/var/www/html");
my ($line, $path, @tmp, $ext, $data, $absPath);
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
bind(SERVER, sockaddr_in("8001", INADDR_ANY)) || die;
listen(SERVER, SOMAXCONN) || die;
while (accept(CLIENT, SERVER)) {
while (<CLIENT>){
$line = $_;
last if ($line eq "" || $line eq "\r\n" || $line eq "\n");
if (index($line, "GET") == 0){
$path = (split(/ /, $line))[1];
@tmp = split(/\./, $path);
$ext = @tmp[$#tmp];
}
}
print CLIENT "HTTP/1.1 200 OK\r\n";
print CLIENT "Date: " .strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime). "\r\n";
print CLIENT "Server: Sever03.java\r\n";
print CLIENT "Connection: close\r\n";
print CLIENT "Content-type: ". getContentType($ext). "\r\n";
$absPath = rel2abs($documentRoot. $path);
if (index($absPath,$documentRoot)==0 && sysopen(FH, $absPath, O_RDONLY | O_BINARY)) {
while ($data = <FH>) {
}
close FH;
}
close CLIENT;
}
}
コアモジュールだけ使った。
元ネタのJavaコードはディレクトリトラバーサルになってたんで、一応対策を盛り込んだ。
といっても絶対に外向けに動かさないように。無いと思うけど。
いろいろツッコミくれるとうれしいです。
単に、俺は中身も詳しく知ってるぜ、お前ら中身も知らずに使うな!
そんなのは単にレベルによるもので、実際Rubyを書けても各モジュール等が何を実際しているかは知らないわけで。
最初の方のコメントも見ると、Railsのソースコード全部理解してろ、って言いたいみたいだけど、
極論でもなんでもなくて、単にそのレベルで、各関数なりがどの様な働きをしてるか理解してれば良いだけなのに、
で、それ以上、お前は知ってるのか、って突っ込まれると、そんな極論は言ってない、って逃げる。
自分の知ってる所までは、なんでお前らそんなことくらい勉強しないんだ、と言い、
自分が知らない所は、そんな所は極論だ、別に知らなくても問題ない、
と理由もなく言う、
価格交渉で客が人月単価を一律半分に下げてくれって言ってきた。
高すぎるんだと。
まぁたしかにうちの単価は高い。通常の3倍程度だ。しかもスキル関係なく一律だ。
なぜならうちはISerでもないしソフトウェアハウスでもないからだ。ハード屋がソフトウェアくっつけて売ってるが、最近はソフト側の負担が大きくなって開発費のほうがでかい場合もある。
つまりその要求を1つ2つ削れば金額は下がる。
そしてその要求を出したのは客である。また、ソフトがなくてもハードだけでも使えるっちゃ使える。すげぇめんどくさいけど。
それで払えないっていうんだったら要求を撤回するほかないだろうと。
あと、スキルごとに単価変えるとか考えてくれなどと言われた。
一旦入れてしまっているシステムだし、うち以外にそれをやってる業者はいない。
ソフトは別段難しくないのでソースコードまるなげしても読めるかもしれんが、ハードとのつなぎの部分は結構えぐいはずだ。
多分ほかのところに頼んでもその納期でその予算ならよっぽど単価の低いところしか引き受けてくれないし、間違い無く炎上する。
二、三割なら交渉に応じますよ。
しかし、自分らが別に圧倒的な強者にあるわけでもないのにどんだけ強気なんだ、と思う。
この金額で払えないなら、あなた方はその機能使っちゃいけないんですよ。要求出せないんですよ。そういう分をわきまえるべきなんじゃないの。
うちは誰でもできるところは外注に出すけども相見積はとリこそすれ、単価を値切ったりはしない。出してきたら出してきたものではいそうですかというだけだ。
「無罪判決受け取った後もWinnyを修正してないから奴は悪だ!」みたいな主張が散見されてて,別にそれはいいんだけども,そもそもの疑問として,Winnyのソースコード(の入ったPC)って返却されたの?
Winnyのソースコードの入ったPCが押収された,というところは多分大半の人が知ってるとは思うんだが,それがどのタイミングで返却されたのかという情報が見つからんのよね.
で,返却されたとしても,それが最高裁の無罪判決後とかだったらおそらくHDDはクラッシュしてるし,そうでなくとも押収後の扱い如何によってはソースコードが失われてる可能性もある.
というわけで,その辺が微妙に疑問なわけです.
前回の記事「Web系の会社を解雇されて思った事」の方の読んで頂きありがとうございます。
去る6/28。現状進んでいたSNS系サイトのgoogle maps apiの切り替えを、1人月位1人でやっていました。やり終えたと同時にお仕事終了と言う事で、会社から去る事となりました。以前の記事のコメントにある通り、確かにあの後誰がメンテナンスするんだろう?(臨時で呼び戻すとか言ってましたが)。
id:aoi_tomoyukiさん お前がやめたあとに使えないコードメンテする身になってください。小さい会社って余裕ないから何でも屋にならざるを得ないし、そこが楽しいところだと思うで
あと前記事で○×ゲームのソースコードを掲載させて頂きました。掲載したコードにかなりの不備があったので、簡単に修正させていただきました。指摘をして下さった方ありがとうございました。
id:Shiakiさん ○×ゲーム、jQuery("a").clickってやってるから広告リンクをクリックしても○×付くよ。
id:miyadai454さん このマルバツゲーム、絶対引き分けにならない?
id:citrus_gingerさん ○☓ゲームのソースから察するに、「オブジェクト指向が苦手」以前の問題かと。他人のソース死ぬほど読んで死ぬほどコード書けば、やっていけるようになるかもね。
尚「広告をクリックしたら○がつく」のはまだ直せてませんが、引き分けの処理は無事に直す事ができました。広告につきましては、申し訳ございませんが仕様とさせていただきます。
反省点は二つあって、一点目は修正しやすいように直しておく点。二点目は計算量を減らした設計をすると言う点です。流石にn*nの盤面上で二重ループしまくってますので、計算量O(n^2)の処理がかなりの量含まれてます。n=100で試してみましたが、盤面生成にかなりの体感時間がかかってしまいます。又データーベースのレコードの件数が増えた時等でも、計算量の少ない手段を選ぶ必要があります。今後は出来る限りループをしない手段を選ぶ事を心がけていきます。
最も今まで受験した会社の面接官も「こいつたいした事無いな」と思っているでしょう。私のためにコードを見る時間を割いて頂いた事で、自分の立ち位置を認識できたように思います。本当にありがとうございました。
さて今の会社ですが、1年くらいしたら転職を考えていました。加え「このサイトは○○と言うソフトで作ったサイトだ」「○○君は元々能力が無かったから、10年勤続した」「DQNどもが」などバカにする対象を見つけてはバカにしまくる上層部とは気が合わなかったです。変に学歴学歴を言う上司だったので、バカじゃねーの位にしか思いませんでしたね。大人しくしていましたが、試用期間でクビにされた方がよかったです。そして会社の重々しい雰囲気が嫌で、それから解放されたと言うだけで気が楽です。
ただ当てが見つかっており、そこで仕事をすることになりそうです。しかし収入が一時的に無くなるので、東京の吉原等の総額16'000円のソープに行きづらくなるのが唯一不安です。横浜に巨乳系の姉ちゃんが居るソープを発見し、マジで行きたいです。又ソープを一時休止して、オーキッドシードさんやグッドスマイルカンパニーさんのフィギュアを買おうか少々悩んでます(笑)。
ともかくプログラムと女の子の体って聞かれると、やっぱり女の子の体です。でも女の子の体にぶっ込むお金のためにもプログラムは必要です。今後は大好きな女の体の為に勉強していく次第であります。
もともとは、2ちゃんねる系のまとめサイトを巡回して、Yahoo!ニュースのようなサイトを作っていました。(現在も鋭意開発中です。)
コンテンツの内容を解釈して自動的にジャンル分けをして・・・などと、出来るかわからない壮大なアイデアを実装しているので、いまだに完成時期が見えて来ません。
画像収集処理を作っている時に「これでエロ画像を集めたら面白そう」と思いついてしまいました。思い立ったら、すぐにやりたくなるのが人間の性というやつです。基本的な処理はほとんどできていたので、割に短期間で作成できました。エロ画像をどうせ集めるのなら、目的をもって役に立つサイトにしようと思い立ち、おなぬーをするためのWEBサービスにました。
作成したもう一つの目的として、月間10万PV程度のサイトを自分で運営したいという思いもありました。安直ですがエロ系のサイトであれば、それが可能なのではと考えた次第です。
せっかくサイトを作ったのですが、エロ系のサイトは告知をするのが難しいとう事実を作り終わってから知りました。私自身もブログをやっているので、そこでお知らせをしても良いのですが、ブログの趣旨にあわないのと、PVがとてつもなく低いという理由で断念しました。
匿名ダイアリーは、かなりのPVがあるので、作ったサイトの告知ができるのではと思い匿名ダイアリーを書いています。
せっかく作ったサイトですから、皆さんに利用してもらいたいし、役に立つサイトにしたいと思っています。ですので、サイトを見たらご意見をいただけたら嬉しいです。
もう、15年以上PHP(PHP FIと言う名称の頃からのユーザーです)でプログラムを作ってきました。PHPが持っている気軽さや気楽さは大好きなのですが、誰もが好き勝手なコードが書けるというデメリットもあります。プログラム言語にはある程度の厳しいルールがないと将来にわたってメンテナスしていけるプログラムを作るのは困難です。
せっかく新しプログラムを作るのだから、新しいプログラム言語で作ることにしました。
ある程度、厳しいルールがあって、誰もが同じようなプログラムが作れる言語はなんだろうと考えていくとPythonとRubyが候補に上がりました。
Rubyはできるだけ手数を少なくプログラムを作ろうという基本思想があります。私の感覚では、熟練したプログラマが使う言語という印象が強いです。
Pythonは、プログラマのレベルを問わず、熟練プログラマも新人プログラマも同じようなプログラムが書けるプログラム言語という印象でした。
私自身も将来誰かに教えられるようにと、今回はPythonを使用言語として選択しました。また、裸のPythonで書くのも面倒そうですので、フレームワークとしてDjangoを選択しています。
「おなりん」は、そんな思いを乗せて以下の環境で構築しました。
サーバー | さくらのVPS(1G) |
プログラミング言語 | Pytyhon 2.7.5 / Django 1.5.1 |
その他ツール | Bootstrap, jquery, wookmark, colorboxなど |
Webサーバー | Apache 2.2 |
データベース | MySQL 5.5 |
「おなりん」は、登録されたまとめサイトを定期的に巡回して、各エントリーから記事内の画像URLを抽出しています。取り出すのはURLだけで、画像の直接ダウンロードは行いません。ですので、リンク元の画像がなくなれば、「おなりん」からの表示もなくなります。
各サイトのエントリーはRSSから取得しています。各記事のHTMLをPythonライブラリurllib2を使って取り出し、HTMLから正規表現で画像URLを抽出しています。
サイトによっては記事画像のHTMLに決まった書き方がなされていないために、余計な画像を抽出してしまうこともあります。おかず画像の抽出精度は徐々に上げて行きたいと思ってます。
当初「おなりん」は、Amazon EC2(t1.micro)で構築する予定でした。構築までは完了したのですが、今ひとつ体感速度が上がらないのです。すでに利用しているさくらにVPSと比較したところ、3倍くらいの速度差(abコマンドの実行結果)があったので、Amazon EC2の利用を諦めました。
Amazon EC2は1年ほどの無料利用期間があります。これを過ぎると課金されていくのですが、Amazon EC2(t1.micro)を1ヶ月動かし続けると4000円近い料金が必要になります。さくらのVPS(1G)は1年で1万円程度です。3倍早くて価格は4分の1なら、チープな私はさくらのVPS以外選択余地がありません。
でも、拡張性を考えるとAmazon EC2も捨てがたいのです。
Pythonはインデントでプログラムブロックを表すます。他の言語のようにカッコを使いません。IFやFORを使ってインデントが深くなると、どんどん右寄りになってきて、全体的に斜めなプログラムが出来上がります。最初は見慣れずに違和感を感じましたが、慣れればそうでもありません。
ただ、ネストしたIFでインデントが深くなりすぎると、インデントの位置で意図しない結果が出るので注意が必要です。慣れてしまえば、使いやすい言語です。
Djangoは良いフレームワークだと思います。モデルを定義してしまえば、モデルのメンテナンスを行う、管理画面が一緒に生成されます。テンプレートタグなどを自作すれば、かなり深いところまで手を加えることが可能です。慣れれば扱いも楽なので個人的には気に入っています。
「おなりん」は、まだ作ったばっかりで、テストもまだ十分に行えていません。ですので皆様にも使っていただき、問題点があれば教えて頂きたいと思っています。開発しているマシンがmacなのでIE系のテストは皆無です。IEの方、ぜひともレポートをください。
レポートや感想などがありましたら、「おなりん」のサイトの下にある「お問い合わせ」リンクから送付をお願いします。また、巡回してほしいサイトも募集しています。ただし、日本国の法律に準拠したサイトに限らさせて頂きます。
機能的に今後は、画像の人気ランキング機能を組み込む予定です。また、サイト運営の足しにしたいのでひっそりと広告を入れます。
また、リクエストがあれば、ソースコードをGithubに公開したいと考えています。
長文を読んでいただき、ありがとうございました。
試用期間3ヶ月が過ぎようとしたある日(5/27)の事。社長からいきなり「今月一杯で辞めてもらう」という宣言を食らった。通例解雇の予告は30日前に行われねばならず、いくらなんでも急過ぎるだろと思ってしまう。ここからは入社してからの経緯を簡単に話そうと思う。
今回入社したのは社員数10人未満の小さい会社だった。まずCakePHP+MySQLを使ったCMS回りの機能の追加の他、初めてJavaScriptやJQueryを担当する事となった。全く触った事の無い言語だった。基本を覚えながら、分からない事は先輩に聞きながらの作業で、いよいよ一案件が完成し、JQueryのほうも○×ゲームを作る位は覚えた。
しかしながら既存のソースコードの改修が苦手なのもあって、案件のJavaScript回りで時間がかかってしまった。例えば最後の案件はJavascriptのクラスを使った案件だった。上記のリンクのコードを見れば分かると思うが、自分はオブジェクト指向が苦手で、Javascriptのクラスの仕組みをする事が出発点だった。
最終的に「一つのトップページで一ヶ月をかけるのは費用対効果で、君を雇う意味が無くなってしまう。大きい企業なら補填が聞くのだが」と言われてしまったわけだ。労働契約の面では配置転換が出来ない事による普通解雇に当たるはずだ。
しかし仕事面では「俺じゃなくお前のせいだろ」と言ってやりたい。ある案件のホームページは途中まで自分が作っていた。しかし三月中旬、突然上の思いつきで仕様変更が入り、プログラムの大部分を修正しなくてはならなくなってしまった。先輩にも「無理なら無理と言っていいんだよ」と言われた程だった。その案件そのものの期限も一ヶ月延びたのもあり、他の案件でやらねばならない事も後ろに伸びてしまった。それがずるずる来て今日に至る。
「家は小さい会社だから何でも出来る、やりたい人を募集している。ミスマッチだ」と言われたが、フロントエンド/バックエンドの両方できる人ってそういないと思う。無論できる人もいると思うが、それが出来るような人は今の会社に来ないと思う。
かくいう俺も俺はそこまでプログラムが得意ではないし、何でもできる訳では無い事を考慮してくれればありがたかった。正直やってられない気持ちで一杯で、この業界から身を引く事を真剣に悩んでいる。
まだ自分はそんなに経験がある方だとは思ってないけど、その現場は改善点がいくつもあるように思えた。
それから一ヶ月近く経ったいま、ここはどうしようもないのではないか、という意識が占めつつある。
でもそれでもまだ自分の中にまだ熱意と呼べるものが残っているうちに。
CIをちゃんとまわしたい。
単体テストを作りたい。
人力テストをやめたい。
テストなしで変更するの怖い。
営業がプロダクションを触れないようにしたい。
脆弱性対策について考えたい。
せっかくサービスを自分たちで売ってるんだから、もっとちゃんとしたものを提供したい。
でもなんでなんだろうな、自分がそういうことを言うと否定されてしまう。
目の前の「しなければならないこと」を理由に、先送りといいつつ。
どうしてそんな短期的なことしかしないんだ?
確かにいまやるべきことは確固として存在していて、お金をもらうことは必要だけれども、
それより何よりシステム内のどこか一カ所ひび割れただけで、すべてなし崩し的に崩壊するSPOFだらけなのをどれだけ理解しているのだろうか。
自分のなかで急速にやる気がなくなっているのがわかる。
それでもまだゼロじゃない。
だからまだできることをやりたいと思っている。
何とは言わないが、ひとつの区切りが付いたタイミングなので、追記する事にした。
ウサギィが社外のエンジニアを安く買いたたいた件が、じわじわと話題になっていた当時、僕の経験を元にウサギィ社長と会った話を記した。
今、ウサギィという会社は変わっているかもしれないし、昔のまんまかもしれない。
ウサギィの社員をRubyのイベントで見かけるようになった。そして社員が執筆したRubyの書籍も、良く出来ている。
HTML5 Japan Cup 2014では、ECサイト賞と花王賞を獲得した。プロダクトも素晴らしいと思います。
HTML5+画像認識(HTML5とか勉強会LT) - SSSSLIDE
画像解析の機能を分離したサービスがリリースされた。大変よく出来ている。
最先端の画像認識技術が簡単に試せる『画像解析できるマン』をリリース致しました。(2015/5/19)
Googleでウサギィとぐぐると、公式サイトの次にこのエントリーが表示される。
申し訳ない。という気はさらさらない。当時書いたこのエントリーを覆す気はないし、当時僕が感じた社長のニヒリズムと態度は、すこぶる不快だった。
が、あのとき社長が言い放った「何も話す実績はないし、聞かれても話す事はない」という状態ではなくなったと思います。
(別に守秘義務を破れと言っているのではない。来客に対して、品定めするような目でありながら、己の手の内を明かさず、悪辣な態度に腹が立ったのである。いくら守秘といえど、ものには言い方がある。)
今のウサギィには、いくつかの公開された実績があるし、コミュニティでの活躍もある。
これからも頑張って欲しい。ウサギィの今後を、応援してます!!
追記はここで筆を置き、以下は2013年5月当時のままとする。
----------
http://anond.hatelabo.jp/20130510163712
id:ssig33さんが「山岸和利の話」というエントリーを公開しているから、
彼についての技術力とか、金額が妥当かどうかは、そっちを参照。
それはともかく、僕も昔、ウサギィに見学に行ったけれども、良い印象を持たなかった。
とにもかくにも、社長の態度が悪いです。見くびっていたのでしょうね。
こちらの技術力とか、経験とか、雰囲気を見て、下に見る感じでした。
非常に失礼な応対だったので、同行者がいなければ、さっさと帰ろうと思ったほどです。
イラツキ半分、どうしようもないなぁ半分という微妙なきもちで、彼らの会話を見ていました。
それでいて「ウサギィでは何を作っていらっしゃるんですか?」と問うと「守秘義務だから」って、何も言わぬし。
そんな会社に、なぜ自分の実績や経験を話さなければならないんだ。って気分になりました。
いや、守秘義務は守秘義務だけどさ。君らの手札を見せないで、なんでこっちの手札を見せる必要があるんだろうね。
それとも「コイツには手札をチラ見させる必要もない」って判断をされただけかもしれませんが。
そもそもこちらは、ウサギィの守秘義務案件を聞いて、どうこうしたい訳ではない。
お話のとっかかりというか、コミュニケーションとして「どんなお仕事しているのですか?」と尋ねるのは、「今日はいい天気ですね」と同等レベルだと思う。
要するに気を遣っているだけなのだ。それに対して「守秘義務なんで」の一言シャットアウトは、さすがにコミュ力低すぎてびびる。
守秘義務と職業倫理が結びついている、医者や弁護士だって、もっとましな返答をする。
どうせ僕以外にも多くの人が同じ質問をしているだろうから、トークスクリプトを考えた方が良い。
小規模ベンチャーにありがちな、技術力至上主義的な考え方を持っていらっしゃるようでした。
でもさ。はっきり言って、飛び抜けて技術力持ってる。って訳じゃないよね、ウサギィの中の人。
もちろん、得意不得意分野はあるだろうけれど。
何か専門分野の特許を持っている訳でも、それに相当するような研究開発をしているわけでも、
特定の業種に特化してソフトウェア開発しているわけでも、不特定多数の人に使われるソフトを公開しているわけでも、
オープンソースの世界でバリバリ活動しているわけでもなく(WikiにRailsの機能紹介があるくらい)
何やっているかと言えば、いろいろな会社の社内ツールとか作ってるんだよね?ウサギィって。
でもさ、ウサギィ規模の会社が、外部非公開&守秘義務縛りの社内ツールしか作っていないって、結構つらいんじゃないかな?
7年(だっけ?)も会社やってるのに、訪問してきた人に、1つも話す実績がないって、なにやってきた会社なんだよ。どういう契約なんだよそれ。
そりゃ、お邪魔しても海鮮丼食べておしゃべりして帰るしかないよ……。
別にコンサルタントみたいなこと言うつもりもないが、会社として軸足持った商品開発した方が良いんじゃないでしょうかね。たぶん。
その全部がプロフェッショナルとして価値を提供できているんだろうか。あの人数で?
もしそうなら、すごい逸材ですね。かずー氏も町裕太社長も。
それから。会話でも採用情報でも、「デザイン、デザイン」ってやたら言ってるけれども、
ウサギィのウェブサイトは何年前のデザイン・センスだよ!!!!リニューアルしてこれかよ!!!!
いくらペーパプロトタイプで裏側設計をデザインしても、表向きの表現力がないなら、ただの残念ウェブサイトです。がんばりましょう。Adobeも月額5000円で使えるんだし。
えーっと。技術力がある人って、ウサギィみたいなことやっている会社に魅力を感じるんでしょうか?どこに?
ウェブサイト、リニューアルしてました。この増田を読んでくれたのかなぁ。おーい、かずー氏、みてるー?
今風になって、なかなかシャレオツだと思います。さすが、ソースコードも綺麗です。
まぁ、この記事を書いた当時は糞ダサかったって事で。
悪いコトばかり書きすぎるのもアレだ。かわいそうだ、うん、ごめん。さて業務について良さげな点を記そう。
開発環境の構築&業務フローの最適化については、しっかりしていると思いました。
こういうの、小さい会社ほど小回りがきく分野ではありますが、誰かが旗を振って導入しないと難しい。Gitとかペーパプロトタイプ導入とか。
別に珍しい手法を取り入れている訳ではなさそうだけれども、ちゃんと業務が流れているんだなと一目で分かった。
大きな会社であっても、ダメな所はてんでダメ。その点、ウサギィの業務フローはしっかりしてるように見えた。
そのあたり、かずー氏の得意分野なのでしょうか。
これが出来ている会社だと、従業員が増えた時の進化が早くなります。
渋谷あたりでソシャゲ作ってる弱小ベンチャーとかでよくある話ですが、
アプリがヒットしてエンジニアを大量採用したものの、情報管理や連携が取れなくて死屍累々って例は無数にあります。
しかし、もしかしたら。ウサギィにはそういう問題とは無縁かもしれません。
いつかウサギィに主軸事業ができ、会社が大きくなる時、比較的スムーズに開発業務を拡大できるのではと感じました。
「Twitterは宣伝道具。広告費がないから、Twitterで人を呼んで、優秀な人材を集める」
と言っていましたし、まぁそれもひとつの戦略なんだろうな。と思うものの、
人を安値で買い叩いてるっていうなら、もちろん感心はしない。
まぁ、そこはあまり僕の知っている範囲じゃないから、控えるけど。
ウサギィにインターンやらで行く学生が、僕の周りにいたら、止めるねえ。
今回の噂もあるが、それ以上に、ウサギィは体制が整っていない会社だ。
ウサギィ社長が言っていた「女性こそ、プログラミング能力を身につけるべき」という考えや
独立志向の思想(Independentな考え方)は、大変結構なことと思う。
せいぜい、ベンチャー企業の中身をちょこっと覗かせて、場所を提供して、終わり。ってレベルでしょう。
この業界、女性エンジニアというだけで、大した技術力や経験がなくても、引く手あまた。
教育してくれるところも、資金があるところも、いろいろあるからね。
ウェブサイトで「ウサギィの女子力!!」とか書いちゃってるけれど、女性エンジニアのタマゴは別にこんな会社に行く理由はない。
結局のところ、ウサギィは何をやっているかわからない、すこしTwitterで人気な、零細企業なのである。
まぁ、それを魅力に感じて働きたいという人は、行けば良いと考えますが。職業選択の自由です。
ウサギィの人達がよく使う「おもしろいことを、仕事にしたい」って、なんなんだろうね。
僕には、君たちの考える面白さが、分からなかった。伝わらなかった。
直接話したかずー氏も町社長も、リアリスティックでニヒリズムに満ちた発言ばかりだった。
Twitterでは、クールで知的なキャラクターにうつる。しかしリアルで会うと、ただの尖った思想のコミュ症ではないか。
君たちに実際に会って「ウサギィ、面白い、クールだ」って感じる人、どれくらいいるんだろうか。
経営者の役割って、一緒に働く人に、なにかしらの夢やら目標やら、見せるものじゃないかな。
そういう点で、ウサギィってどうなんだろうね。
ステッカーを大量に配りまくるのも、Twitterで知名度得るのもいいけど、
本気でブランディングしたいなら、もう少し考えた方が良いんじゃなかろうか。
君たちの目指す"おもしろさ"って、なんだい?
"Hacker News"のコメント欄から気になるものがあったので全訳してみた。
文系からプログラマーの道に入った自分的に、琴線に触れたので。
ニューヨーク証券取引所のとある一企業の株式売買の様子を0.5秒だけ映像化した動画を見た人の感想です。
https://news.ycombinator.com/item?id=5678116
いつだったか、ソースコードを全部印刷したことがあるよ。その時のソースコードはASP、HTML、CSS、Javascriptで、僕の雇い主の最も重要なWebサイトのホームページを1ページ読み込んで出力したんだ。僕は紙を一枚一枚テープで繋いで壁に吊り下げた。
同僚と貴重な意見を交わすことができたね。技術に明るくなかったみんなは(大半はそうだったけど)凄く驚いてたよ。彼らが毎回ホームページをロードするごとに(1秒以内の短い時間で)こんなにも多くのテキストが読み込まれ、実行されることにね。
そんなことをしてどんな意味があったって?プリントアウトしたことが僕たちの会話に一定した感情的な緊張をもたらすのに役立ったんだ。1ページを読む裏で行われてる複雑なことに直に対面したことで"今すぐにやって、簡単でしょう"とプロジェクトに要求することが困難だってわかったんだよ。
同様に、高頻度で取引を行う果てしないスピードと複雑さに焦点をあてたこの話(注: HNのトピックです)も、疎外感や恐怖といった感情的な緊張をもたらすのを助けてるね。"誰もコントロールできない技術の暴力を解き放ったかもしれない"と、反射的にフランケンシュタインやターミネーターと争ったのと同様の契機になるかもしれない。
でも、テクノロジーに対して思慮と公正さをもって対峙すれば、もちろん、そんな気持ちは起きないのだけど。僕らのくだんないパンフレットのようなウェブサイトが行き着く先はそんなに複雑じゃないと思ったよ。
One time I printed out all the code--at that time ASP, HTML, CSS, and Javascript--that got executed for one page load of the homepage of my employer's primary website. I taped the pieces of paper end-to-end and hung them on my wall.
It made a great conversation piece with my coworkers. Non-technical folks (most of them) were astounded that so much text was being interpretted and executed every single time they loaded the homepage (in less than a second).
What was the point? It helped set a certain emotional tone to our conversations. Folks found it a lot harder to demand their project be done "right now, it's easy" when directly confronted with the complexity behind a single page load.
Likewise, stories that highlight the immense speed and complexity of high frequency trading help set an emotional tone of alienation and fear. It helps trigger the same reflex Frankenstein and The Terminator played off of: "maybe we're unleashing technological forces that no one can control."
But of course if you are well and truly versed in a technology, that feeling goes away. I knew that our crappy brochure website was not very complicated as websites go.
後半になるほど、訳が拙くなっていくのは大目にみてください。
たぶん多々あるはずの間違っている箇所、ニュアンス違いは突っ込み大歓迎です。
インフォグラフィックス、なんて言葉ができて久しいけど(今じゃこんなサイトまであるんだね)、
僕が初めてこの言葉を知ったのはウェブではなく、生物学だった。
バイオインフォマティクスについて、東大のサイエンスカフェに聞きに行った時、
この学問は「生物」と「情報」が融合した学問だけど、さらに美術と融合させるような試みも
欧米ではあるんですよ、みたいな話を聞いて、美しく染め上げられた生体写真や幾何学的な何かのノードの写真に
研究成果をこうやって示す方法があるのだと衝撃をうけたのをよく覚えている(...内容は忘れました、すみません)。
そんなインフォグラフィックスは、美術的なセンスと才能と技量が要求されるけど、
ただ単にプリントアウトして見せるだけでも、クライアントを説得するには十分だと
このコメントを読んで、その素朴さにはっとなった。
試しにTwitterのホーム画面でソースコードを見たら、2200行あった。
これにロードされるjavascriptのライブラリやCSSを加えたらどうなってしまうんだろう。
僕は今、テクノロジーの詳細がわけ分からないという普通の人の感覚を抱きながら一方で、
ティム・バーナーズ=リーがWWWを考案してから積み上げられてきた技術的資産を前に途方に暮れている。
おそらく技術屋として中途半端だから、こんなないまぜな気持ちなのだけど、
いやまあ、実際良くある話だし、ある程度仕方ない状況なんだろうけれど、ともかく早いうちににどうにかしないと君のほうが潰れちゃうよ。良いプログラマが燃え尽きてしまうのは悲しいので、上手く受け流して欲しいと思う。あ、あと「同僚と比べてどうだ」ってよりも「自分の精神状態がヤバい」ってことを認識したほうが良い。自分でも気づいるだろうけど、「自分が仕事してるんだから相手もすべき」ってのはブラックへ一直線だしあんまり意味のあることじゃない。「不公平な扱いを受けている」と君が思うことで精神がすり減って、生産性が落ちたままになることが最も大きな損失だ。
まず、仕事量についての客観的な指標についてだけど、これはもう自分で書いてるだろw
1,2は十分に客観的な指標だし、どちらも上司なら確認できるはずだ。
もちろん上記の指標は「個人のクリエイティブな仕事の量および質を総合的に判断できる単一の尺度」にはならないが、まだ人類はそんな素晴らしい尺度を知らない。だから、尺度の正当性はあんまり気にしなくても良い。定量的で反証可能な数値なら十分だ。
1,2を示すだけでも自分の仕事が多いことは説明できる。上司がちゃんとコードの読み書きができるようならば3についても判断できるだろう。
さすがに1~3の全てにおいて、3人のグループ全体よりも君が上回っており、かつ報酬が彼らと変わらないようならば、それはやっぱり不公平なんだろうな、と思う。
だけど不公平であることを指摘しても、上司は、「今はプロジェクトが大変なときなんだ、君には申し訳ないが、ちょっとだけ頑張ってくれ」とか言うだけだろう。そしてその「ちょっと」は、少々の断続を挟みながらもかなり長く続き、多くの場合、退職する日まで終わらない。
そして君が忙しい状況は10年続き、
―君は―
社畜と人間の中間の生命体となり、永遠にSE業界の闇をさまようのだ。
そして辞めたいと思っても辞められないので
という状況になることは想像に難くない。カーズじゃなくてもおんなじだから気にすんな。
まぁそんな深刻かつ軽妙なジョークはともかく、問題の本質は作業量ではなくて、「プロジェクトが大変な状況である以上は作業が多くても断れない」とか、「そもそもプロジェクトが炎上するのはスケジュールが管理できていないだけなので自分とは関係ない」って言えないとか、「少ない休みで働くならば相応の報酬を要求する」とかいう議論ができないということだ。宗教上の理由で。
労使が本来は対等な雇用契約でしかない以上、あなたが納得いくまで議論して、適切な人員を配備してきっちり休めるようにするとか、休日出勤や生産性の対価としてがっぽり報酬を貰うとかするのが当然の姿だ。ただ問題なのは、職場で君がそれを主張しても、相手はきょとんとして困惑し、次に半笑いで「そんなことができればいいんだけどね……」とか不思議な言葉を発しつつ曖昧に誤魔化すだろうということだ。現代日本においてその曖昧なごまかし力はものすごく強い。仮にプロジェクトが失敗したり、そのお陰で自殺者た~っくさん出たりしても、翌日にはまた平常運転を続けてしまうほどである。これは恐ろしい社畜魔法の一つで、楽しい仲間が「ぽぽぽぽ~ん!」と魔法の言葉を唱えることで全ての責任の所在が有耶無耶になる、という効果を持つ。
このような文化の中で、君の取れる現実的な手段は以下の様なものだ。他にあったら教えてくれ。
まあ、とりあえず現実的な方法としては上司に「この状況が改善されないなら、ある日突然、僕は旅に出るような気がします。きっと何処かで幸せに暮らしていると思うので、探さないでくださいね。」とか言ってみれば良いと思うよ(なげやり
早速渡されたソースコードを確認した。
Gitで管理されていて安堵したのもつかの間、コーディング規約などが統一されていなかった。
そういう些細なところが気になるせいで、全体を理解するのがなかなか進まない。
さっさとなんとかしたい。
こういうのも可読性が低いというのだろうか。