はてなキーワード: Perlとは
いくつか考えてみた
(問1)高階関数と再帰関数を必ず使って数値を要素とするリストの要素の総和を求める関数を書け。ただし高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。
(問2)二つの引数をとり二つのうち大きいほうを返す関数と高階関数、再帰関数をつかって数値のリストの最大値を求める関数を書け。ただし高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。
というのは簡単すぎるか?簡単すぎるなら
(問3)高階関数と再帰関数を必ず使ってある数値に5を足し、10かけて2で割った数を求める関数を書け。ただし高階関数を使うという要件と再帰関数を使うという要件は同じ関数で満たしてもよい。
こっちの方がいいかな。でもトリッキーすぎる気もする。
一応問題を出したので、SchemeとPythonで自分で想定している答えを書いておいた。はてなではSchemeが人気のようなので、あまり知らなかったけど関数言語ではSchemeで書いておいた。Pythonで書くのはSchemeだけだとわかりにくいので、なにかスクリプト言語で書いておこうと思ったから。Rubyの方が人気なので、はじめはRubyで書こうと思ったけど挫折した。だれかRubyで書いてくれないかな・・・。コードオブジェクトってなによ。というか関数はオブジェクトなのに引数にできないの?なんで?(以下疑問と愚痴の嵐なので略)Perlは古株が多くてユーザー数も多そうだけど、・・・その・・・無理です・・・。あの言語仕様はやる気がしない。ぶっちゃけ理解できない。Pythonを知らないひとは多そうだけど、知らなくてもSchemeよりは感じは掴めると思うのでPythonでも書いておくことにした。
http://anond.hatelabo.jp/20071110215936
http://anond.hatelabo.jp/20071110220132
これで大部分のひとがこの問題に興味をもたなくて解答するひとがいなくても、興味を持ったひとは安心だね!
追記:
問3で次のは無しとしておきたい。
(define continuous-apply (lambda (lst obj) (cond ((null? lst) obj) (else (continuous-apply (cdr lst) ((car lst) obj)))))) (define plus5 (lambda (num) (+ num 5))) (define times10 (lambda (num) (* num 10))) (define divide2 (lambda (num) (/ num 2))) (define plus5-times10-divide2 (lambda (num) (continuous-apply (list plus5 times10 divide2) num))) (plus5-times10-divide2 2)
def continuousApply(lst, obj): if lst: return continuousApply(lst[1:], lst[0](obj)) else: return obj def plus5(num): return num + 5 def times10(num): return num * 10 def divide2(num): return num / 2 def plus5_times10_divide2(num): return continuousApply([plus5, times10, divide2], 2) plus5_times10_divide2(2)
唐突にClass::Data::Inheritableのソースコードについて説明してやんよ。
使い方とかの説明はこの辺でも読んでから出直して来い、ごるぁ!
まぁとりあえずソース見てみろ、下記にはっつけてやっからよぉ!
1: package Class::Data::Inheritable; 2: 3: use strict qw(vars subs); 4: use vars qw($VERSION); 6: $VERSION = '0.06'; 7: 8: sub mk_classdata { 9: my ($declaredclass, $attribute, $data) = @_; 10: 11: if( ref $declaredclass ) { 12: require Carp; 13: Carp::croak("mk_classdata() is a class method, not an object method"); 14: } 15: 16: my $accessor = sub { 17: my $wantclass = ref($_[0]) || $_[0]; 18: 19: return $wantclass->mk_classdata($attribute)->(@_) 20: if @_>1 && $wantclass ne $declaredclass; 21: 22: $data = $_[1] if @_>1; 23: return $data; 24: }; 25: 26: my $alias = "_${attribute}_accessor"; 27: *{$declaredclass.'::'.$attribute} = $accessor; 28: *{$declaredclass.'::'.$alias} = $accessor; 29: } 30: 31: 1;
短いソースだなーこれ。でもな、なめんじゃねーぞ。短いけど色々な技術が盛り込まれてんだよコレはよぉ。
ハイ、まず3行目。
かるくstrictについて説明してやんよ。心して聞けよオマエラ。
strictっつーのはだな、つまりPerlにおける曖昧な部分をすこーしだけチェックしてくれるスグレモノなんだなコレが。
とりあえずざっくり言うと三つの機能があってだな、下記のよーに書くわけだ。
use strict 'vars'; use strict 'subs'; use strict 'refs';
varsってーのは簡単に言うとmyとかourとか宣言しろボケってやつですわ。
subsは裸体は許さんってやつですの、$とか%とかついていない裸の文字列をエラーにしてくれんだよ。
refsってのが一番やっかいな代物でな、これはムツカシイ言葉で言うとシンボリックリファレンスってんだが、要は変数名に変数を使うとエラーにしてくれるってこったよ。
で、これら全部ひっくるめてuse strict;なんだな。わかったか?オラ!
ちゅーことはだ、3行目を見ると意図的にrefsだけ外してるのがわかるよな。
つまりコレはこのコードのどこかで変数名に変数を使うってことを明示していることにもなるわけだ。けけけ。
あーもういいもういい、次だ、次。
4,5行目を見てみろよ。今時our使わずにuse vars使うなんてどんだけー。
ははは、まぁまてよ。
ourってのは明示的にグローバル変数を定義するもんなんだが、このourってやつが導入されたのがPerl5.6からなんだよ。
Perl5.5のころはourなんてなかったからグローバル変数定義すんのにこのuse varsを使っていたわけだ。
つまりこのモジュールはPerl5.5環境でも動くように配慮しているわけなんだな、ちゃんちゃん。ほほほ。
あーもう全然すすまねーよ。チクショウ、が、ま・・・・。
で、11-14行目。これはref関数使って$declaredclassがオブジェクトだったら死ぬって処理だ。
require CarpっつーのはCarpモジュールを動的にロードしてるっていうことだよぅ。
で、Carp::croak関数使ってエラー文はいて死ぬ、と。ちなみにこのCarp::croakってはまぁdie関数みたいなもんなんだ。
違いとしてはエラーの発生した原因を呼び出し元の奴のせいにして自分は悪くないんだよってアピールすることかな。まぁ実際使ってみりゃわかるよ。
さぁ、16行目。本編突入だ。長かった。長い道のりだったなお前ら。
sub {}ってのは無名サブルーチン(関数のリファレンス)ってやつだ。で、ここで注目すべき点はただひとつ!!!!!
19-23行目あたりをぼーっとみてると$declaredclass, $attribute, $dataっていう変数を使用していることがわかる。
これらの変数は9行目で受け取ったmk_classdataへの引数だ。
ここで問題が発生する。
myで宣言された変数の賞味期限はスコープの終端だ。それはわかるな?
つまり9行目で宣言された$declaredclass, $attribute, $dataといった変数どもは29行目のスコープの終端で消滅してしまうわけだ。
しかし!その消えてしまうはずの変数どもをsub {}という無名サブルーチンの中で使用してしまっている!!!
これが世間一般に語られているクロージャという仕組みなのだ!!!!!!うはははははははh!!!
本来生涯をまっとうするはずだった変数たちが別のサブルーチンの中にまぎれてしまうとその別のサブルーチンが消えてなくなるまでは死ぬことを許されなくなるのである!!!ざ・不☆老☆不☆死!
なんたる奇妙奇天烈なことであるが、この現実を受け入れることによってお前らの道が開けるんだ!!!すげーだろぉがよぉ!!
ボクはッ、キミがッ、クロージャを受け入れるまでッ、殴るのをやめないッ!
さて、肝心の16-24行目のアクセサ部分の処理の解説だけども、
引数が渡されてなければ特になんの処理もせずに$dataを返している。$dataってのは死ぬことを許されなくなったカワイソウな変数君だ。
つまり、Class::Data::Inheritableってやつはアクセサに渡された値をどこで保存してるのかというと、紛れも無いこの$data君に他ならない。
$data君がニート君になっちゃうとたちまちデータの読み書きができなくなるのであまり働かせ過ぎないように注意しよーね!
ハイ、次はアクセサに引数が渡された時の処理だけどな、20行目を見てみろ。$declaredclassに格納されてる値はmk_classdataメソッドを使用したときに格納された値になる。
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor');
つまり上記の処理で例えると、$declaredclassには'Hoge'という文字列が入ってることになんだな。
で、この'Hoge'と$wantclassに入ってる値を比較しているわけだが、
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor'); Hoge->hoge_accessor('aaa');
上記の処理で例えると$wantclassには$declaredclassと同じく'Hoge'が入ってくることになんだな。うっひょー。
んで、20行目のif文は$wantclassと$declaredclasが違う場合にだけ19行目の処理を実行しているわけだからこの場合はスルーするわけだぁ。ひょひょひょ。
じゃあだな、$wantclassと$declaredclasが違う場合ってどんな場合?ってことだが、下記に例を示すから目ん玉引ん剥いて網膜から直接見てみろよこのボケ野郎どもが。
package Hoge; use base qw/Class::Data::Inheritable/; Hoge->mk_classdata('hoge_accessor'); package Foo; use base qw/Hoge/; Foo->hoge_accessor('bbb');
HA!HA!HA!こういう場合だよ米ベー。$wantclass=Fooで$declaredclas=Hogeになるんで19行を実行し、Fooをベースにしてmk_classdataを呼ぶことでFooに同じ名前の新たなアクセサを提供し、元クラスHogeの値を壊さないようにするわけですなぁ。
考えた人すごいですなぁ。これがClass::Data::Inheritableが継承可能なクラス変数といわれる由縁でするまする。
で、最後の26-28行目はコレらの便利な処理をしてくれる$accessorさんをクラスに登録するというわけですよぉ。
27,28行目の*ってのは型グロブ変数ってという奴で、型グロブに対して無名サブルーチンを突っ込むと動的に関数を定義できるんだなぁコレが。
でここで、初めに俺が語った話を覚えてるか?へっ、オマエラなら覚えてないだろうなけっけ。use strictの話だよ。refsだよrefs。
ここでrefsを省いていたのが利いて来るんだ。refsって何だった?ホラ言ってミソ?
で良く見てみると型グロブ変数に対して「$declaredclass.'::'.$attribute」っていう変数を使おうとしているよね?これをしたかったからrefsだけ仲間外れにしてたわけですね。
はは。
あー、あー、あー。
これで終わりだよぅ。みんなわかったかな!?
コレ読んでもわからんやつはもう死ぬか、もしくはわからん用語について死ぬほど調べてもっかい読みなおしてみろこのド低のぅッ・・・ごふんごふん、このクサレ脳みそがぁ!!!!!!!!!!!!11
PHP自体がもともとPerlで作られたHTML用のテンプレートエンジンのようなもんなんだから
独自タグだけじゃなくてそれ以外の機能がないとPHPでテンプレートエンジンを使う意味があまりないと考えているのは僕だけかな?
Perlでものすごく効率的にプログラミングの仕事を終わらせる方法
[1] Perlで頑張る
[2] 諦める
[5] Rubyで書く
[6] 完了
やってしまった・・・。
方針:
package SixtyLinesTemplate; use strict; use warnings; our $VERSION = '0.01'; sub convert { return unless defined(my $str = shift); $str =~ s{&}{&}gso; $str =~ s{<}{<}gso; $str =~ s{>}{>}gso; $str =~ s{\"}{"}gso; $str; } sub include_template { my $tmpl = shift; my %c = %{+shift}; eval convert_template($tmpl); die $@ if $@; } sub convert_template { my $tmpl = shift; my $cache = $tmpl.'.cache'; return scalar do { open my ($FH) , $cache; local $/; <$FH> } if ( -f $cache && (stat($tmpl))[9] <= (stat($cache))[9] ); my $out = do { open my ($FH) , $tmpl; local $/; <$FH> }; $out =~ tr/()/\x28\x29/; $out =~ s/\[%\s*(foreach|if|unless|end)\s*(.+?)\s*{?\s*%\]/");".(lc($1) eq 'end' ? '} print q(' : "$1 $2 { print q(")/ige; $out =~ s/\[%(.+?)%\]/);print $1; print q(/g; $out =~ s/\[#(.+?)#\]/);print SixtyLinesTemplate::convert($1); print q(/g; $out = 'print q('.$out.');'; open my ($FH) , '>' , $cache; print $FH $out; $out; } 1;
サンプルコード:
use SixtyLinesTemplate; my $context = { 'title' => 'Example', 'list' => [10,'<A&B>'] }; SixtyLinesTemplate::include_template('template.tmpl',$context);
サンプルテンプレート:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>[# $c{title} #]</title> </head> <body> <h1>[# $c{title} #]</h1> <table> [% foreach my $i (0..@{$c{list}}-1) %] <tr bgcolor="[% $i % 2 ? '#FFCCCC' : '#CCCCFF' %]"> <td>[% $i %]</td> <td>[# $c{list}[$i] #]</td> </tr> [% end %] </table> </body> </html>
出力例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Example</title> </head> <body> <h1>Example</h1> <table> <tr bgcolor="#CCCCFF"> <td>0</td> <td>10</td> </tr> <tr bgcolor="#FFCCCC"> <td>1</td> <td><A&amp;B></td> </tr> </table> </body> </html>
foreachんところが汚く見えるかもしれませんが、あれは添え字を取ろうとするとああなるんでご勘弁を。
普通にループするだけならforeach my $item (@$c{title}) でいけますゆえ。
あと存在しない変数とか使うと死んだり警告でたりするのでevalの前にno strictとno warningsをやった方がいいかもねぇ。
って何まじめに検証してんだ俺・・・orz
追記:
SixtyじゃなくてFortyだね。恥ずかし!
追追記:
でも&amp;の奴はちゃんと書いてるんだけども投稿すると勝手にエスケープされてしまってるんだよね。何でだろ?
ちなみにこのconvertの処理はCGI::Utilから拝借しました。
TWTR: Summary for Twitter, Inc. Common Stock- Yahoo! Finance
Twitterの株式公開初日。株価は74%上昇して45.10ドル。時価総額は318億ドル | TechCrunch Japan
Twitter、今年6月にユーザー5億人超か―ブラジル急成長、ツイート数では日本語が依然英語に次いで2位 | TechCrunch Japan
GOOG: Summary for Alphabet Inc.- Yahoo! Finance
Railsにある20%のソリューションで問題の80%を解決できるようにしています。
http://www.atmarkit.co.jp/news/200711/16/twitter.html
ウィリアム氏がOdeo内で始めた小さなプロジェクトが「Twitter」だ。
Ruby on Railsを使って2週間で最初の動くバージョンを 作り上げた
はてなブックマーク - Route 477 - Ruby基礎文法最速マスター&Ruby書籍紹介
Ruby on Railsで10分で作るTwitterもどき
Ruby on Railsをすぐ使う - Ruby on Rails 2.0アプリを1分で作る:ITpro
Ruby on Rails 2.0アプリを10秒で作る2.0
katoy: cocolog: Rails 2.0.2 は 5 行でアプリ雛形作成/起動ができる!
Ruby on Rails チュートリアル:実例を使ってRailsを学ぼう - Michael Hartl (マイケル・ハートル)
クックパッド株式会社 に行ってきた! - 941::blog
Ruby on Railsで1億PVのサイトの開発が出来て、エンジニアは5人しかいない
クックパッド(株)【2193】:株式/株価 - Yahoo!ファイナンス
ウォンテッドリー株式会社 に行ってきた! - 941::blog
ココロオドル仕事を見つける方法 | 仲 暁子 | 本 | Amazon.co.jp
Wantedly 航海日誌 — 私のようなの素人のためのHacker Way
はてなブックマーク - アイディアに価値はない by 仲 暁子
http://anond.hatelabo.jp/20130101082333
Focus on Technology:Ruby on Railsとエンタープライズを結び付ける「Merb」 (1/2) - ITmedia エンタープライズ
「Rubyに恋をし、Rubyが長きにわたって存在すると感じた人はたくさんいる。そして彼らはもっと強力なものを求めたのだ」
Merb 1.0 リリース記念に、Merb がどんだけすごいのかを紹介した海外の記事を翻訳してみた
速報: Merb と Rails が統合 - kwatchの日記
http://www.google.com/webhp?hl=en
http://www.google.com/search?hl=en&q=ruby&btnG=Google+Search
ブラウザで Ruby on Rails 開発! Heroku を使ってみよう - WebOS Goodies
ブラウザでRails開発が完了する衝撃の簡単さ - builder by ZDNet Japan
CやPerl、Python、Rubyをブラウザ上で実行できる「codepad」:phpspot開発日誌
C言語をブラウザで実行、Ruby/Python/Perlも然り | マイナビニュース
Odeo内で始めた小さなプロジェクトが「Twitter」だ。Ruby on Railsを使って2週間で最初の動くバージョンを作り上げたという。
Ruby on Railsで1億PVのサイトの開発が出来て、エンジニアは5人しかいない
http://blog.kushii.net/archives/1350951.html
http://d.hatena.ne.jp/gamella/20081027/1225119262
3ヶ月、わずか3名程度のエンジニアチームで、彼らはPHPで実装が完了していたレベルに追いつきました。またコード量はPHPの1/5以下にまで削減されており、よりシンプルな構成も実現できました。
Gregg PollackとScaling Railsのハウツー
1つには、Railsアプリケーションをうまくスケーリングするために必要なすべての情報をRails開発者に与えること。
しかし、できれば、開発者がビデオを見て、何百万人の同時ユーザーを扱うRailsアプリケーションを
作成できます、とクライアントに言える自信を持ってもらいたいのです。
2番目に、Railsアプリケーションをスケーリングすることがどれほど簡単かを、他の言語の開発者に示すこと。
http://www.infoq.com/jp/articles/gregg-pollack-scaling-rails
Ruby on Railsで10分で作るTwitterもどき - ZDNet Japan
http://japan.zdnet.com/video/screencast/story/0,3800079413,20354695,00.htm
Rails 2.0.2 は 5 行でアプリ雛形作成/起動ができる!: katoy: cocolog
http://youichi-kato.cocolog-nifty.com/blog/2008/01/rails_202_5_9198.html
Ruby on Rails 2.0アプリを1分で作る - Ruby on Railsをすぐ使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20080606/306873/
30分で Rails youtubeアプリ - 脱・下流エンジニア (仮)
hp12c - Railsでブログを作ろう!(Creating a Weblog in 15 minutes)
Ruby on Railsで10分で作るTwitterもどき - ZDNet Japan
Rails Pocket Reference (Pocket Reference (O'Reilly)): Eric Berry: 0636920520702: Amazon.com: Books
http://127.0.0.1/phpmyadmin/ http://127.0.0.1/mysql/
http://127.0.0.1:3000 http://localhost:3000/entries/
http://127.0.0.1/cgi-bin/c.cgi
C:\InstantRails\cgi-bin\c.cgi
キーワード「ruby」を含む新着エントリー Ruby Inside: The Ruby Blog
Ruby関連MLの自動翻訳サイトが公開 - JRubyのNutter氏に触発 | マイナビニュース
Rails Forum - the ultimate Ruby on Rails community
gem install hpricot
gem install mechanize
ねぇ〜、PHPにしてくださ〜い。え、PHPにしてくださいよぅ。
ねぇ〜。もぅ。OHねえ〜、いいじゃないよぅ〜
減るもんじゃなしぃ〜。
へ、ペリーとても悲しい。悲しいでーす。ねぇ〜ぃ。PHPにしてくださいよぉ〜。
もう〜。開発者の血を入れ替えてくださいよぅ〜。ねえー。も。もーう!
な、ねえっ!もう!なっ!なに!もう!
こ、このっ、じょ、じょ、上場!
なに、それ?
武器?
なに?それ?なんの意味があるの?
何をそれで実行しようとしてるの?
あなたがーた。
怒り?哀しみ?喜び?喜怒哀楽?
なんっ!
いいじゃなーい、PHP〜。
PHPにすれば、済むのです。
・・・・
おぅ。なしのつぶて、でーすか?
ねえ。
ちょっ、そっちのはじっこに座てる人、そう、そう、あなた。
あなた、どう思う?
ねえ。
ちょっ、喋ってよ〜。ねえ〜もう。
ちょ、さっきから、黙って、し、もう〜、喋ってよぉ〜。
ふんっ!
じゃあ、私はあなた方がそうやって私をしかとする様を、
し・か・と・見守ることにします・・・
あ、あっ、うそ、うそ。気、悪くした?
あっ、あっ、あ、でも、そんなにオタクっぽくないよね、Perlerって。
オタクじゃないのね。おーん・・
ううん、初めてじゃないのね、二回目。うん。
あの、<BGSOUND>でMIDI流すのもいいかなぁと思たんだけどねぇ、ちょっと大袈裟になるでしょ?
だから、うん。
最初はねぇ、Swish。で、今度のはAdobeのFlashなんだけどねぇ。
わう、もう!なっ!何やねん!なっ!
もぅ、トップページいったら、招待されろ。招待されたら、コミュニティいけ。
なにそれ!
で、「たった4日で退会しる!」。
なに?口説いてるのそれ?それで口説いてるつもり?
Yahoo!、落としたつもり?
もう!なっ!
PerlとPearlの発音の区別もできないくせに!ねぇ。
DOCTYPEも出さないのぅ?ここん家は?
DOCTYPEも?ああ、いい、いい。あっ、もう、まぁ、ま、ん。
もうねえ、私の好きなね、日本のことわざに、
「果報は寝てまつ」っていいます。
寝ましょか?ここで。寝させてもらいましょ〜か?
おっ、ほほほほほほっ。
It's a joke ! joke! ジャ、ココハじょーくあべにゅーデス。
ハハハ・・・OH!OH!OH!OH!
ふ〜。
PHPにするといいよ〜。
もてるよ〜。もてちゃうよ〜。もてもて。ダヨ〜。
もう、ねぇ、スゴイ。それに。
快適なDreamweaver的生活もねぇ、エンジョイできちゃう。
できちゃう!
register_global、どこでもパラメータねぇ〜。PEAR::HTML_Form、便利ね〜。
<?php ?>。さわやか〜。Zendの作ったFramework。OH!最高〜ッ!!
それに引き換え、Perlのままと、jcode.plはぬるぬるする。cgi、動かない。
あっ〜、もうPerlッ、最低ッ!!
もう。あなた達だけよ、今時、Perlしてるの。
おー。だから、ね。いい?だから今こそ、PHPにすれば、い、いーの。
ねぇ、どう怖いかは、詳しくいわないけれどもねぇ。
はてブの人気エントリに「今回のmixiのリニューアルについて - 専門家に聞く」ってのがあるんだけど、そのページのにある寺田さんの発言がステキすぎて目が離せません。
文章構造、悪くないと思うけどね…。
とりたてて良くもないけど、そこそこいい感じじゃないすか?具体的にどう悲惨なんだろね。
今までの化石みたいなTableレイアウトのソースに比べれば、死ぬほどマトモでしょ。
個人的にはHTML要素のid・class指定にLowerCamelCaseを使うのは好きじゃないとか、onmouseover・onmouseoutみたいなDOMイベントをHTMLソース上に書かなくてもいいじゃんとかはあるけど。
但し、せっかくCSSにしたんだからHTMLソースを短くする努力をした方が良かった気がする。
PVが半端ないから、HTMLソースの量でも結構大きく響いてくるはず。
本当にそうですね…!やっぱり時代はPHPですよね(笑
今回のリニューアルは「テンプレートのリニューアル」であり、「システムも含めた全面的なリニューアル」ないんでそりゃ変わらないでしょ。
数千台のサーバで運営されており、実績のある現在のPerlベースのシステムを、PHPベースに変更することで何のメリットがあるんですかね?
「PHPだと、Perlと違い実行時にプロセスが立ち上がらないので高速です」とか言いそうな予感がプンプンしますが…。
「Javaベースにして、Oracleにしましょう」といった話であれば、はいはいSIer乙って気分になるんだけど、PHPが出てくるところがなんとも微笑ましいです。
どう考えても創業以来からの身内で開発をしているとしか思えません。技術や知識が古く、独自の思考をもった温室エンジニアたちが、権限ばかり与えられて新しく入ったデザイナーやコーダーと上手に連携できていない様子が目に浮かぶようです。
んー、1000万IDあるサイトを、運用する技術とかだけでも結構なもんだと思うけどね。
サイトのスケールアウトの難しさとか… 知ってるのかな?
どこまでいっても「なぜ上場したのか・・・」という問題に尽きます。
なんかあんまり触れられてないけど、今回のmixiのデザインリニューアルで一番強く思ったのは「mixiが持っていたキャッチーさが薄くなってしまった」ということ。
同時期に開始したGreeと、mixiの二つのSNSの内、mixiだけが圧倒的な勢いでユーザ数をのばしていった理由。
他のウェブサービスでは見ない原色系の色遣い。パッと見て親しみやすい感じ。オタクっぽくない感じ。
そこがmixiのアイデンティティだと思っていたので、普通になっちゃったことにビックリした。
初期のデザインコンセプトが「人と人をつなげる楽しいウェブサイト」だったとすると、
今回のリニューアルのデザインコンセプトは「ソーシャルプラットフォーム」みたいな感じで独自色を薄くした感じなのかねぇ…。
あと、非常に分かりづらいメニュー構成(操作メニューが2つあって、その意味づけがはっきりしていない)は、変わらないのが相変わらず駄目だと思った。
よく知らない俺が適当に答える。
これなしには話が始まらない。
あとは機能によってはJavaScriptとか。
機能が重要である多くの革新的なWEBサービス、においては外見にこだわりすぎる必然性はない。
Perl,PHPなどのエンジン側のメカニズムについては徹底的に研究して損はない。
あ、つうかスクリプト関係はあとで足をとられる可能性があるのでちゃんと研究したほうがいいのかもな。
OSとかDBとか環境関係は複数個を覚えようとすると面倒なので、どれか一個を決めうちで覚えとく。普通に使う分には深い知識は不要。
クロスサイトスクリプティングとかは、最初は考える必要はない。
ちゃんとしたデバッグをする前提でオレは考えているからだが、
どうせ後からデバッグで拾われるに決まっている。
そういう変更を見込んで後からでも変更可能なコーディングにしておく。
Perl,PHP>JavaScript>CSS>HTML>DB 環境まわり>XSS
フレームワークは使ったことないので知らん。
年もそこそこいってる。
落とすのはいいよ。
でもさ、なんだその落選通知。
ただのコピペじゃん。
オレがあんたの企業に応募するために使った時間はどうなるんだよ?
こっちだって調べたり考えたりする労力がゼロなわけじゃない。
それをコピペではじくのかよ。
いいよいいよ。偉いんだろうさ。
いつまでも自分が偉いと思っておけよ。
死ぬまで「資本があるやつが偉い」と思っていろ。
mixiなんざSNSとしては初歩の初歩しかカバーできてないんだよ!
センスを感じねえぜ。
いつかオレがもっとマトモなサービスを作ってつぶしてやるからな。
首を洗って待っていろ!
いま、自分でちょっとした Web アプリケーションなるものを作り始めたところ。プログラミングは前から趣味でいろいろやってたけれど、大学に入ってからはほとんど数値計算でしか使ってなかったから、とても新鮮な感じがしている。楽しい。
ところがちょっとでも規模が大きくなると、とりあえず MySQL が必要になって、 Perl とか Ruby とか PHP とか Python とか ... なスクリプト言語をもっと詳しくしる必要が出てきて、そしてそれ上で動くフレームワークを選んで理解して、さらに HTML とか CSS とかで表示させて、JavaScript リッチなユーザインタフェースを... なんて具合に、やらなきゃいけないことが急に増えてしまいます。どうしたらいいんですか?
HTML とか CSS の仕事っていうのは、刺身にタンポポを乗せる仕事なんですか?勉強するだけ無駄ですか?でもこの知識がなかったらみっともないデザインになっちゃいますよね。
フレームワークに頼って MySQL を学ばないなんて邪道ですか? Rails を信用しちゃだめですか? Django はどうですか?さすがにマシン語で書け、なんて言いませんよね。
それにセキュリティの知識も必要ですよね。SQL インジェクションとか、XSS とか CSRF とか、聞いたことあるけど意味なんて知りません。こういうのをちゃんとしてないと、悪用されたりしちゃいます?
C10K とか I17N とか L10n とか、もう許してください。
ここで書いたようなことが全部できないと、Web アプリケーションを作ることができないのでしょうか。
もしそうでないのなら、どの知識が必須で、どの知識は必須ではないのですか?
っていうのを疑問に思ったけれど、そういう技術の寄せ集めでできているってところが Web アプリケーションの本質なんだろうなぁ。たぶん。
404 Blog Not Found:coders.each{|you| you.get(this) if you.langs[0] != 'ruby' } # - 書評 - 初めてのRuby
1章 ようこそ、Rubyのある生活へ
1.1 Rubyの特徴
1.1.1 オブジェクト指向言語
1.1.2 より良いPerl
ある研究によれば、生産性はそれぞれのプログラマでそれぞれ違う。
でも、あるプログラマに着目すれば、
そのプログラマが時間あたりに書けるコードの行数は、プログラミング言語によらず決まっている、
たとえば一年に50,000行なのだそうだ。
行数が決まっていたら、
どの言語で一番多くのことを達成できる?
そう、Rubyだよね。
例えば C のプログラムより 50 倍遅くなったとして、実行時間はどのくらい変わるだろうか?
もし C のプログラムが 0.01 秒で終わる としたら、
Ruby 版は 0.5 秒。あなたのプログラムは 0.49 秒速くす るために C で書く価値があるのか?
プログラムは開発の時間よりも保守の時間のほうがかかるというのはもはや常識だけども、
Ruby で書いてあれば例えば、
そういう点でも Ruby は非常にいい。
だいたい、スピードに対してごちゃごちゃ言うなら C じゃなくアセンブラで書けばいい。
それをなんで C で書いてるのかって言えば、
それはもちろん「コードがわかりやすい」とか、「早く書ける」って のが理由だろう。
そして、Ruby は C よりわかりやすいし速く書ける。
404 Blog Not Found:「PHPなめんな」と「(Perl|Python|Ruby)をなめんな」の違い
実行速度より実装速度(前編) - Object Station