「Python」を含む日記 RSS

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

2009-06-14

誰が負けたのか判った気がする

相手が勝ち誇ったとき、そいつはすでに敗北している

ジョセフ・ジョースター

何が違うのか解った気がする(菊池 Blog

今どき言語論争なんて愉快なことをやってるのがアンテナに引っかかったのでヲチしてたんだけども、勝利宣言キタコレ

  1. id:higayasuo氏がid:technohippy氏に、「Google App Engineは、Python版以外にJava版も出たけど、サンプル見たけど、たくさんコード書かなければいけなくて、正直どこがいいのか教えて欲しい」と聞かれる。
  2. id:higayasuo氏、大要「書く量は問題にならない」と答えた。という内容の記事を投稿。
  3. それを見た菊池氏が「GAEJava を選択する場合の最大の理由」は「「うん十万行の既存コードをそのまま投入できる。それにインターフェースするために多少オーバーヘッド気味のコードが数100行必要なのが何の問題がある?」と高説。
  4. id:higayasuo氏が菊池氏に、大要、GAEではRDBMSが使えず移植も大変なので既存コードを使えない、と反論。
  5. 菊池氏が、大要、設計が悪いからだ、と反論。
  6. さらに菊池氏のターン、大要、レイヤリング意識して無い奴に言っても無駄だったね反省、と勝利宣言。

さて。

ネットバトル(藁)の勝敗傍観者の評価によって定まるとしても、「傍観者の評価」は俺一人の評価と同値ではなく、むしろ多数が形成する「空気」だから、俺が「このバトルは◯◯の勝ちだ」と宣言したところで月桂冠には成り得ないわけだけども、「空気」の一要素として、高らかに宣言しておく。

このバトルは菊池氏の負けだ。

菊池氏の主張というのは結局、「日頃から良い設計コードを書いていればコードの再利用も容易なはずだ」という「Javaプログラマかくあるべし」論だ。

だから菊池氏は自分の勝利を確信しているだろう。「低能プログラマを叩きのめしたぜ万歳!」

ところが、このネットバトルの勝利条件は「どちらが優れたプログラマか」では無い。もともと他言語との比較でJavaメリットが問われているから、Javaプログラマを叩きのめしても意味がない。

そこで「優れた設計に基づく既存のコードを簡単に再利用できるのがJavaメリットだ」と答えても、「その優れた設計に基づく既存のコードというのはどこにあるんですか?」と訊かれる。(ここでの「優れた設計」は、RDBMSbigtableになりGAEのSandBoxの縛りがあっても容易に移植できる設計でなければならない。)

さて、この問いに胸を張って「いくらでもある」と答えられるJavaプログラマがどれほどいるのだろうか?百歩譲って自身が優れた設計に基づくコードしか書いてこなかったとして、Java界全体を代表して発言してもなお結論が変わらないと言えるだろうか?

つまり、他言語使いに問われた時に「俺の書いたものに限らず、Javaの既存コードはたいてい再利用できる」と言えるだろうか?

答えは否だ。嘆かわしかろうが何だろうが、否だ。

さて、このネットバトルの勝利条件は何であろうか。

それは、「GAEJavaを使うメリットをより的確に表現する事」だ。

菊池氏はその答案として、理想論ないし机上の空論を掲げた。

id:higayasuo氏の答えは大要「慣れた言語で書ける事」だ。格好良くはないが、現実的な答えだ。

菊池氏の答えが全く説得力がない以上、id:higayasuo氏の答えの説得力が弱く反論が容易であったとしても、1ピコグラムでも説得力を有する以上は、天秤はid:higayasuo氏に傾くのだ。

このネットバトルの勝者はid:higayasuo氏だ。

これは、JavaPython勝敗とは関係のない世界の話。

ところでGAEJavaサポートメリットは、Java上で動く多数の言語が使えるようになる事だ、と言ってみるテスト

2009-06-03

Python わかんね。Singleton わかんね。 __new__ わかんね。id わかんね。

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)

id(a) == id(b) なのに id(a.x) != id(b.x) なのかわかんね。

2009-06-01

近頃ちょっとまじめにJavascriptを書けるようになりたいんだが

