はてなキーワード: Pythonとは
相手が勝ち誇ったとき、そいつはすでに敗北している
何が違うのか解った気がする(菊池 Blog)
今どき言語論争なんて愉快なことをやってるのがアンテナに引っかかったのでヲチしてたんだけども、勝利宣言キタコレ。
さて。
ネットバトル(藁)の勝敗は傍観者の評価によって定まるとしても、「傍観者の評価」は俺一人の評価と同値ではなく、むしろ多数が形成する「空気」だから、俺が「このバトルは◯◯の勝ちだ」と宣言したところで月桂冠には成り得ないわけだけども、「空気」の一要素として、高らかに宣言しておく。
このバトルは菊池氏の負けだ。
菊池氏の主張というのは結局、「日頃から良い設計でコードを書いていればコードの再利用も容易なはずだ」という「Javaプログラマかくあるべし」論だ。
だから菊池氏は自分の勝利を確信しているだろう。「低能プログラマを叩きのめしたぜ万歳!」
ところが、このネットバトルの勝利条件は「どちらが優れたプログラマか」では無い。もともと他言語との比較でJavaのメリットが問われているから、Javaプログラマを叩きのめしても意味がない。
そこで「優れた設計に基づく既存のコードを簡単に再利用できるのがJavaのメリットだ」と答えても、「その優れた設計に基づく既存のコードというのはどこにあるんですか?」と訊かれる。(ここでの「優れた設計」は、RDBMSがbigtableになりGAEのSandBoxの縛りがあっても容易に移植できる設計でなければならない。)
さて、この問いに胸を張って「いくらでもある」と答えられるJavaプログラマがどれほどいるのだろうか?百歩譲って自身が優れた設計に基づくコードしか書いてこなかったとして、Java界全体を代表して発言してもなお結論が変わらないと言えるだろうか?
つまり、他言語使いに問われた時に「俺の書いたものに限らず、Javaの既存コードはたいてい再利用できる」と言えるだろうか?
答えは否だ。嘆かわしかろうが何だろうが、否だ。
さて、このネットバトルの勝利条件は何であろうか。
それは、「GAEでJavaを使うメリットをより的確に表現する事」だ。
id:higayasuo氏の答えは大要「慣れた言語で書ける事」だ。格好良くはないが、現実的な答えだ。
菊池氏の答えが全く説得力がない以上、id:higayasuo氏の答えの説得力が弱く反論が容易であったとしても、1ピコグラムでも説得力を有する以上は、天秤はid:higayasuo氏に傾くのだ。
class Singleton( object ): _instances = dict() def __new__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = object.__new__(cls, *args, **kwargs) return cls._instances[cls] class A( Singleton ): def __init__( self, x ): self.x = x a = A(1) print id(a) print id(a.x) b = A(2) print id(b) print id(b.x)
実はまいにんぐマイコ先生
http://anond.hatelabo.jp/20090305163800
なんとなくperl ruby python SQLを見てたら見つけた。
こっそりやったほうが良いのか、問題を提起したほうが良いのか。
http://anond.hatelabo.jp/20090415120341
どうせなら
({"count":"63","eid":"12958894","entry_url":"http://b.hatena.ne.jp/entry/http://www19.atwiki.jp/rabuho/","related":[{"count":"115","url":"http://nikuch.blog42.fc2.com/blog-entry-396.html","eid":"12904869","title":" \u7af6\u99ac\u5834\u306e\u30aa\u30c3\u30b5\u30f3\u9054\u304b\u3089\u805e\u3044\u305f\u540d\u8a00\u96c6 - \u8089\u6c41\u304c\u6ea2\u308c\u51fa\u3066\u3044\u307e\u3059","entry_url":"http://b.hatena.ne.jp/entry/http://nikuch.blog42.fc2.com/blog-entry-396.html"},{"count":"37","url":"http://alfalfa.livedoor.biz/archives/50846904.html","eid":"3865016","title":"\u30a2\u30eb\u30d5\u30a1\u30eb\u30d5\u30a1\u30e2\u30b6\u30a4\u30af\u3088\u308a\u300c\u304b\u3063\u3053\u3088\u3059\u304e\u3066\u9ce5\u808c\u304c\u7acb\u3063\u305f\u52d5\u753b\u300d","entry_url":"http://b.hatena.ne.jp/entry/http://alfalfa.livedoor.biz/archives/50846904.html"},{"count":"261","url":"http://news4vip.livedoor.biz/archives/51267142.html","eid":"12623444","title":"\u30102ch\u3011\u30cb\u30e5\u30fc\u901f\u30af\u30aa\u30ea\u30c6\u30a3:\u4eba\u751f\u3092\u5909\u3048\u308b\u540d\u8a00\u30fb\u683c\u8a00","entry_url":"http://b.hatena.ne.jp/entry/http://news4vip.livedoor.biz/archives/51267142.html"},{"count":"39","url":"http://alfalfa.livedoor.biz/archives/51308451.html","eid":"8854638","title":"\u5b66\u6821\u3067\u306f\u6559\u3048\u3066\u304f\u308c\u306a\u3044\u4eba\u751f\u306b\u5f79\u7acb\u306411\u306e\u30eb\u30fc\u30eb:\u30a2\u30eb\u30d5\u30a1\u30eb\u30d5\u30a1\u30e2\u30b6\u30a4\u30af","entry_url":"http://b.hatena.ne.jp/entry/http://alfalfa.livedoor.biz/archives/51308451.html"},{"count":"175","url":"http://d.hatena.ne.jp/tzetze/20081019/p1","eid":"10464747","title":"\u306e\u3073\u592a\u540d\u8a00\u96c6 - \u56de\u866b","entry_url":"http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/tzetze/20081019/p1"}],"bookmarks":[{"timestamp":"2009/04/15 12:57:33","comment":"","user":"westerndog","tags":["2ch"]},{"timestamp":"2009/04/15 12:52:44","comment":"\u306a\u3093\u3058\u3083\u3053\u308a\u3083","user":"jt_noSke","tags":},{"timestamp":"2009/04/15 12:52:32","comment":"","user":"yuriap","tags":["neta"]},{"timestamp":"2009/04/15 12:51:53","comment":"\u30d6\u30ed\u30b0\u3067\u500b\u4eba\u60c5\u5831\u6652\u3057\u3059\u304e\u3084\u308d\u30fb\u30fb\u30fb\u30a2\u30e1\u30d6\u30ed\u3063\u3066\u643a\u5e2f\u304b\u3089\u9001\u308c\u308b\u3093\u304b\u306a\uff1f\u643a\u5e2f\u3082\u65e5\u672c\u4e2d\u306b\u767a\u4fe1\u3055\u308c\u308b\u306e\u3060\u304c\u3001\u304a\u305d\u3089\u304f\u30e6\u30fc\u30b6\u5074\u306b\u81ea\u899a\u304c\u306a\u3044\u3002\uff0f\u30aa\u30bf\u30af\u3067\u3082\u3042\u308a2ch\u30e6\u30fc\u30b6\u306b\u5f15\u3063\u304b\u304b\u308a\u3084\u3059\u304b\u3063\u305f\u3093\u3060\u306a\u3002","user":"kalmalogy","tags":["2ch","\u3053\u308c\u306f\u3053\u308f\u3044"]},{"timestamp":"2009/04/15 12:49:24","comment":"","user":"mamuchi","tags":["\u307e\u3068\u3081","2ch"]},{"timestamp":"2009/04/15 12:49:02","comment":"\"rabuho\"\u3068\u3044\u3046\u7db4\u308a\u304c\u982d\u60aa\u305d\u3046\u3060\u306a\u30fc\u3068\u601d\u3046","user":"hermit-h1","tags":},{"timestamp":"2009/04/15 12:40:41","comment":"","user":"kasuga-k","tags":["\u3042\u3068\u3067\u8aad\u3080","2ch"]},{"timestamp":"2009/04/15 12:31:52","comment":"","user":"runway35","tags":["\u3042\u3068\u3067\u8aad\u3080"]},{"timestamp":"2009/04/15 12:24:15","comment":"\u51fa\u5e2d\u756a\u53f7\u3068\u304b\uff57\uff57","user":"rawwell","tags":},{"timestamp":"2009/04/15 12:17:57","comment":"","user":"tk18","tags":},{"timestamp":"2009/04/15 12:14:58","comment":"","user":"se_tsu_na","tags":["\u307e\u3068\u3081"]},{"timestamp":"2009/04/15 12:13:27","comment":"","user":"ymrl","tags":},{"timestamp":"2009/04/15 12:01:35","comment":"","user":"elk-elg","tags":["2ch"]},{"timestamp":"2009/04/15 12:00:15","comment":"","user":"piraki","tags":["\u307e\u3068\u3081"]},{"timestamp":"2009/04/15 11:40:53","comment":"","user":"A410","tags":["*\u3042\u3068\u3067\u8aad\u3080"]},{"timestamp":"2009/04/15 11:23:54","comment":"","user":"Francamente_Pinocchio","tags":},{"timestamp":"2009/04/15 11:06:10","comment":"","user":"mixvox-j","tags":["\u3053\u308c\u306f\u3053\u308f\u3044"]},{"timestamp":"2009/04/15 10:57:55","comment":"","user":"tama3333","tags":},{"timestamp":"2009/04/15 10:56:20","comment":"","user":"timeismoney","tags":["\u3053\u308c\u306f\u3053\u308f\u3044","2ch"]},{"timestamp":"2009/04/15 10:55:58","comment":"\uff1e\u3053\u3093\u306a\u3053\u3068\u3092\u3057\u3066\u3082\u304a\u307e\u3048\u3089\u306e\u5931\u308f\u308c\u305f\u9752\u6625\u306f\u623b\u3063\u3066\u3053\u306a\u3044\u3088/\uff1e\u8ab0\u304b\u306e\u9752\u6625\u3092\u596a\u3046\u3053\u3068\u306f\u3067\u304d\u308b\u3088\uff01/\uff1e\u3067\u3001\u304a\u524d\u3089\u306e\u52dd\u5229\u6761\u4ef6\u306f\u306a\u3093\u306a\u306e\uff1f/\uff1e\u306a\u3044\u3001\u3053\u306e\u796d\u306f\u8ca0\u3051\u305f\u4e8b\u304b\u3089\u59cb\u307e\u3063\u305f\u304b\u3089","user":"feita","tags":["\u30e1\u30b7\u30a6\u30de\u72b6\u614b"]},{"timestamp":"2009/04/15 10:55:07","comment":"","user":"accent_32","tags":},{"timestamp":"2009/04/15 10:52:46","comment":"","user":"neko-note","tags":},{"timestamp":"2009/04/15 10:44:57","comment":"\u3048\u30fc\u3068\u3001blog\u3063\u3066\u306e\u304c\u3069\u3046\u3044\u3046\u3068\u3053\u308d\u304b\u3084\u3063\u3071\u308f\u304b\u3063\u3066\u3044\u306a\u3044\u3072\u3068\u591a\u3044\u3093\u3060\u306a\u3041\u3001\u3068\uff08\uff52\uff59","user":"ezil","tags":["\u3053\u308c\u306f\u3053\u308f\u3044","2ch"]},{"timestamp":"2009/04/15 10:14:50","comment":"\u902e\u6355\u8005\u304c\uff12\uff43\uff48\u304b\u3089\u6ca2\u5c71\u3067\u307e\u3059\u3088\u30fc\u306b\uff3e\uff3e","user":"ryupon-21","tags":},{"timestamp":"2009/04/15 10:00:11","comment":"","user":"ktmc","tags":["at de yom"]},{"timestamp":"2009/04/15 09:46:19","comment":"\u5ca9\u821f\u3068\u3044\u3063\u305f\u3089\u300c\u79d2\u901f5\u30bb\u30f3\u30c1\u30e1\u30fc\u30c8\u30eb\u300d\u306e\u821e\u53f0\u3058\u3083\u3042\u306a\u3044\u304b\u30fb\u30fb\u30fb\u3002","user":"kaitoster","tags":["\u307e\u3068\u3081","2ch"]},{"timestamp":"2009/04/15 09:40:04","comment":"\u306a\u3093\u305e\u3053\u308c","user":"HolyGrail","tags":},{"timestamp":"2009/04/15 09:36:36","comment":"","user":"km37","tags":},{"timestamp":"2009/04/15 09:33:53","comment":"","user":"gdno","tags":["\u307e\u3068\u3081","2ch","\u3042\u3068\u3067\u8aad\u3080"]},{"timestamp":"2009/04/15 09:26:52","comment":"","user":"CUTPLAZA-Tomo","tags":["\u3042\u3068\u3067"]},{"timestamp":"2009/04/15 09:15:51","comment":"\u30ed\u30df\u30aa\u3068\u30b8\u30e5\u30ea\u30a8\u30c3\u30c8\u3092\u60f3\u50cf\u3057\u3066\u3084\u307e\u306a\u3044\u3067\u3059\u3002\u7d50\u5a5a\u3067\u304d\u308b\u5e74\u306a\u306e\u306b\u306d\u3002","user":"zambia","tags":},{"timestamp":"2009/04/15 09:09:36","comment":"","user":"kei_identity","tags":},{"timestamp":"2009/04/15 08:56:43","comment":"","user":"yamakaz","tags":["\u3042\u3068\u3067\u8aad\u3080"]},{"timestamp":"2009/04/15 08:54:26","comment":"\uff57\uff4b\uff54\uff4b","user":"Mist","tags":["\u3042\u3068\u3067\u8aad\u3080"]},{"timestamp":"2009/04/15 08:39:29","comment":"\u63a2\u5075\u3054\u3063\u3053\u304b\u3002\u304b\u308f\u3044\u3044\u5b50\u306f\u6ce8\u610f\u3057\u305f\u65b9\u304c\u3044\u3044\u306a\u3002\u5e74\u8cc0\u72b6\u306b\u4f4f\u6240\u3063\u3066\u9732\u9aa8\u3059\u304e\u3002\u30d1\u30d1\u306f\u30b7\u30e7\u30c3\u30af\u3060\u308d\u3046\u306d\u3002","user":"cake_holl1515","tags":},{"timestamp":"2009/04/15 08:32:04","comment":"","user":"pukada","tags":["2ch","\u307e\u3068\u3081"]},{"timestamp":"2009/04/15 08:02:30","comment":"","user":"k-mmths03","tags":},{"timestamp":"2009/04/15 07:34:51","comment":"","user":"ocha39","tags":["2ch"]},{"timestamp":"2009/04/15 07:32:09","comment":"\u3053\u308c\u305e\u4eba\u8089\u691c\u7d22\u306e\u6975\u307f\u304b\u3002","user":"georgew","tags":["\u3042\u30fc\u4eba\u751f","\u3053\u308c\u306f\u3053\u308f\u3044","\u3053\u308c\u306f\u30ad\u30c4\u3044"]},{"timestamp":"2009/04/15 05:53:15","comment":"\u4e0b\u7a2e\u3069\u3082\u3002","user":"lefthanded","tags":["2ch","\u307e\u3068\u3081"]},{"timestamp":"2009/04/15 05:49:42","comment":"\u8a95\u751f\u30b1\u30fc\u30ad\u306e\u753b\u50cf\u304b\u3089\u7236\u89aa\u306e\u540d\u524d\u3092\u7279\u5b9a\u2192\u96fb\u8a71\u5e33\u691c\u7d22\u30b5\u30fc\u30d3\u30b9\u4f7f\u3063\u3066\u4f4f\u6240\u7279\u5b9a\u2192\u5e74\u8cc0\u72b6\u306e\u753b\u50cf\u304b\u3089\u78ba\u5b9a / \u3053\u308c\u3092\u5831\u9053\u3057\u305f\u30ed\u30b1\u30c3\u30c8\u30cb\u30e5\u30fc\u30b9\u3082\u3053\u308c\u306b\u52a0\u62c5\u3057\u3066\u3044\u308b\u3068\u3044\u3046\u3053\u3068\u3092\u81ea\u899a\u3057\u3066\u6b32\u3057\u3044\u306d\u3002","user":"al001","tags":},{"timestamp":"2009/04/15 05:22:59","comment":"\u307e\u3060\u307e\u3060\u624b\u306c\u308b\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u81ea\u6bba\u8005\u304c\u51fa\u3066\u304b\u3089\uff62\u4ffa\u3089\u3084\u308a\u3059\u304e\u305f\u3088\u306a\uff63\u3068\u304b\u624b\u306e\u3072\u3089\u3092\u8fd4\u3059\u306e\u304c\u69d8\u5f0f\u7f8e\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u306b\u3082\u81ea\u6bba\u8005\u304c\u51fa\u308b\u304f\u3089\u3044\u52a0\u71b1\u3092\u3002","user":"nakano87","tags":},{"timestamp":"2009/04/15 04:03:25","comment":"\u306a\u3093\u3060\u304b\u5f37\u70c8\u306a\u65e2\u8996\u611f\u3092\u611f\u3058\u308b\u3093\u3060\u304c","user":"m_shinzaki","tags":},{"timestamp":"2009/04/15 03:26:47","comment":"","user":"hecoheco","tags":},{"timestamp":"2009/04/15 02:29:49","comment":"","user":"dlogbk","tags":["2ch"]}],"url":"http://www19.atwiki.jp/rabuho/","title":"\u30e9\u30d6\u30db\u306b\u884c\u3063\u305f\u4e2d\u5b66\u751f\u3068\u305d\u306e\u587e\u8b1b\u5e2b \u307e\u3068\u3081wiki - \u30c8\u30c3\u30d7\u30da\u30fc\u30b8","screenshot":"http://screenshot.hatena.ne.jp/images/120x90/f/4/b/3/e/9c3e7bf256555ca7d8c59bea86bf79edda1.jpg"})
ふと、はてなでの言語シェアってどんなものかと思った。ので調べる。といってもはてブ人気度だけど。
現在の301番目のエントリーの日付から300エントリーまでの経過日数を出し、一日平均を出す。
言語 | 日付 | 経過日数 | 日毎 |
---|---|---|---|
javascript | 2009/03/06 | 25 | 12.2 |
perl | 2009/02/13 | 46 | 6.6 |
ruby | 2009/02/13 | 46 | 6.6 |
java | 2009/01/18 | 72 | 4.2 |
python | 2008/06/30 | 274 | 1.1 |
c++ | 2008/05/19 | 316 | 0.95 |
c | 2008/04/19 | 341 | 0.88 |
思った以上にpythonの人気がない。そしてruby軍団恐るべし。
本当はそれなりのサンプル数で分布を取るべきだけど、手軽に5users以上最新25エントリーの平均を取ってみた。
言語 | 平均ブックマーク数 |
javascript | 55 |
perl | 33 |
ruby | 24 |
java | 62 |
python | 32 |
c++ | 63 |
c | 43 |
あてにならなかった。
http://d.hatena.ne.jp/mamoruk/20090327/p1
「いちばん」かどうかはわかりませんが、うちの会社の製品ではpythonを主力に使った自然言語処理を含む製品を販売しているので、実際の感想を。
うちでは、pythonを元データの整備のための運用バッチ処理から、客が最終的に手にする情報の生成、実際に客が使うWEBインターフェースまで、pythonを主力にしています。
別のチームが作った別の製品ではS2Struts(JAVAね。)でWEBを作っている部分もありますが。
mecabが使えて、Unicodeが使えて、正規表現が使えれば、まあ、どの言語を使ってもそんなに大差はないのではないでしょうか。
あとはsennaのような日本語用の全文検索エンジンなども使いますが、そこらへんに近い部分は基本的にC++で書きます。
pythonとは言っても、速度を重視する部分はやはり迷わずC++です。
C++で書いたものはswigを使うか、又はC言語で手書きのbindingを使ってpythonに接続します。
でもこないだswigでつないで製品をリリースしたら、WEBからの並列アクセスにswigがうまく対応できず、リリースした日に急いで手書きbindingを書いた経験があります。swigの使い方はきちんと理解していないので非常に難しい。
nltkとか、wordnetの話はたしかに使えそうかもと思ったことはありますが、nltkはうちでは使っていません。
うちの会社では自然言語処理の研究段階から自社で行っているので、nltkにあるようなできあいのルーチンを実戦投入する事はなく、基本的に地味に自分達でpythonで書いています。
自然言語処理と言っても、核心の処理はやはり泥臭い個別事例への対処が多いです。不要語処理とか。
自然言語処理のアルゴリズムは8割程度の精度を出すのは簡単で、すぐに思いつきで書けるものですが、残り2割の精度をいかに埋めて行くかが、頭のいい人とそうでない人の差が現れる部分だと思います。
どうしてもいいアルゴリズムを思いつかない場合は、泥臭い個別事例処理がうねうねと並んだプログラムになります。学術的なものではなく商売になればいいので、うちはとりあえずそれで十分。(これは自然言語処理に使う機械学習のアルゴリズムたちも同様。というか自然言語処理と機械学習て、区分けがあいまいな部分が多いですよね。)
そういう感じなので、pythonの可読性の高さは非常に有効。
また、変数名や関数名などをexplicitに書く文化も業務で使うのに適していると思います。(他の言語でもexplicitに書けばいいだけですが、それを言語開発者自身が推奨するほど強調はしていないですよね。)
英文の処理で、wordnetの辞書データの一部を研究に使った記憶はある。
しかし、あそこまで精緻な辞書データを使う程高度な処理は今の所必要ない。
うちで自作した不要英単語辞書と、特別扱いする英単語辞書で間に合わせていたと思います。(その辺記憶があいまい。)
djangoは非常に明快で、快適。
画面の機能を追加するのに、例えばS2Strutsのアクションの定義の煩雑さに比較すると、天と地との差ほどにdjangoは簡単。
あと、pythonを使える開発者は日本には少ないとの事ですが、うちでもそれは同様です。
しかし、自分の隣の席の同僚はperlに非常に熟達していて、彼はすぐにpythonの達人に変わりました。
優秀な方にとっては言語なんて何をつかってもあまり変わらないみたい。
http://anond.hatelabo.jp/20090326142330 の続き
pythonでベンチとった。試した方法は以下
長くなるので、使用したスクリプトと生の結果は http://anond.hatelabo.jp/20090326123924 に貼った。
結果としては、早さは3, 4, 1, 2の順で、3を基準にとると、
文字列長 | md5hex | crc32x4 | headtail | skipover | ループ回数 |
---|---|---|---|---|---|
256 | 6.6 | 36 | 1.0 | 1.4 | 65536 |
1024 | 8.3 | 36 | 1.0 | 2.0 | 16384 |
4096 | 26 | 85 | 1.0 | 2.5 | 4096 |
という比率になった。
文字列長が長くなるとやはり後2つが有利だ。また、今回は32文字に切り詰めたがそれでもコリジョンは発生しなかった。アルゴリズム上、数文字だけの変化には対応出来ない可能性があるが、切り詰める量が少なく入力にいくらかのランダム性があれば実用になると思う。
(追記:URLで使ったら、ランダム性が悪くてコリジョン出た。素直にmd5がベターかもしれない)
しかし、この程度の速度差であれば、コリジョン耐性を重視して素直にmd5を使用するのも良いかもしれない。特に、今時はネイティブコードのライブラリをほぼ標準で持つ処理系が多いため、まずはmd5で、としても間違いはなさそう。
それいいね。
後は、間を抜かすアルゴリズムだね。
250超えたら一つおき、でもよいかも。
int(文字列長/250)文字おきで圧縮する。
とか書きつつ。
http://search.cpan.org/~gaas/Digest-1.15/Digest.pm#Digest_speed
数字が小さいほうが高速、ではなく大きいほうが高速。
これはperlなんだけど、LLで下手に演算するより、バイナリのライブラリを使ったほうが高速らしい。
幾つか実装してベンチとってみよ。案外md5が一番早かったりしてw
セキュリティ目的ではない。ハッシュテーブルで使うような奴でキャッシュで使いたい。
手軽なほうが良い。軽いほうが良い。推測可能でよい。数十バイトくらいの文字列にしたい。
md5が一番汎用っぽいけど、無駄に重い気がする。crc32は軽そうだしそれなりに汎用っぽいけど、ハッシュ長が短いのがめんどい。
調べた→ http://anond.hatelabo.jp/20090327015620
ベンチ用スクリプト
#!/usr/local/bin/python from sys import argv, stderr from time import time from string import ascii_letters, join from random import choice from hashlib import md5 from binascii import crc32 from itertools import izip time_fmt = '%10s: %5d ms' shift = int(argv[1]) if len(argv)>1 and argv[1].isdigit() else 2 length = 0x100 << shift cycle = 0x10000 >> shift print >> stderr, 'string length: 0x%x, cycle: 0x%x' % (length, cycle) data = tuple(''.join(choice(ascii_letters) for i in xrange(length)) for j in xrange(cycle)) start = time() md5hex = tuple(md5(s).hexdigest() for s in data) print >> stderr, time_fmt % ('md5hex', (time() - start) * 1000) start = time() crc32x4 = tuple(''.join('%08x' % abs(crc32(s[i::4])) for i in (0, 1, 2, 3)) for s in data) print >> stderr, time_fmt % ('crc32x4', (time() - start) * 1000) start = time() startend = tuple(s[:16]+s[-16:] for s in data) print >> stderr, time_fmt % ('headtail', (time() - start) * 1000) start = time() skip = tuple(s[::(len(s)/32+1)] for s in data) print >> stderr, time_fmt % ('skipover', (time() - start) * 1000) for s in izip(data, md5hex, crc32x4, startend, skip): print join(s)
実行結果
% python hashbench.py 0 > hash0.txt string length: 0x100, cycle: 0x10000 md5hex: 199 ms crc32x4: 1081 ms headtail: 30 ms skipover: 41 ms % python hashbench.py 2 > hash1.txt string length: 0x400, cycle: 0x4000 md5hex: 83 ms crc32x4: 363 ms headtail: 10 ms skipover: 20 ms % python hashbench.py 4 > hash2.txt string length: 0x1000, cycle: 0x1000 md5hex: 52 ms crc32x4: 170 ms headtail: 2 ms skipover: 5 ms
何を勉強していいのかわからない。
各言語でHello Worldぐらいは書ける。erlangでハノイの塔を解いた時はこんなに短く書けるのかと感動した。でもいずれの言語もちょっとずつしかかじって無くて、自分がこれから何を勉強していいのかわからない。
Java, C++, Ruby, Python, JavaScript, PHP, erlang, 最初は練習用の問題みたいなのを解いているのが楽しくて、ブログとかで目につく言語で気になったものを選びながら各言語でやってみた。でもこのあと何をしたらいいんだろう?
オブジェクト指向?クラスと違うの?プロトタイプベース?何ソレおいしいの?
こんな僕は何を読んで、何を学べばいいのでしょう。
例えばプログラミングを初めて見たいなと思う。 そのとき、「プログラミング」で検索しても、大御所以外は見つけにくい。何言語入門とかのページに行き着くのがほとんどだろう。 でも、プログラミングを始めたばっかりのやつにどれがいいのかは判断しにくい。
そこで俺ははてなで、「プログラミング」とタグがついたものを購読する。 一週間、いつも通り趣味の時間を楽しむだけで、だいたいプログラミングについては感覚がつかめてくる。この言語はこういうもので、この言語はどうだ、とか。 メタな視点を得るのに適してる。まず全体像をつかんで、それから細部について学習するときは、本を開くよりもこういうアプローチの方が楽だし、手っ取り早いし、効率もいい。
そのうち読んでると、それぞれの言語にも特質や向き不向き、いろんな評価軸があるんだとわかる。 その中でjavascriptとpythonが良さそうだと思ったら、そのタグのフィードに購読する。 これを繰り返すと、いつの間にか勉強が半分くらい進んでる。 趣味の時間で。
一番いいのは、受動的に能動できること・・・っていうんかな。 関心を持って、あたらしいフィードを追加するのは能動だ。 でも、一度登録したら、その日からそのことに関する学習は受動でできる。 趣味足り得る。
社会情勢に関して詳しくなりたいな、っておもう。 でも新聞に書いてあることを毎日Wikipediaで調べるほどのエネルギーは割けない。
でもフィードではてなを登録してると、finalventさんのブログがよく取り上げられていることを思い出す。そこで彼のブログを登録する。
・・・こういう風に、普段から自分が知ろうと思ってなかったことに関しても触れておくことで、いざ必要になったときに一歩進んだものの見方ができるようになる。水準を底上げできる。
まあ、俺はこういうこともあってGoogle Readerで一日700くらいのエントリーを受信して、だいたい20個ぐらい星をつけてる。
あくまで遊びの範囲でやることがある意味肝心なんだと思う。 遊びだったら、続けたくなるからね。 勉強とか下調べみたいなことでも。
http://takahashifumiki.com/others/480/
まぁまぁまともな生活ができる楽園なんだからさー。
アンタのような頑張り屋さんで能力が高い人が
わんさか来ちゃうと、居場所なくなってしまうでしょ。
しーえすえすないと見ればわかるでしょ?
俺らがスイーツ(笑)だって。
これを知らなきゃ始まらない。
当然一度くらい仕様書読んでるよね?
「・・・」
クソプログラマがわけわかんねぇ実装するから
俺たちはこんな苦労してんだ。
あー忙しい忙しい。
うんそうだね。でもあと5年もすれば
そんな知識ほとんど必要なくなるけど
ほかに何ができんの?
「・・・」
見てみろよこのきらきら感。
同じようなレイアウトで違いがわからないんだけど?
「いろいろサイト見て参考にしてるんで・・・」
まぁ0->1を生み出せる人間なんてほとんどいないわけだから
君たちは1を1.1にしてくれればいいよ。
「・・・」
・・・じゃあなんでこの位置にこのボタン置いたの?
「・・・なんとなく」
wwwwww
なんとなくって何だよwww
クリエーターが自分の作ったもの説明できなくてどうすんだよwww
見た目だけパクってんじゃねーよ。
結構絵を描いてきてるんだよね?勉強してるんだよね?
この画像パース狂ってるし光源がわけわからなくて気持ち悪いけど?
「・・・」
アナログできねーやつが
色についてちゃんと勉強したの?
「イキル。なんかクールじゃないですか??」
色の本は1冊くらい読もうよ。
うんうん重要だね。
「・・・」
多くの人に見てもらいたいんすよ。
うんうん。そうだね。
で、ガイドラインは当然読んでるんだよね?
「・・・」
おぉさすがクリエーター。センスあるね。
ところでさっき言ってたユーザビリティ、
アクセシビリティとか考えているんだよね?
「・・・あぁまぁ一応」
で、どこクリックすればいいの?
「・・・」
半端な知識で設計されても後々困るからやんなくていいよ。
無茶な要求しやがって。こういうわけわかんねぇ
「・・・?」
別に.confには触れなくていいから、
.htaccessくらいは設定できるようになろうよ。
興味ないの?死ぬの?
「イキル。でも興味はありません。」
内容が同じファイルUPしたのに動かない・・・
パーミッションが違うよ。
どういう意味か調べないの?興味ないの?死ぬの?
「イキル。でも興味はありません。」
フォームなんていろいろあるから
適当に選んでUPするだけでだろ。簡単簡単。
え?確認画面がほしい?
「無理です。」
別にアプリケーション作れとは言わないけどさ
単なる問い合わせメールフォームくらいつくれない?
簡単なカスタマイズもできないようじゃ
顧客の要求にこたえられないだろ。
やっぱ今はAjaxだよね。スクロールしてもサイドバーがついてくるんだぜ!!
ライブラリ読み込んでるだけじゃね?
しかもDOMってるだけだよ。
アプリケーション作れなんて言わないから
君らクリエーターならこのナビゲーション
俺ならこうするって思うことないの?
「・・・ライブラリで充分です。」
またバカなクライアントから修正きたよ。
まぁ俺がサービス名間違ってたんだけど。
確認しないの?
ふーん。ちなみにIE6でレイアウト崩れてるけど?
「・・・」
で、なんでその誤字の修正に3時間もかかってんの?
「だって100ファイルもあるんですよ?俺じゃなきゃ1日あっても終わらねっす。」
君らが大好きなDreamweaverで多少正規表現使えなかったっけ?
1分で終わるよ。自分使うツールの機能に興味ないの?
忙しい忙しいって無能なだけでしょ?
「興味ないです。CSSをダイアログで設定する機能くらいしか使わないです。」
これまでのようにやっぱり自分が満足できる
うんうん自分が納得できるものを作るのは大事なことだね。
サイト見てるユーザが全然満足してないんじゃない?オナニーなの?
「・・・でもクライアントはきっと満足してますよ。俺のオナニーすごいし。」
売れるサイトが欲しいんだよ。
なんとか売るのがてめぇらの仕事だろが。
一流プログラマ様が作ってくださった物をまったく理解しようともしないで
いじくってるバックボーンなきスイーツ(笑)なんだからさレベル高い奴はくんな。
こんな程度のスキルで4、500万は稼げちゃって
やっすいキャバでもオークションのやり方教えてとかブログのやり方教えて、
とか言われてお家行ってにゃんにゃんできちゃうわけだから出たくねーよこんな楽園。
しかもこんな能力じゃ楽園でたらどこも行くとこないよ。
努力しないでそこそこの金がもらえて
おしゃれって思われる仕事を用意するのが政治だろって訴えますよマジで。
残らないだろうけどなwww
オワタwww
ツールにひっかかるから、ですらないと思う。単にそういう技が必要なくなっただけ。 そもそもexploitに晒されるほどポピュラーでかつOSの動的リンク機能が使えるほど近代的な環境になってさえ、動的コードセグメントを使ってまで最適化スピードアップしなきゃいけないような変態的ケースは今じゃ殆ど無いんじゃねーの。ゲームかPC DEMOくらい? ひょっとしてケータイでもそういうことをやるのだろうか。 そもそもそれ以前にアルゴリズムの改善とかアーキテクチャの見直しとかできることは山ほどあるような気もするが。 というかツールで監視するくらいならCPUの保護機能でオフにするんじゃないのという気もする。
人工知能的なことをやりたいのであればCは圧倒的に不向きで、そもそもevalがある言語(Python/Ruby/etc..)使えばいいんじゃねーの、という話になる。もちろん Lisp/Schemeもそうだけど。。。
(追記に対してレス…)
void *(*psrc)(void *); void *pdst = (void *)psrc; 究極 printf("%x\n",(int)psrc);
そーいうのは曖昧と呼ぶの? どちらもC言語的には未定義動作で、単にコンパイラがこういう風にコンパイルしますよということが分かっているから書くのだし、何もambiguousではないよね。
そーいうことはxbyakとか使えば楽にできるとおもう
元増田っす
言語仕様がコンパクトなのがなぜ良いのかと言うと、実は2つ理由があります。
1つめは「全体像を把握するのが楽」という理由で。C++やJAVAだと全体像を把握するだけで疲れてしまうわけです。(使い方は奥深いけどね)
2つめはCOBOLを学ぶのと同じ後ろ向きの理由だけど、これからも活躍の場が多いだろうという予測。いまだに組み込みとかハードよりのところだとCは現役だったり、新製品の開発でももりもり使われてます。コンパイラが簡単に作れるし移植も楽だから。(これがCOBOLとかJAVAだと、開発環境を整えるのが大変なので選択されない。未来はわからないけれどもね)
標準ライブラリまで含めても、Cは異常に小さいよ。速いし。
Cのポインタってのは、値渡しのみにするとスタックでコンパイラをすっきりかけるけど、じゃあどうやって柔軟に運用させるべーと考えた妥協の産物です。
だから標準ライブラリにすら文字列・集合・リスト・配列を便利に扱えるものは入ってないし、ガーベジコレクションも多重のスレッドもヒープも入ってないわけです。(だからスタックと静的割り当てだけなんとかすればコンパイラが作れちゃう)知らなかったから作れなかったんじゃなくて、あえて切り捨ててる。
方向性として「間違いを少なくプログラミングする」とか「効率よくプログラミングする」ではなく、「コンパイラを簡単に作れるのが1番。でもできるだけプログラミングしやすいよう」にしてる。
そういう言語を2番目以降に学ぶのが良いのは、ハードよりの考え方(正確には、コンパイラよりの考え方)が出来るようになるから。これが「ポインタと言う概念を理解できる」ということに含まれてる。
メモリを意識したりポインタの概念を理解しておくと「なんで暴走するのか」「どうすると自分の足を撃てるのか」が理解できる。限界も面倒くささも便利さもわかるからね。(ポインタだからっつって暴走するんじゃなくて、C言語のポインタの実装だから、なんだけども。あと、ほんとは機械語=アセンブリを学ぶのが良いとは思うけど、それはハードルが高い。出来ることも少なくなっちゃう)
ポインタが暴走するから隠蔽する・使わないようにする・ミスっても平気にする、ミスらないようにするというのは、言語としては正しい方向性だと思う。
誰がどう考えても「存在しない配列を参照したらエラーを返さずに黙って暴走する(そこにあるメモリを見ちゃう)」「仕様として不定な動作が多い」なんてのはまずいでしょう。けれども、なぜまずいのか知らないまま便利な言語に慣れちゃうのは、感覚として良くない様な気がする。
C#だと信じられないくらい簡単にアプリ作れるし、PythonやPerlは普段使いの言語としてはすっごく便利。でもそれって、パック野菜やお惣菜を買ってきて晩御飯を作るようなものじゃないかな、と。ピーラーやミキサーは便利だし炊飯器はなきゃ炊事なんてやってられない。それでも、その道を学ぶのであれば「レシピを見れば料理は作れる」「包丁となべで調理できる」「なべかまでご飯は炊ける」なんてのは、必要じゃないかなあと。
今あえてC言語を学ぶのは、それが学びやすい(情報が手に入りやすい)最後の言語だから。
(まあ、何を目指すかによって違うとは思うけどね。僕の言ってんのは「いまあえてスペイン語だ!」って言ってるようなもんだし。違うか)
元増田だけども。
「プログラミング」の最初期は、
を使って、思ったことを実現すること(問題→モデル化→実装→実行)を実現するだけで充分だと思う。(テストとか汎用化はもっと先)
Pythonのすべての機能を使うのではなくて「前提知識が少なくて良く、できるだけ書かなければならないことが少なく、他の言語に移行できる程度には特殊でない」のを満たすのがPythonかなあと。(個人的には、字下げなんかのプログラミングスタイルを強制して覚えさせるのも向いてるとは思うけど)
そういった意味で、プログラミングに親しむ・練習問題を実装してみるのには、Cは不向きだと思う。
だけれども、純粋にアルゴリズムを学ぶでもなく、純粋に完成された設計でもなく、実装するのにすごく手間が掛かるわけでなく、自分の足を撃つのが容易であるような、C言語を学んでおくのは「仕事っていろんなトレードオフでできてるのね」というのを体得できてすごく良いと思うんだけどね。
つい最近Google App Engine Oilに処女を捧げたばかりの増田ですが。
ドキュメントの量?
そんなもんネーよ。App Engine自体、pythonのドキュメントに比べたらヘみたいな物だよ。ドキュメントよりコードだよコード。
HTMLがピロ?
それで十分じゃネーか。パラメータだ?クッキーだ?セッションだ?そんな物に構ってられるか。
対応してる奴使え。対応してなきゃ捨ててしまえ。
知るか。SQLなんか捨てちまえ。そんな高尚な物なんて必要ねー。
業務?
そんなもん使えるかボケ。
ってのはおいといて。
結局、定型処理の標準化なんで、設計もフレームワークに合わせて標準化するなら有用でしょう。
Cでやってたのをjavaで標準化したような物。
興味のある方、ご返信頂ければ嬉しいです。
端的に言えば、Java系エンジニアの自宅での開発環境を教えて頂きたいです。
家にあるのがノートPC1台だけなのですが、この環境ではなかなか開発する気になれません・・・。
以下、補足。
就職するまではプログラミングは一切したことがなく、就職して初めてプログラミングするようになりました。
会社ではWindowsで、Eclipseを使ってJavaばかり書いてます。
会社の開発環境はとても快適で、ディスプレイも大きいのが2つあるし割と楽しくプログラミングさせて貰ってます。
が、最近自宅でも開発してみたいなーという想いがふつふつと沸いてきました。
興味があるのはやっぱりJava、それからGroovy, Pythonです。
ところが、家では殆どインターネットしかしないので、我が家のPCは1年前のMacbookがあるだけです。
JavaやGroovyはやっぱり会社の環境(マルチディスプレイ + Eclipse)に慣れているとMacbookではとても不便です。
また、MacbookだとEclipseの様々なショートカットも使えません・・・(これがかなり致命的)。
持っているのが新型のMacbookなら、先日発表されたCinema Displayを使えば解決するのかなと思いますが、旧型では使えないし・・・。
Javaエンジニアの人で、ノートPCでEclipseを使っている方って居られるんでしょうか?
諦めてiMacを買うか、Macbook + Cinema Displayを買い直すか、どちらかしかないのかなぁ・・・。
皆さんの自宅での開発環境、良かったら教えて下さい。