そういえばしばらく前にGreasemonkeyスクリプトを書いたことがあったっけ。あれがあれば、とっかかりにはちょうど良かったかもしれないんだけど、どこかに残ってるかなぁ。脱衣ブロック崩しクリアできなくて、弾速設定を無理矢理書き換えるスクリプトを意地になって書いたんだったなぁ…。

うそう、10年近く前だと思うけど、練習問題以外で初めてPythonコードを書いたのは、無料画像サイトから自動JPEG落とすのが目的だったっけ。

あと、初めてバイナリエディタを使ったのは、水着ポリゴンの透明度を変更できるのを知ったときだったかも。

2009-05-20

http://anond.hatelabo.jp/20090520103841

変数名の長さは、スコープの範囲と相関させたい。

あと、お決まりの名前ってのもある。

特にコールバック関数引数は決まってることが多い。

そういえば、javascriptイベント関数引数をなんにしようか迷う。

"event"は予約されてるんだよね。"e"は短か過ぎる気がするし。

なんにしようか。

pythonだと、forで"k, v"とかどうかと思ったりした。

最近はそっちになれて、"key, val"が長い気もしてきてる。

結局文化のような気もする。

2009-05-02

RubyJavaと違ってPythonとかSchemeは一般的な知名度がないよな

知り合いのプログラミング知らない女に聞いたら「Python?あのyieldでまわせるやつ?

Scheme継続だよね?似てるよね」

一般人はそれくらいの知識しか持ってないのが現実

2009-04-15

増田ギークレポート曰く「Rubyistハッカーが潜んでいる」

実はまいにんぐマイコ先生

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"})

2009-03-30

ふと、はてなでの言語シェアってどんなものかと思った。ので調べる。といってもはてブ人気度だけど。

調べる言語・場所

6つの言語タグを調べた。

  1. http://b.hatena.ne.jp/t/javascript
  2. http://b.hatena.ne.jp/t/perl
  3. http://b.hatena.ne.jp/t/ruby
  4. http://b.hatena.ne.jp/t/java
  5. http://b.hatena.ne.jp/t/python
  6. http://b.hatena.ne.jp/t/c%2B%2B
  7. http://b.hatena.ne.jp/t/c
エントリー

現在の301番目のエントリーの日付から300エントリーまでの経過日数を出し、一日平均を出す。

言語日付経過日数日毎
javascript2009/03/062512.2
perl2009/02/13466.6
ruby2009/02/13466.6
java2009/01/18724.2
python2008/06/302741.1
c++2008/05/193160.95
c2008/04/193410.88

思った以上にpythonの人気がない。そしてruby軍団恐るべし。

平均ブックマーク

本当はそれなりのサンプル数で分布を取るべきだけど、手軽に5users以上最新25エントリーの平均を取ってみた。

言語平均ブックマーク
javascript55
perl33
ruby24
java62
python32
c++63
c43

あてにならなかった。

自然言語処理Python がいちばん」について

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辞書データの一部を研究に使った記憶はある。

しかし、あそこまで精緻辞書データを使う程高度な処理は今の所必要ない。

うちで自作した不要英単語辞書と、特別扱いする英単語辞書で間に合わせていたと思います。(その辺記憶あいまい。)

WEBユーザーインターフェースdjangoで。

djangoは非常に明快で、快適。

画面の機能を追加するのに、例えばS2Strutsアクション定義の煩雑さに比較すると、天と地との差ほどにdjangoは簡単。

あと、pythonを使える開発者日本には少ないとの事ですが、うちでもそれは同様です。

しかし、自分の隣の席の同僚はperlに非常に熟達していて、彼はすぐにpythonの達人に変わりました。

優秀な方にとっては言語なんて何をつかってもあまり変わらないみたい。

でも、彼も自分自然言語処理JAVAC++のようなまわりくどい言語は使ってられないという点では同意しています。

2009-03-27

ハッシュ関数を調べた

http://anond.hatelabo.jp/20090326142330 の続き

pythonでベンチとった。試した方法は以下

  1. md5hex: md5を使う
  2. crc32x4: 4分割してそれぞれcrc32にかけてつなぐ
  3. headtail: 初めの16文字と終りの16文字をつなぐ
  4. skipover: 等間隔に32文字とる

長くなるので、使用したスクリプトと生の結果は http://anond.hatelabo.jp/20090326123924 に貼った。

結果としては、早さは3, 4, 1, 2の順で、3を基準にとると、

文字列md5hexcrc32x4headtailskipoverループ回数
2566.6361.01.465536
10248.3361.02.016384
409626851.02.54096

という比率になった。

文字列長が長くなるとやはり後2つが有利だ。また、今回は32文字に切り詰めたがそれでもコリジョンは発生しなかった。アルゴリズム上、数文字だけの変化には対応出来ない可能性があるが、切り詰める量が少なく入力にいくらかのランダム性があれば実用になると思う。

(追記:URLで使ったら、ランダム性が悪くてコリジョン出た。素直にmd5ベターかもしれない)

しかし、この程度の速度差であれば、コリジョン耐性を重視して素直にmd5を使用するのも良いかもしれない。特に、今時はネイティブコードライブラリをほぼ標準で持つ処理系が多いため、まずはmd5で、としても間違いはなさそう。

2009-03-26

http://anond.hatelabo.jp/20090326141353

それいいね。

後は、間を抜かすアルゴリズムだね。

250超えたら一つおき、でもよいかも。

int(文字列長/250)文字おきで圧縮する。

とか書きつつ。

http://search.cpan.org/~gaas/Digest-1.15/Digest.pm#Digest_speed

数字が小さいほうが高速、ではなく大きいほうが高速。

これはperlなんだけど、LLで下手に演算するより、バイナリライブラリを使ったほうが高速らしい。

ちなみに使う言語python

幾つか実装してベンチとってみよ。案外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 &gt;&gt; shift
print &gt;&gt; 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 &gt;&gt; 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 &gt;&gt; stderr, time_fmt % ('crc32x4', (time() - start) * 1000)

start = time()
startend = tuple(s[:16]+s[-16:] for s in data)
print &gt;&gt; stderr, time_fmt % ('headtail', (time() - start) * 1000)

start = time()
skip = tuple(s[::(len(s)/32+1)] for s in data)
print &gt;&gt; stderr, time_fmt % ('skipover', (time() - start) * 1000)

for s in izip(data, md5hex, crc32x4, startend, skip):
    print join(s)

実行結果

% python hashbench.py 0 &gt; hash0.txt
string length: 0x100, cycle: 0x10000
    md5hex:   199 ms
   crc32x4:  1081 ms
  headtail:    30 ms
  skipover:    41 ms
% python hashbench.py 2 &gt; hash1.txt
string length: 0x400, cycle: 0x4000
    md5hex:    83 ms
   crc32x4:   363 ms
  headtail:    10 ms
  skipover:    20 ms
% python hashbench.py 4 &gt; hash2.txt
string length: 0x1000, cycle: 0x1000
    md5hex:    52 ms
   crc32x4:   170 ms
  headtail:     2 ms
  skipover:     5 ms

2009-03-22

久しぶりにコードを書いた

pythonは相変わらず行末に;を置いてしまう。

awkで始めてifとwhileを使った。

CakePHPよりもRailsの方が触りやすいような気がした。

2009-02-23

何を勉強していいのかわからない。

何を勉強していいのかわからない。

プログラムというものに興味を持ち、独学で勉強した。

言語Hello Worldぐらいは書ける。erlangハノイの塔を解いた時はこんなに短く書けるのかと感動した。でもいずれの言語もちょっとずつしかかじって無くて、自分がこれから何を勉強していいのかわからない。

Java, C++, Ruby, Python, JavaScript, PHP, erlang, 最初は練習用の問題みたいなのを解いているのが楽しくて、ブログとかで目につく言語で気になったものを選びながら各言語でやってみた。でもこのあと何をしたらいいんだろう?

オブジェクト指向クラスと違うの?プロトタイプベース?何ソレおいしいの?

こんな僕は何を読んで、何を学べばいいのでしょう。

2009-01-30

http://anond.hatelabo.jp/20090128013642

例えばプログラミングを初めて見たいなと思う。 そのとき、「プログラミング」で検索しても、大御所以外は見つけにくい。何言語入門とかのページに行き着くのがほとんどだろう。 でも、プログラミングを始めたばっかりのやつにどれがいいのかは判断しにくい。

そこで俺ははてなで、「プログラミング」とタグがついたものを購読する。 一週間、いつも通り趣味時間を楽しむだけで、だいたいプログラミングについては感覚がつかめてくる。この言語はこういうもので、この言語はどうだ、とか。 メタな視点を得るのに適してる。まず全体像をつかんで、それから細部について学習するときは、本を開くよりもこういうアプローチの方が楽だし、手っ取り早いし、効率もいい。

そのうち読んでると、それぞれの言語にも特質や向き不向き、いろんな評価軸があるんだとわかる。 その中でjavascriptpythonが良さそうだと思ったら、そのタグフィードに購読する。 これを繰り返すと、いつの間にか勉強が半分くらい進んでる。 趣味時間で。

一番いいのは、受動的に能動できること・・・っていうんかな。 関心を持って、あたらしいフィードを追加するのは能動だ。 でも、一度登録したら、その日からそのことに関する学習は受動でできる。 趣味足り得る。

社会情勢に関して詳しくなりたいな、っておもう。 でも新聞に書いてあることを毎日Wikipediaで調べるほどのエネルギーは割けない。

でもフィードはてなを登録してると、finalventさんのブログがよく取り上げられていることを思い出す。そこで彼のブログを登録する。

・・・こういう風に、普段から自分が知ろうと思ってなかったことに関しても触れておくことで、いざ必要になったときに一歩進んだものの見方ができるようになる。水準を底上げできる。

まあ、俺はこういうこともあってGoogle Readerで一日700くらいのエントリーを受信して、だいたい20個ぐらい星をつけてる。

あくまで遊びの範囲でやることがある意味肝心なんだと思う。 遊びだったら、続けたくなるからね。 勉強とか下調べみたいなことでも。

2009-01-22

高学歴がんばり屋はWEBクリエーターになろうとすんな

http://takahashifumiki.com/others/480/

WEBクリエーターって無能なスイーツ(笑)でも

まぁまぁまともな生活ができる楽園なんだからさー。

アンタのような頑張り屋さんで能力が高い人が

わんさか来ちゃうと、居場所なくなってしまうでしょ。

しーえすえすないと見ればわかるでしょ?

俺らがスイーツ(笑)だって。

HTML/xHTML

俺達WEBクリエーターメインとなる道具。

これを知らなきゃ始まらない。

当然一度くらい仕様書読んでるよね?

「・・・」

CSSはっく

クソプログラマがわけわかんねぇ実装するから

俺たちはこんな苦労してんだ。

あー忙しい忙しい。

うんそうだね。でもあと5年もすれば

そんな知識ほとんど必要なくなるけど

ほかに何ができんの?

「・・・」

WEBデザイン

やっぱ俺たちが作ったサイトキレイでオシャレだよな。

見てみろよこのきらきら感。

どのサイトきらきらしてて

同じようなレイアウトで違いがわからないんだけど?

ってかこんな海外サイトあっあよね?

「いろいろサイト見て参考にしてるんで・・・」

まぁ0->1を生み出せる人間なんてほとんどいないわけだから

君たちは1を1.1にしてくれればいいよ。

じゃあ1日100サイトくらいは見て研究してるんだよね?

「・・・」

・・・じゃあなんでこの位置にこのボタン置いたの?

「・・・なんとなく」

wwwwww

なんとなくって何だよwww

クリエーター自分の作ったもの説明できなくてどうすんだよwww

見た目だけパクってんじゃねーよ。

デザイン

俺達Photoshop使い。この合成まじ芸術

結構絵を描いてきてるんだよね?勉強してるんだよね?

この画像パース狂ってるし光源がわけわからなくて気持ち悪いけど?

「・・・」

アナログできねーやつが

Photoshop使ってもたかがしれてんだよwww

色についてちゃんと勉強したの?

なんで病院サイトで背景黒なの?死ぬの?

「イキル。なんかクールじゃないですか??」

色の本は1冊くらい読もうよ。

ユーザビリティ

やっぱサイトユーザビリティ考えて作らないと嘘でしょ。

うんうん重要だね。

で、ヤコブニールセンは当然読んでるんだよね?

「・・・」

アクセシビリティ

やっぱ俺達クリエーターがつくったクールサイト

多くの人に見てもらいたいんすよ。

うんうん。そうだね。

で、ガイドラインは当然読んでるんだよね?

「・・・」

Flash

やっぱFlashインパクツあるよな。

マジ引き込まれるわ。映画のようなサイトだよな。

おぉさすがクリエーター。センスあるね。

ところでさっき言ってたユーザビリティ

アクセシビリティとか考えているんだよね?

「・・・あぁまぁ一応」

で、どこクリックすればいいの?

「・・・」

データベース

半端な知識で設計されても後々困るからやんなくていいよ。

.htaccess

100ページもmetaタグ転送設定すんのかよ。

無茶な要求しやがって。こういうわけわかんねぇ

依頼が来るから俺達WEBクリエターは大変なんだよ。

.htaccessディレクトリ以下転送すれば?

「・・・?」

別に.confには触れなくていいから、

.htaccessくらいは設定できるようになろうよ。

君らの大切な作品置く場所をコントロールできるんだよ?

興味ないの?死ぬの?

「イキル。でも興味はありません。」

パーミッション/所有者

内容が同じファイルUPしたのに動かない・・・

パーミッションが違うよ。

よく使うFFFTPに項目あるじゃん

どういう意味か調べないの?興味ないの?死ぬの?

「イキル。でも興味はありません。」

Perl/PHP/Ruby/Python

フォームなんていろいろあるから

適当に選んでUPするだけでだろ。簡単簡単。

え?確認画面がほしい?

「無理です。」

別にアプリケーション作れとは言わないけどさ

単なる問い合わせメールフォームくらいつくれない?

サイトにフォームは必須じゃんwww

サーバサイド言語を1つくらいは勉強しとけよと。

簡単なカスタマイズもできないようじゃ

顧客の要求にこたえられないだろ。

ajax

やっぱ今はAjaxだよね。スクロールしてもサイドバーがついてくるんだぜ!!

なにこの使いやすいサイト。俺達天才

ライブラリ読み込んでるだけじゃね?

しかもDOMってるだけだよ。

アプリケーション作れなんて言わないから

コアとDOMくらいは勉強しておくべきじゃね?

大切な道具であるHTMLコントロールできるんだよ?

君らクリエーターならこのナビゲーション

俺ならこうするって思うことないの?

「・・・ライブラリで充分です。」

正規表現

またバカなクライアントから修正きたよ。

まぁ俺がサービス名間違ってたんだけど。

確認しないの?

クリエーターだし誤字脱字の確認は俺の仕事じゃないっす。」

ふーん。ちなみにIE6でレイアウト崩れてるけど?

「・・・」

で、なんでその誤字の修正に3時間もかかってんの?

「だって100ファイルもあるんですよ?俺じゃなきゃ1日あっても終わらねっす。」

君らが大好きなDreamweaverで多少正規表現使えなかったっけ?

1分で終わるよ。自分使うツールの機能に興味ないの?

忙しい忙しいって無能なだけでしょ?

「興味ないです。CSSダイアログで設定する機能くらいしか使わないです。」

CSSすら覚えてねーのかよwww

正規表現完璧に使えなくていいから

サルでもわかる正規表現くらい読んだら?

WEBクリエーターって仕事

これまでのようにやっぱり自分が満足できる

クールサイトを作って行きたいですね。

うんうん自分が納得できるものを作るのは大事なことだね。

でも君の制作したサイト商品何も売れてないよ?

サイト見てるユーザが全然満足してないんじゃない?オナニーなの?

「・・・でもクライアントはきっと満足してますよ。俺のオナニーすごいし。」

クライアントクールサイトじゃなくて

売れるサイトが欲しいんだよ。

クソみたいな商品を扱ってるサイトでも

なんとか売るのがてめぇらの仕事だろが。

俺たちWEBクリエーター。オシャレな奴とはだいたい友達

思い知ったかい?俺たちWEBクリエータークオリティを。

俺たちWEBクリエーターはさ、一流の本物デザイナー様とか

一流プログラマ様が作ってくださった物をまったく理解しようともしないで

いじくってるバックボーンなきスイーツ(笑)なんだからさレベル高い奴はくんな。

こんな程度のスキルで4、500万は稼げちゃって

やっすいキャバでもオークションのやり方教えてとかブログのやり方教えて、

とか言われてお家行ってにゃんにゃんできちゃうわけだから出たくねーよこんな楽園。

しかもこんな能力じゃ楽園でたらどこも行くとこないよ。

もし追い出されたら元WEBクリエーター村でも作って

なんで努力してる人がいい環境

努力してない俺らが明日食べるのに困るんですか?

努力しないでそこそこの金がもらえて

おしゃれって思われる仕事を用意するのが政治だろって訴えますよマジで

だから高学歴がんばり屋の優秀な人間はくんな。

でもねぇあと10年もすればデザインとかコーディングなんかも

海外に出されて、ライターだったりアイデア出せる人間しか

残らないだろうけどなwww

オワタwww

2009-01-19

言語使いへの偏見の例

平和だなぁ。

2008-12-31

http://anond.hatelabo.jp/20081231173837

Exploit系のバグなのか、わざとやっているのかが外部ツールで判別付かない場合がある

ツールにひっかかるから、ですらないと思う。単にそういう技が必要なくなっただけ。 そもそも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ではないよね。

Exploitまがいのコード

そーいうことはxbyakとか使えば楽にできるとおもう

http://anond.hatelabo.jp/20081230225149

元増田っす

言語仕様コンパクトなのがなぜ良いのかと言うと、実は2つ理由があります。

  1. 学ぶのが楽だから
  2. コンパイラを作るのが楽だから

1つめは「全体像を把握するのが楽」という理由で。C++JAVAだと全体像を把握するだけで疲れてしまうわけです。(使い方は奥深いけどね)

2つめはCOBOLを学ぶのと同じ後ろ向きの理由だけど、これからも活躍の場が多いだろうという予測。いまだに組み込みとかハードよりのところだとCは現役だったり、新製品の開発でももりもり使われてます。コンパイラが簡単に作れるし移植も楽だから。(これがCOBOLとかJAVAだと、開発環境を整えるのが大変なので選択されない。未来はわからないけれどもね)

標準ライブラリまで含めても、Cは異常に小さいよ。速いし。

Cのポインタってのは、値渡しのみにするとスタックコンパイラをすっきりかけるけど、じゃあどうやって柔軟に運用させるべーと考えた妥協の産物です。

だから標準ライブラリにすら文字列・集合・リスト配列を便利に扱えるものは入ってないし、ガーベジコレクションも多重のスレッドもヒープも入ってないわけです。(だからスタックと静的割り当てだけなんとかすればコンパイラが作れちゃう)知らなかったから作れなかったんじゃなくて、あえて切り捨ててる。

方向性として「間違いを少なくプログラミングする」とか「効率よくプログラミングする」ではなく、「コンパイラを簡単に作れるのが1番。でもできるだけプログラミングしやすいよう」にしてる。

そういう言語を2番目以降に学ぶのが良いのは、ハードよりの考え方(正確には、コンパイラよりの考え方)が出来るようになるから。これが「ポインタと言う概念を理解できる」ということに含まれてる。

メモリ意識したりポインタ概念を理解しておくと「なんで暴走するのか」「どうすると自分の足を撃てるのか」が理解できる。限界も面倒くささも便利さもわかるからね。(ポインタだからっつって暴走するんじゃなくて、C言語ポインタの実装だから、なんだけども。あと、ほんとは機械語アセンブリを学ぶのが良いとは思うけど、それはハードルが高い。出来ることも少なくなっちゃう)

ポインタが暴走するから隠蔽する・使わないようにする・ミスっても平気にする、ミスらないようにするというのは、言語としては正しい方向性だと思う。

誰がどう考えても「存在しない配列を参照したらエラーを返さずに黙って暴走する(そこにあるメモリを見ちゃう)」「仕様として不定な動作が多い」なんてのはまずいでしょう。けれども、なぜまずいのか知らないまま便利な言語に慣れちゃうのは、感覚として良くない様な気がする。

C#だと信じられないくらい簡単にアプリ作れるし、PythonPerlは普段使いの言語としてはすっごく便利。でもそれって、パック野菜やお惣菜を買ってきて晩御飯を作るようなものじゃないかな、と。ピーラーやミキサーは便利だし炊飯器はなきゃ炊事なんてやってられない。それでも、その道を学ぶのであれば「レシピを見れば料理は作れる」「包丁となべで調理できる」「なべかまでご飯は炊ける」なんてのは、必要じゃないかなあと。

今あえてC言語を学ぶのは、それが学びやすい(情報が手に入りやすい)最後の言語だから。

(まあ、何を目指すかによって違うとは思うけどね。僕の言ってんのは「いまあえてスペイン語だ!」って言ってるようなもんだし。違うか)

2008-12-30

http://anond.hatelabo.jp/20081230060518

元増田だけども。

プログラミング」の最初期は、

  • 逐次実行
  • 変数
  • 分岐
  • 繰り返し
  • 入出力

を使って、思ったことを実現すること(問題→モデル化→実装→実行)を実現するだけで充分だと思う。(テストとか汎用化はもっと先)

Pythonのすべての機能を使うのではなくて「前提知識が少なくて良く、できるだけ書かなければならないことが少なく、他の言語に移行できる程度には特殊でない」のを満たすのがPythonかなあと。(個人的には、字下げなんかのプログラミングスタイルを強制して覚えさせるのも向いてるとは思うけど)

そういった意味で、プログラミングに親しむ・練習問題を実装してみるのには、Cは不向きだと思う。

だけれども、純粋アルゴリズムを学ぶでもなく、純粋に完成された設計でもなく、実装するのにすごく手間が掛かるわけでなく、自分の足を撃つのが容易であるような、C言語を学んでおくのは「仕事っていろんなトレードオフでできてるのね」というのを体得できてすごく良いと思うんだけどね。

流行デザインパターンを学ぶには向いてないけど、たいていのアルゴリズムは実装できる能力があるし。

いまC言語を学ぶべき3つの理由

  1. 使用できる環境が多いから
  2. 言語仕様コンパクトだから
  3. ポインタと言う概念を学べるから

プログラミング言語として、二番目以降に学ぶには良い。(最初のプログラミング言語には向いてない。Pythonとかが良いんじゃないかな)

2008-12-27

Re: anond:20081227163226

こういうこと?

Python 2.6 (r26:66721, Oct  2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> spam = "egeegeegeggeeegeee"
>>> "egg" in spam
True
>>> spam = "egegegeeegeeeegege"
>>> "egg" in spam
False

2008-11-19

http://anond.hatelabo.jp/20081119000921

つい最近Google App Engine Oilに処女を捧げたばかりの増田ですが。

ドキュメントの量?

そんなもんネーよ。App Engine自体、pythonドキュメントに比べたらヘみたいな物だよ。ドキュメントよりコードだよコード

HTMLがピロ?

それで十分じゃネーか。パラメータだ?クッキーだ?セッションだ?そんな物に構ってられるか。

デバッガ環境エディタ

対応してる奴使え。対応してなきゃ捨ててしまえ。

CPUディスクサーバ

知るか。SQLなんか捨てちまえ。そんな高尚な物なんて必要ねー。

業務?

そんなもん使えるかボケ

ってのはおいといて。

結局、定型処理の標準化なんで、設計フレームワークに合わせて標準化するなら有用でしょう。

Cでやってたのをjavaで標準化したような物。

2008-11-16

自宅での開発環境

興味のある方、ご返信頂ければ嬉しいです。

端的に言えば、Javaエンジニアの自宅での開発環境を教えて頂きたいです。

家にあるのがノートPC1台だけなのですが、この環境ではなかなか開発する気になれません・・・。

以下、補足。

所謂お仕事エンジニアをしています。SIerです。

就職するまではプログラミングは一切したことがなく、就職して初めてプログラミングするようになりました。

会社ではWindowsで、Eclipseを使ってJavaばかり書いてます。

会社の開発環境はとても快適で、ディスプレイも大きいのが2つあるし割と楽しくプログラミングさせて貰ってます。

が、最近自宅でも開発してみたいなーという想いがふつふつと沸いてきました。

興味があるのはやっぱりJavaそれからGroovy, Pythonです。

ところが、家では殆どインターネットしかしないので、我が家PCは1年前のMacbookがあるだけです。

JavaGroovyはやっぱり会社環境マルチディスプレイ + Eclipse)に慣れているとMacbookではとても不便です。

また、MacbookだとEclipseの様々なショートカットも使えません・・・(これがかなり致命的)。

持っているのが新型のMacbookなら、先日発表されたCinema Displayを使えば解決するのかなと思いますが、旧型では使えないし・・・。

Javaエンジニアの人で、ノートPCEclipseを使っている方って居られるんでしょうか?

諦めてiMacを買うか、Macbook + Cinema Displayを買い直すか、どちらかしかないのかなぁ・・・。

皆さんの自宅での開発環境、良かったら教えて下さい。

特にノートPCEclipseを使っている人が居たら、どのように使用しているか教えて頂きたいです。

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