はてなキーワード: SELECTとは
Python vs Ruby vs PHP vs Haskell プログラミング言語バトル part1
http://anond.hatelabo.jp/20120118220204
Rubyistってなんであんな小学校の図書室で毎日読書してそうな
顔面オジサン、オバサンばっかなの?
Scalaer: 鼻持ちならない、モヒカン
Lisper: マジキチ
Rubyist: ネクラ、オタク、キモメン、いじめられっこネクラチビメガネ、色黒、キモオタ、顔面オジサン、オバサン
Rubyのブロックが便利すぎて、Pythonをやめたくなった。
いちいちtemporaryな関数を作成してから目的の関数に渡していたのがばからしくなった。
リストやジェネレータ式の内包表記が便利過ぎて
どうせ廃れる。
609
>リストやジェネレータ式の内包表記が便利過ぎて
おれもそう信じてたけど、Rubyの、メソッド呼び出しを続けて書けるほうが便利だわ。
まるでjQueryみたい。といってもjQueryのほうが後発だけど。
たとえば「xsから0以上のものを選んで、その二乗の和を求める」場合
sum([ x*x for x in xs if x > 0 ])
これだと、後ろから読まないといけないんだよね。でも
xs.select{|x| x > 0}.map{|x| x*x }.sum
これなら頭からひとつずつ読めばいいから、わかりやすいし、考えたとおりに書きやすい。
まさにスクリプトって感じがする。
Python: [[x,y] for x in xs for y in xs]
Ruby: xs.map{|x| xs.map{|y| [x,y] } }.flatten(1)
いっぽうメソッドチェーンは
orz.sage().hage().hoge().hige() タイプの問題には向いている
つまり向いている方向がちがう
(まあHaskellなら hige . hoge . hage . sage と書くだけだというのは置いといて)
強い弱いということで言うと、問題を解くのに必要な一番能力が弱い
(限定された)道具を使うという考え方があるようだよ
ベタ再帰は強い(汎用的)、がそれゆえ読むのに注意を必要とする
foldrは再帰よりは弱いが、foldrで表現可能な問題のクラス(原始再帰)はかなり
広いので、mapやfilterで済むならもちろんそのほうが望ましい
ではこの問題は弱いmapやfilterを結合させるほうがいいかというと、
俺はlist comprehensionのほうが集合表記そのもの=whatを表現していて好きだな
Pythonのlist comprehensionのsyntaxはあまり好きではないが
それは大きな問題じゃない
メソッドチェーンってバグをわかりにくくするだけだと思うなあ。もちろん性能面もあるし。linqとかは良いと思うけど。
同じメソッドチェーンでも、linqなら良いけどrubyなら悪い .....
一言で言うと「俺はRubyが大嫌いなんだぁーー」ということですな
内包表記は構文でサポートしないと難しい(マクロがあれば別だが)
メソッドチェーンが関数型の方法に比べて特に優れている点があるようには思えないが
パイプ順に書きたければ書けるし
680,663
Pythonには関数型として致命的な弱点があるから、メソッドチェーンでは簡潔なコードが書けない
たとえば「(1) Rubyは 条件判定が(文ではなく)式」だから以下のようなコードが書ける
if test
if test_1 then test_1_1 else test_1_2 end
else
if test_2 then test_2_1 else test_2_2 end
end
}
あるいは「(2) Rubyはブロック内で局所宣言が可能」だから上のコードを以下のように書き換えてもいい
cond_1 = if test_1 then test_1_1 else test_1_2 end
cond_2 = if test_2 then test_2_1 else test_2_2 end
if test then cond_1 else cond_2 end
}
関数型言語であれば「(1) 条件判定(if/case)が式」で「(2) 局所宣言(let .. in .. end)が可能」なの当たり前
ところが残念な事に、どちらもPythonには欠落しているから、上の例はストレートにコード化できない
だからPythonではメソッドチェーンは使われないし、「酸っぱい葡萄」に見える
Rubyでもリスト内包表記が言語として組み込まれてくれると嬉しい
だと思う
頭に浮かんだロジックをすばやくコード化するのはメソッドチェーンが適しているし、
じっくり腰を据えてコード設計するならリスト内包表記のほうが美しい
自分は、たぶんこのスレもRubyコアの中の人も見ているだろうから
そのうちRubyにもリスト内包表記が実装されるんじゃないかと期待しているw
メソッドチェーンは書き易い
内包表記は見た目が整ってて綺麗、最終的な型がわかり易い
いじょ。
Pythonの方が弄れる対象が多いのに、なんでウェブ系だとPHPの方が流行ってんだろ
端末からのテキスト処理も楽だし、数値計算周りのライブラリも充実しているのに
PHPが優遇されているのって歴史的な経緯以外に何か他の理由でもあるのか?
けどまぁ、情弱な文系SEが大半を占めているバカだらけの日本じゃ別にPHPで困ることもないか
数値計算や端末からのテキスト処理なんてWeb系じゃ大して使わないからなあ…
Pythonに関しては、ZopeさえコケていなければWebサーバ用LLとして大成功していたはずなのに、
Railsなんかが登場したおかげで、すっかり影が薄くなってしまいますた....
ってか、railsにインスパイアされたフレームワークって今じゃ幾らでもあるよね
djangoとかCakePHPとか。rubyってRoRを使いたいユーザを除くと、
pythonやPHPの方がユーザー数は圧倒的に多いと思うんだけど
本家のrailsって、他を遥かに越えるほど良いものなんだっけ?
44
Zopeが登場した当時、「RDB+PHPはもう古い、これからはOODB+ZopeがWebの中軸になる!」と
少なくとも自分はZopeからPythonという言語を知ったし、その時点でRubyは知らなかった
そして、その後のORM(RDB)+Railsの出現と華々しい革新性への注目は、誰もが知っているだろう
今でもZopeの開発は継続されてはいるが、結果的に当初の期待が大きく裏切られたという事実は動かしがたい
djangoとCakePHPについては実際に触っていないので憶測になるが、おそらく技術水準ではRailsと同等だろう
しかしRailsはRailsでコミュニティの活動が活発だし、その進化は異常に早い
Railsに何か致命的なトラブルが発生して開発が停滞する、あるいはdjangoやCakePHPから
何かのイノベーションが提示されでもされない限り、後発のdjangoやCakePHPがRailsに追いつくのは無理
Railsは決して技術的に完璧なWebフレームワークではないんだけどね....(たとえばSeaSideのような.... )
だからこそ「もしもZopeが....だったなら」という「たら・れば」感はPythonコミュニティの潜在認識になっている
C a k e P H P は う ん こ
CakePHP使ってんの?
可哀そうにw
でもやっぱりいつもの使い慣れたLL(Python/Ruby)で
Webサービスを書きたいってのがある
求人数は
Ruby on Rails>>>>>>>>Django
http://www.indeed.com/jobtrends?q=django%2Cruby+on+rails&l=
どういうことなの?
求人数が多いのはそのためだと思うよ
なんかのミスかと思ったがアメリカでもRuby on Railsは人気があるのかなあ・・・
Pythonのほうが使いやすいと思うのだがフレームワークはRailsが優位なんだろうか
Djangoは周辺ライブラリが微妙だし本体も鈍くさい感じがする。
でも、FlaskはSinatraより好きだから、Pythonが嫌いってわけではない。むしろ好き。
ただ、いざ作り始めるとやっぱりRailsが楽だなあってなって、Railsを使い続けている。
同感だ
同じように思っている人が他にもいて安心した
PHPはフレームワークが乱立しすぎているから、RailsをPHPで実装してみようというやつが出てきた。
それに比べてPythonは、Zopeというデファクトスタンダードが既に存在していたけど、
ただ、どうやってもRailsもどきがRailsを超えることはできないのは間違いない。
パクリはオリジナルを超えられない(キリッ って定型句だけど、
これってキリッって言いたいだけだと思う。
D言語って超えたって?
B言語って超えたって?
PHPで同じ事をできないわけではないだろうけど、Ruby on Railsほど簡潔にはできない
まあくだらねえWEBサービス作って喜んでる情弱は早く死ねって事だよ
そういう理由じゃなくてRailsのほうが単純に情報もプラグインも多いからでしょ
linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん
わざわざ不合理で不完全な言語を使うなんて
もしも
>linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん
真実であるのなら、今頃はdjangoの情報とプラグインが溢れかえっているはず
yumや、gdbとgnomeの拡張がpythonであるからといって、それをwebアプリでも使いたいと思う人は少ないというだけのこと。
ソースからインストールする必要があったとしても、web開発ではrubyを使いたいという人が多いというだけのこと。
というか、世界中のPythonプログラマが Remeber Zope!! を合い言葉に
打倒RailsたるWebフレームワークを開発しているはずだけど、
Railsも登場してから、かなりの年月が経過しているんだけどなぁ....
その間にもRailsはRails 3が登場して、REST/AJAXの強化等の進化が継続しているよ
Ruby では
ary.map {|x| x**2}
map(lambda x: x**2, ary)
となり、lambda の本体が1つの式では表現しきれなくなると
.....
と書き換える必要があります。
f = lambda x:(x and f(x-1)*x)or 1
RubyにはPythonのように「lambda本体は式でなければならない」という限定がありませんから、
f = lambda{|x|if x == 0 then 1 else x*f.call(x-1) end}
または
f = lambda{|x|x == 0 ? 1 : x*f.call(x-1)}
と書けます。lambda内でreturnが使えますから、書きたければ
f = lambda{|x|if x == 0 then return 1 else return x*f.call(x-1) end}
でもOKです。
348
これはPythonをdisっているように見せかけてRubyをdisっているのか? と一瞬思ってしまったw
だってRubyのほうが長くない?CLのfuncallみたいなcall()がちょっとうざいし…
そしてどっちもlambda式の中で束縛変数の名前で再帰可能、と
print [x*2+100 for x in [1,2,3,4,5] if x > 2 and x < 5]
暗号のように見える。
puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2+100}
思考の流れと、コードの流れが一致しているので書きやすい。
map(lambda x: x*2+100, filter(lambda x: x > 2 and x < 5, [1,2,3,4,5]))
pythonて可読性が高いのをうたってる割にはそこいまいちだよね
Rubyの場合には、左から右へと無名関数がデータフローあるいは
関数型プログラミングに不慣れな初心者でも、参照透明性のあるコードが自然に書ける
プログラマにとって優しい or プログラミングの楽しさを教えてくれるのがRuby
それと比較すると、Pythonのコードは、関数型プログラミングというものが
いかに高度で難解なものであるかという事をもったいぶってプログラマに押し付ける
もしもPythonしか知らないプログラマであれば、関数型 = 難解 という印象を持つだろう
階乗計算くらいだと単純すぎて、ナゼ重要なのかが分かりづらいと思うのでコードで示す
result_list = source_list.map { |elem|
x = foo(elem.x) # ここが局所宣言を書く部分
x + y # 最後に評価された式の値が、無名関数のリターン値になる
}
Rubyでは、map等に与える無名関数の中で局所的な環境(クロージャ)が作られるから、
x = foo(...) のような代入文がいくつでも(= 複雑な処理でも)書ける
このポイントは、実用的なプログラムを関数型風で書こうとした時に、威力を発揮する
余計分かりづらくなった
高卒ドカタなんだろうなぁと可哀想になる
集合の表記に似せてることが分かるから
355
>map/filterはfor/ifと同じだと言っているだけだから、難解という印象は持たない。
関数型プログラミングに慣れた、あるいは得意な人であれば、そういった印象なんだろね
Rubyの魅力はこれから関数型プログラミングを学ぼうとする初心者、 あるいはそんな初心者へ教える立場から見た、優しさ or 分かりやすさなんだ
[1,4,3,2].sort.reverse.map{|x| x.to_s}.join('-')
Pythonだと読みにくい。
'-'.join(map(str, reversed(sorted([1,4,3,2]))))
Pythonでは思考の流れと一致しないばかりか、「カッコだらけ」のコードになると.....
カッコだらけのコードを分かりやすくする基本的な方法は静的単一代入じゃないか
Rubyのやり方は基本ではなく玄人のやり方だろ
Pythonでは組み込みの型でメソッドチェインはやって欲しくないな
似たようなコレクションtuple,deque,array,queue等にも同じメソッドが必要になってくるし。
372
外部のライブラリでも列挙可能なものは、たいていEnumerableモジュールをimportしてますね
Rubyユーザーは列挙可能なものはmapやselectできて当然だろって思ってる気がします
Pythonは「何かを便利に書くためのしわ寄せ」をはっきり寄せてくる
得意と不得意を言語レベルではっきり主張するのでメリケン好みと言えなくもない
Rubyは全方位になんとなく八方美人なので、全体的になんとなく書きやすくてなんとなくキモくて遅い
「書きにくいってことはその処理に向いてないってことだから諦めろ」を地で行く
無名関数が文を使うほど複雑なら名前を付けるのが Python 流と想像。
これを読みづらいと感じるのは、左から右に流れる
もしかしてアラビア語ネイティブな人からすると逆に読みやすいのか?
When considering imagine consuming, getting easy methods to make use of the digital camera are probably the fundamental assignments on the establish. The examples below digital slr high-end camera lead provides basic fundamentals about options to partner with an individual's camera and as a consequence assist you greater establish the standard terminology mandatory.
Whereby Consumers Start out... A Security dslr camera
Even if there are a not difficult motor vehicle photo video camera intended to any ordinary snapshot taker planning to point and also return or simply warning buzzers together with whistle enhanced Digital slr, the most crucial starting point is to use what you consist of. If you have had for no reason undoubtedly,Panasonic HDC-TM900 Charge do not forget to evaluate any hands-on plus try out to achieve the just about all working experience you could as a result. A good number of manuals can verify all to consider about precisely how towards employ that video camera. Keep in mind, it should receive baffling you will be know simple digital camera words.
The most crucial several stipulations to consider together with taking photographs might be:
1. Shutter Full speed
step 2. Aperture
3. ISO
A good number of a handful of situations the many examine various things holdings and even debts high-end cameras which will understand cope with the simplest way and also variety of lighting is likely to be allow in the digicam to make sure you set-up scenes. Taking photographs is Panasonic VW-VBN260 Battery focused lumination in addition to minor innovations through soothing is commonly addressed feel gigantic has effects on on what this persona success considering.
Classified ads by just The search engines
Whatever aperture in our video camera is actually which usually "iris-like" product the opens and as well turns. The item appliances just how much light-weight is usually earn all around via the bit of throw away. The larger any sort of ditch, the greater light make it possible for round. This really is fantastic with F-Stops the moment f5. 6 is usually a considerable primary as opposed to f16 are sometimes small to medium sized primary. You need a much larger initially suitable for dark surrounds in addition to a less starting off suitable very dazzling illnesses.
Shutter Pace
In relation to aperture adjustments the figures on a fabulous throw away the fact that brightness switches into because of, almost any shutter accelerate apparatus just how long this approach light-weight is actually come up with interior. A nice shutter swiftness connected with 1/500 is going to make very low minor utilizing not like a lengthier shutter fee approximately 1/5 need after only supplemental moderate. It's fantastic with secs. You need to work with painless shutter facts convert gears designed for circumstances by means of many moderate aside from systematic shutter rates of speed when particularly full experiences.
Any sort of ISO adjustments a fabulous tenderness of the "film". Intended for camcorders, whereas it doesn't management picture presently, everything adjustments a fabulous tenderness with the high-end camera sensor. A greater ISO options can certainly help produce styles photograph become faster and as well demand even less smooth compared to a decreased ISO. Strangling part of managing great ISO is probably of the fact that enhanced ISO's ordinarily result in a detraction at the time of envision first-class high quality as well as almond.
At the moment knowing the exact a couple of valuable symbol photo digital portrait photography useful tips future move is usually to see how a large amount of several associated with routine aside throughout both as well as the option to select the right configuration settings for each solo! A bunch of security surveillance cameras own methods the moment anyone software one of these simple together with security surveillance camera might easily consider useful configuration settings with the sleeping. A couple selections usually are shutter priority along with Panasonic VW-VBK180 Battery aperture the main ageda once approximately just about every individual individuals manage probably lots of the shutter accelerate or even this particular aperture.
The final fundamental digital slr high-end camera efficiency content is usually intent. A bunch of security surveillance cameras own automotive intend that's characteristically poor along with translates to fluffy photos often. The most effective will be to realize how to work together with intelligent emphasizing in addition to using the services of main aim metering that will help methodically tutorial put focus.
Digital cameras are made in a wide range of sizes, prices and capabilities. The majority are camera phones, operated as a mobile application through the cellphone menu. Professional photographers and many amateurs use larger, more expensive digital single-lens reflex cameras (DSLR) for their greater versatility. Between these extremes lie digital compact cameras and bridge digital cameras that "bridge" the gap between amateur and professional cameras. Specialized cameras including multispectral imaging equipment and astrographs continue to serve the scientific, military, medical and other special purposes for which digital photography was invented.
Subcompact with lens assembly retracted
Compact cameras are designed to be tiny and portable and are particularly suitable for casual and "snapshot" uses. Hence, they are also called point-and-shoot cameras. The smallest, generally less than 20 mm thick, are described as subcompacts or "ultra-compacts" and some are nearly credit card size.[2]
Most, apart from ruggedized or water-resistant models, incorporate a retractable lens assembly allowing a thin camera to have a moderately long focal length and thus fully exploit an image sensor larger than that on a camera phone, and a mechanized lens cap to cover the lens when retracted. The retracted and capped lens is protected from keys, coins and other hard objects, thus making it a thin, pocketable package. Subcompacts commonly have one lug and a short wrist strap which aids extraction from a pocket, while thicker compacts may have two lugs for attaching a neck strap.
Compact cameras are usually designed to be easy to use, sacrificing advanced features and picture quality for compactness and simplicity; images can usually only be stored using lossy compression (JPEG). Most have a built-in flash usually of low power, sufficient for nearby subjects. Live preview is almost always used to frame the photo. Most have limited motion picture capability. Compacts often have macro capability and zoom lenses but the zoom range is usually less than for bridge and DSLR cameras. Generally a contrast-detect autofocus system, using the image data from the live preview feed of the main imager, focuses the lens.
Typically, these cameras incorporate a nearly silent leaf shutter into their lenses.
For lower cost and smaller size, these cameras typically use image sensors with a diagonal of approximately 6 mm, corresponding to a crop factor around 6. This gives them weaker low-light performance, greater depth of field, generally closer focusing ability, and smaller components than cameras using larger sensors.
Starting in 2011, some compact digital cameras can take 3D still photos. These 3D compact stereo cameras can capture 3D panoramic photos for play back on a 3D TV.[3] Some of these are rugged and waterproof, and some have GPS, compass, barometer and altimeter. [4]
Main article: Bridge camera
Bridge are higher-end digital cameras that physically and ergonomically resemble DSLRs and share with them some advanced features, but share with compacts the use of a fixed lens and a small sensor. Like compacts, most use live preview to frame the image. Their autofocus uses the same contrast-detect mechanism, but many bridge cameras have a manual focus mode, in some cases using a separate focus ring, for greater control. They originally "bridged" the gap between affordable point-and-shoot cameras and the then unaffordable earlier digital SLRs.
Due to the combination of big physical size but a small sensor, many of these cameras have very highly specified lenses with large zoom range and fast aperture, partially compensating for the inability to change lenses. On some, the lens qualifies as superzoom. To compensate for the lesser sensitivity of their small sensors, these cameras almost always include an image stabilization system to enable longer handheld exposures.
These cameras are sometimes marketed as and confused with digital SLR cameras since the appearance is similar. Bridge cameras lack the reflex viewing system of DSLRs, are usually fitted with fixed (non-interchangeable) lenses (although some have a lens thread to attach accessory wide-angle or telephoto converters), and can usually take movies with sound. The scene is composed by viewing either the liquid crystal display or the electronic viewfinder (EVF). Most have a longer shutter lag than a true dSLR, but they are capable of good image quality (with sufficient light) while being more compact and lighter than DSLRs. High-end models of this type have comparable resolutions to low and mid-range DSLRs. Many of these cameras can store images in a Raw image format, or processed and JPEG compressed, or both. The majority have a built-in flash similar to those found in DSLRs.
In bright sun, the quality difference between a good compact camera and a digital SLR is minimal but bridgecams are more portable, cost less and have a similar zoom ability to dSLR. Thus a Bridge camera may better suit outdoor daytime activities, except when seeking professional-quality photos.[5]
In low light conditions and/or at ISO equivalents above 800, most bridge cameras (or megazooms) lack in image quality when compared to even entry level DSLRs. However, they do have one major advantage: their much larger depth of field due to the small sensor as compared to a DSLR, allowing larger apertures with shorter exposure times.
A 3D Photo Mode was introduced in 2011, whereby the camera automatically takes a second image from a slightly different perspective and provides a standard .MPO file for stereo display. [6]
[edit]Mirrorless interchangeable-lens camera
Main article: Mirrorless interchangeable-lens camera
In late 2008, a new type of camera emerged, combining the larger sensors and interchangeable lenses of DSLRs with the live-preview viewing system of compact cameras, either through an electronic viewfinder or on the rear LCD. These are simpler and more compact than DSLRs due to the removal of the mirror box, and typically emulate the handling and ergonomics of either DSLRs or compacts. The system is used by Micro Four Thirds, borrowing components from the Four Thirds DSLR system.
[edit]Digital single lens reflex cameras
Cutaway of an Olympus E-30 DSLR
Main article: Digital single-lens reflex camera
Digital single-lens reflex cameras (DSLRs) are digital cameras based on film single-lens reflex cameras (SLRs). They take their name from their unique viewing system, in which a mirror reflects light from the lens through a separate optical viewfinder. At the moment of exposure the mirror flips out of the way, making a distinctive "clack" sound and allowing light to fall on the imager.
Since no light reaches the imager during framing, autofocus is accomplished using specialized sensors in the mirror box itself. Most 21st century DSLRs also have a "live view" mode that emulates the live preview system of compact cameras, when selected.
These cameras have much larger sensors than the other types, typically 18 mm to 36 mm on the diagonal (crop factor 2, 1.6, or 1). This gives them superior low-light performance, less depth of field at a given aperture, and a larger size.
They make use of interchangeable lenses; each major DSLR manufacturer also sells a line of lenses specifically intended to be used on their cameras. This allows the user to select a lens designed for the application at hand: wide-angle, telephoto, low-light, etc. So each lens does not require its own shutter, DSLRs use a focal-plane shutter in front of the imager, behind the mirror.
Main article: Rangefinder camera#Digital rangefinder
A rangefinder is a user-operated optical mechanism to measure subject distance once widely used on film cameras. Most digital cameras measure subject distance automatically using electro-optical techniques, but it is not customary to say that they have a rangefinder.
[edit]Line-scan camera systems
A line-scan camera is a camera device containing a line-scan image sensor chip, and a focusing mechanism. These cameras are almost solely used in industrial settings to capture an image of a constant stream of moving material. Unlike video cameras, line-scan cameras use a single row of pixel sensors, instead of a matrix of them. Data coming from the line-scan camera has a frequency, where the camera scans a line, waits, and repeats. The data coming from the line-scan camera is commonly processed by a computer, to collect the one-dimensional line data and to create a two-dimensional image. The collected two-dimensional image data is then processed by image-processing methods for industrial purposes.
Further information: Rotating line camera
Many devices include digital cameras built into or integrated into them. For example, mobile phones often include digital cameras; those that do are known as camera phones. Other small electronic devices (especially those used for communication) such as PDAs, laptops and BlackBerry devices often contain an integral digital camera, and most 21st century camcorders can also make still pictures.
Due to the limited storage capacity and general emphasis on convenience rather than image quality, almost all these integrated or converged devices store images in the lossy but compact JPEG file format.
Mobile phones incorporating digital cameras were introduced in Japan in 2001 by J-Phone. In 2003 camera phones outsold stand-alone digital cameras, and in 2006 they outsold all film-based cameras and digital cameras combined. These camera phones reached a billion devices sold in only five years, and by 2007 more than half of the installed base of all mobile phones were camera phones. Sales of separate cameras peaked in 2008. [7]
Integrated cameras tend to be at the very lowest end of the scale of digital cameras in technical specifications, such as resolution, optical quality, and ability to use accessories. With rapid development, however, the gap between mainstream compact digital cameras and camera phones is closing, and high-end camera phones are competitive with low-end stand-alone digital cameras of the same generation.
A Canon WP-1 waterproof 35 mm film camera
Waterproof digital cameras are digital cameras that can make pictures underwater. Waterproof housings have long been made but they cost almost as the cameras. Many waterproof digital cameras are shockproof and resistant to low temperatures; one of them is Canon PowerShot D10, one of the first underwater digital cameras.
These cameras become very popular during the holiday season, because many people want to save the best moments from their holidays at the seaside. Waterproof watches and mobile phones were produced earlier. Most makers of digital cameras also produce waterproof ones and every year they launch at least one new model, for example Sony, Olympus, Canon, Fuji.
Healthways Mako Shark, an early waterproof camera,[8] was launched in 1958 and cost around 25 dollars. It was a huge camera and pictures were black and white.
___________________________
http://www.gobatteryonline.com/canon-nb-9l-digital-camera-battery-gose.html
http://www.gobatteryonline.com/canon-lp-e5-digital-camera-battery-gose.html
http://www.gobatteryonline.com/canon-powershot-sd500-battery-charger-gose.html
ソーシャルゲームはイノベーション。だがイノベーションは、すべてのユーザーが接続された単一のサーバーを使う、マルチプラットフォーム、マイクロトランザクション、コレクション中心のゲーム性、ゲームマネーとリアルマネーの最小限の垣根、スマートな課金システム、ゆるやかなコミュニケーションではない。ソーシャルゲームのコア技術。だがゲームや伝統的なオンラインゲームやウェブサービスなどが実現済み。だが人類史上ソーシャルゲームだけが実現した特徴。人間とボットが混在してもボットの存在が気がつかれない革新的な環境。ボットが人間に擬態して人間とゲームをプレイしてゲームを盛り上げるSF近似の環境が実現。ソーシャルゲームではユーザー同士の人間的なコミュニケーションを極限まで減少することでこれを可能に。革新的なことにもかかわらず不思議に語られない。すごく残念に思う。私が語ろう。
#
ボットは、パソコン MMO では周知の事実で違法がはびこっている。これから話すことは少し違う。ソーシャルゲームのボットは、ゲームメーカー自身によって開発された。ボットは、普通のユーザーには区別がつかない。仲間やあなたの競争相手のいくつかはボットと考えるのは簡単。多くの人が疑問に思う。人間とボットの区別がつかないはずがない。セカンドライフとパソコンのMMOのような環境でボットが人間のフリをするのは大変困難。MMOはすべてのプレーヤーの動きをリアルタイムに見ることができる。すべてのプレイヤーがどのように動作するかを誰もが見ることができる環境では、特異な行動パターンは際立って目立つ。ほぼ同じアクションが繰り返されるならすぐにボットとわかる。ありえない動作もすぐにわかる(超高速移動、不可能なタイミングの攻撃を続ける、など)。MMOのボットのためのチートツールは不自然ではない動きの再現に苦労。NPCキャラの移動は不自然。同じ場所しか歩かない。不自然に遠回り。隙間に入って抜け出れなくなるなど。人間の操作する自然な移動は非常に困難な技術。ボットが人間とパーティを組んで行動するのは不可能。ボットは会話できない。MMOはキーボードと共にある。ゲームのチャット機能も充実。チャットをするのは当たり前。完全な無言のユーザーは不自然な存在。協調行動は全く取れない。すぐにボットが露見するであろう。
#
対照的にソーシャルゲームでは人間とボットを区別する機能が軽視。あるいは未実装。他のプレイヤーの行動は目立たない。気がつかない。他のプレイヤーにあまり興味を持たないことでボットことに気がつかない環境。他のユーザーが何をしているのか分からない。ユーザーの仲間は行動記録を閲覧できる。ユーザーと対戦したユーザーとの試合結果は見ることができる。それは非常に断片的。ボスを倒した、ダンジョンをクリアした、などの結果しかわからない。他のユーザーのプレイの状態を把握することはできない。ソーシャルゲームでは装備の着替えを繰り返しているユーザーがいても誰も気がつかない。MMOで装備の着替えを繰り返しているユーザーがいたらすごく目立つ。ソーシャルゲームでは異常な行動パターンをとっていても問題にならない。目立たない。ボットにとても都合が良い。ソーシャルゲームでは移動に必要もない。移動はリンクのクリックだけ。人間らしい移動アルゴリズムは不要。ソーシャルゲームでは会話がとても軽視。他ユーザーへのコメントや掲示板がある。しかしあまり活用されない。ゲームに協力する戦略性が必要が薄いため。またキーボードが使えない。ずっと無言のユーザーも珍しくない。会話がとても少ない。ボットの理想的環境。ソーシャルゲームは最低限のコミュニケーションで成り立つことに最適化。それは同時にボットが人間に擬態することにも最適化。結果的にボットが人間に擬態できる環境が生まれている。結論。リンクをランダムクリックするだけでもボットが完成。それは不自然なゲームプレイが予想される。だが他ユーザーは気がつかないであろう。
#
ボットを活用しているのは違法ユーザーではない。ゲームの開発会社が用意している。運営している。言い換えればハック不要。無制限にデータベースへのアクセスが可能。実際にゲームを操作する必要ない。データベースに記録を行えば良い。SQLだけでボットを作ることが出来る。例えば、"ナンバーワンのユーザーの敗北を増やす"SQLの次の2行で実現することができます。余談。MySQLのサブクエリ限界は非常に気に入らない。「SELECT userid FROM usertable ORDER BY gold DESC LIMIT 1;UPDATE usertable SET lose=lose+1 WHERE userid=xxxxxx;」これは不十分。たかだか敗北数を増やすだけ。正しくは対戦相手と対戦ログもゲームルールに合わせた形で記録。データベースに勝敗結果を記録するプログラムが必要。これはゲームのプログラムに元々存在している。流用するだけで良い。PerlやPHPで実装されているだろう。対戦結果の偽装は簡単。
#
ソーシャルゲームはSNSプロフィールページと連動。ユーザーの顔画像クリックでプロフィールページに遷移。プロフィールページの偽装が必要。プラットフォーマーは己のSNSのデータベースへのアクセスが可能。ランダム名前で自動大量生成することは容易。ボットのプロフィールページを用意することは容易。ボットユーザーは、日記を書くことなく、まったくの無言で、熱心にゲームをプレイ。そのような特徴は正規ユーザーにも珍しくなく違和感はない。参入メーカーはSNSプロフィールページを大量に作成できない。正規プロフィールページを使い回す。その場合には、ゲーム上のH氏とG氏ののSNSのプロフィールが互いにV氏で同じ人に。これは異常。しかしユーザーは他ユーザーのプロフィールの対応を全てチェックしたりしない。発見される確率はとても低い。
#
閲覧者はボット開発の容易さには納得したと信じる。まだボットの必要性と活用には納得していない。これからの話しで納得できる。
伝統的ゲームは開発者の感覚を基準にゲームバランスを決定(マーケティングの無視を意味しない)。ソーシャルゲームはユーザーアクティビティに基づいて、科学的な分析でゲームバランスへのアプローチを決定。これはユーザーアクティビティのサーバーログが蓄積されるために可能。ユーザーアクティビティの分析結果がゲームバランスに反映。例。チュートリアルの進行状況50%で停止しているユーザーが多数いるという分析結果。その箇所のチュートリアルは高い障害ことが想定される。対策。その箇所を平易に修正。その箇所を短縮。その箇所を除去、など。結果、チュートリアルの進行状況50%で停止するユーザーは激減。課金でも分析は重要。課金アイテムのバナー画像を表示する例。ランダム分割したグループAユーザとグループBユーザに別々のバナー画像を見せる。しばらく続け、結果的により課金が多いグループのバナー画像がより最適。繰り返すことでより効率的なバナー画像が完成。
#
ゲームパラメータは簡単にデータを調整できる。しかしこれは不十分。人間同士のプレイの分析に適応できない。例。「開始直後に他のユーザーと対戦し3連敗したユーザーの70%はそれ以上プレイを続けない」という分析結果があると仮定。これはゲームパラメータでは解決できない問題。開始直後のユーザーは誰もが同じ強さ。ゲーム内で最弱。パラメータの調整とは別問題。解決策はボットの利用。開始直後のユーザーより弱いボットを用意。開始直後のユーザーはボットに優先的にマッチング。ボットの内部パラメータは開始直後ユーザー以下だかユーザーにはユーザーと同程度のパラメータに見せる。ユーザーは確実に勝利できるので3連敗してゲームを辞めてしまう可能性は激減。またユーザーは自分と同程度のパラメータの相手に勝利したと信じている。プレイを継続するモチベーションに繋がる。ソーシャルゲームプレイ中の人は確認推奨。理論上ユーザー全体の対戦での勝利数と敗北数は一致。上位のユーザーは勝利数のほうが多く下位のユーザーは敗北数が多い。コアユーザーでないのなら敗北数が多いのが正しい。もしもあなたが下位ユーザーにもかかわらず勝利数のほうが多いのであればあなたはボットに感謝する必要がある。逆の例:ロンチ直後のランキング上位にはボットを置く。それがないと初期ユーザーはすぐ上位到達。同ボットはゲーム人口が大幅に増加したら不要になることがおおい。
#
課金でも分析結果にボットを適用するのは重要。例。「課金未経験でしばらく連勝を続け宝物のコンプリートまであとわずかのユーザーに突然強力な一人のユーザーが連日攻撃し続け宝物を奪いにきたときユーザーは課金アイテムを購入して防衛する可能性が高い」という分析結果があると仮定。ユーザー心理は、今をしのげば他ユーザーには連勝を続けられると考える。今だけでもと課金を行う。これを再現するボットの開発は容易。データベースを検索して課金未経験でしばらく連勝を続け宝物のコンプリートまであとわずかのユーザーを発見。そのユーザーと対戦可能で勝利できるパラメータのボットを検索。ボットは前もって様々なパラメータで大量に用意しておくのは当たり前。発見したボットでユーザーと対戦し対戦結果をボットの勝利でデータベースに書きこむ。これでユーザーが課金する確率が飛躍的に高まる。課金未経験ユーザーに課金を経験させることは実に重要。一度同様のボットプログラムを開発したら後は全自動で継続的に動作するのは当たり前。分析とボットの組み合わせアプローチ。日本ソーシャルゲームの驚異的課金率の施策の1つ。
#
このようなパターンはユーザーアクティビティを分析することで無限に発見することが可能。ゲームの盛り上げと収益の最大化に大きく貢献。あと1つ例を。課金未経験ゆったりプレイユーザーにボットが仲間申請。ボットはゲームを情熱的にプレイ。課金も積極活用。仲間ゆったりユーザーにボットのプレイ結果がどんどん伝わる。多くのソーシャルゲームでは仲間のプレイ状況は断片的にユーザーに知らされる。中のプレイ状況は大きな刺激。仲間に影響されてよりプレイが活発に。「ユーザーのプレイ頻度は一番プレイが頻繁な仲間のプレイに近づいていく」分析結果への対応。地味であり効果は直接でないが確実にある。ボット数の効率化の観点から、1つのボットで100人以上のユーザーと仲間になるのが望ましい。ゲーム内の仲間人数制限をボットに限り解除。ユーザーがボットのプロフィールを見たときにボットことが露見すると冷めてしまう。表向きは仲間人数制限を解除していることが露見しないように。
#
伝統的なRPGゲームではユーザーの進捗状況に応じて十分な強度の仲間と敵を提供します。これとソーシャルゲームのボットは近似している。ユーザーモチベーションを上げるのが目的のは同じ。RPGのモンスターと敵はユーザーもコンピュータのAIの操作ことを知っている。それでも十分楽しいが。しかしそれが人間ならもっと楽しい。そこでMMO。しかし人間は己もプレイヤー。ユーザーに合わせて適度なパラメーターで楽しさを演出などしない。そこで人間に擬態したボット。ユーザーに合わせてゲームを盛り上げる。ユーザーは人間だと信じているのでモチベーションも最高に。あらゆるゲームの問題点が完璧に解決されている。ボットの役目はユーザーの退屈に刺激を与えること。ゲームがボットだらけ必要はない。賢いボット利用を。このようなボット効果はソーシャルゲームのユーザー間のバランスを調整しモチベーションを維持するために非常に大きいです。ボットはほとんど話題にされない。技術情報に積極的な企業もボットは不思議と話題にしない。結果。ソーシャルゲーム開発会社も知らないところが多い。ボットを利用するソーシャルゲームはむしろ少数派。ゲームパラメータ調整だけでは限界がある。ユーザーアクティビティのログ解析はハイレベルだが本当に重要です。ログの分析に基づいてボットが適切なアクションを残すことでユーザーを興奮させるのでゲームに活用してください。また歴史の人間とコンピュータの黎明期以来、初めてボットと人間の見分けがつかない世界の技術革新を達成したことに多くの技術系ユーザーは興味を抱くであろう。ソーシャルゲーム会社は技術者を積極採用中。その一端はより優れたボット開発。興味があるなら是非応募を。ソーシャルゲームの一層の発展を願う。
#
HTMLはわかるけど、サーバーサイドはお遊びでphpを触ったぐらいだったので、会員制でデータをためこむサイト作りに初めて挑戦した。
今回重視したのは、「いかに個人情報をお漏らししないようにして、万が一漏らしても被害を少なくするか」ということ。
世の中、有償サービスでもパスワードを平文で保存してるサービスが意外と多いらしいので、流出した時のリスクを少しでも減らせる対策として書きます。
サーバー:ロケットネットのキャンペーンにでレンタルサーバ年1000円ポッキリプラン クライアント側の処理:HTML+CSS+jQuery(とプラグインもろもろ) サーバ側の処理:PHP Webサーバー:Apache データベース:MySQL
俺も巻き込まれたところでは、サミータウンがメールアドレスとパスワードセットでお漏らししてお詫びに1ヶ月無料なにそれこわい。
サミータウンだけならまだいいけど、メアドとパスワードを他のサービスで共通化して使ってる情弱なので、
共通化してメアドとパスワードをどこかのサービスが一箇所でも漏らすと、ヤフオクID乗っ取り事件みたいなことになる。
http://internet.watch.impress.co.jp/cda/news/2008/09/26/20967.html
俺だってできれば人様のメールアドレスとパスワードとか預かりたくない。
万が一、肉親のメールドレスを発見してパスワードにrapemeとか入ってたら明日からどういう顔すればいいかわからない。
ググってみてもどこにも情報のってない。うーん困った。ダメもとで「個人情報ってどうやって保存したらいいんだろう。。。」
って、twitterでつぶやいたら、「住所とかは可逆暗号化でいいけど、パスワードはハッシュで不可逆化しないとだめだよ!」
「住所とかは可逆暗号化でいいけど、パスワードはハッシュで不可逆化しないとだめだよ!」
何のことかわからなったので、調べてみると、
・ハッシュ=ハッシュ値を使った、元のデータに戻せない暗号化方式
うーん。。。よくわからん。。。
電話番号とか住所は、第三者が使用する情報なので、可逆が必要。パスワードは、認証にしか使わないので、
ハッシュ値の結果が一致すれば元のデータがわからなくてもOK、という方式なのでこういった暗号の使い分けをする。
●可逆暗号のイメージ(もとにもどせる) 暗号化キーは開発者が指定する。 090-xxxx-xxxx →(暗号化)→ !'&amp;%($% →(復号化)→ 090-xxxx-xxxx ●ハッシュのイメージ(もとにもどせない) 登録password(DBに保存)→(ハッシュ値抽出)→!"$#'$#=" ログインpassword →(ハッシュ値抽出)→!"$#'$#=" ※二つのハッシュ値が合っていれば、パスワード一致として認証する。
今回はMySQLの関数で実現した。encode関数で暗号化して、decode関数でもとに戻す。
例えばtel_noという項目だけあるテーブルがあるとすると、
//データベースに保存する時 insert into テーブル名 (tel_no) values (encode(tel_no,'暗号化キー')); //データベースから取得する時 select decode(tel_no,'暗号化キー') from テーブル名;
これで、データベース格納時は暗号化(バイナリ化)されて、データベースから取り出してHTML表示する時に復号化はされる。
<ユーザ登録時>
$password=(フォームから取得) $hash=hash('sha512',$password) //ユーザ登録時は、ここで生成した$hashをデータベースにぶっこむ。
ユーザ認証時は、入力されたパスワードと、データベースのパスワードが一致するかチェック。
//フォームから入力されたパスワード $input_password=(フォームから取得) $input_hash=hash('sha512',$input_password); //MySQLに保存されたパスワードを取得(略) $db_hash==(データベースから取得) //判定 if($input_hash==$db_hash) echo 'ログインしますよ!'; //ここにログイン処理を書く else die('メアドとパスワードがあってないよ!');
これでもしSQLインジェクションとかでデータが流出しても、ハッシュ暗号のパスワードに関してはまず解析されないはず。。。
可逆暗号のデータもphp側の暗号化キーが盗まれない限りバレない。。。はず。。。
何でもかんでも暗号化するとコードが煩雑になるし、パフォーマンスにも影響でそうなので、
住所データの都道府県とか、漏れても良いような情報は暗号化しませんでした!!
個人情報保護法 2条による定義 「個人情報」とは、生存する個人に関する情報であって、当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの(他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを含む。)をいう。
これで、もし漏れても、俺、ウンコ漏らして臭いけど、パンツから出てないからいいよね?というレベルにはなった。はず。
万が一漏れても大丈夫!と書いたけど、そもそも漏らすなというお話になる。色々調べた結果、以下の対策をほどこした。
・当初jQuery側でSQL組み立ててPHPに渡してたので、これだと任意のSQLが実行できて漏らし放題なのでやめる。
・GETとかPOSTでDBに渡すパラメータを扱ってる場合、ちゃんとエスケープする。
例えばログイン認証するPHPで、GETメソッドでフォームからデータを取得するような場合、
$id=$_GET['id'] $pwd=$_GET['pwd'] $sql="select * from ユーザーテーブル where uid='$id' and pwd='$pwd'
とかやってると、login.php?id=admin'&pwd=' OR '1'='1とかパラメータを渡されるとあら不思議!
select *from ユーザテーブル where uid='root' and pwd='' or 1=1
で、誰でもログイン出来ちゃう!ので、mysql_real_escape_stringでエスケープしたり、渡されたパラメータが想定した値かどうか(例えば数値かどうか、とか)のチェックをいれたりする。
・保存するデータにタグやJavascriptを埋め込まれないように、保存されたデータを出力する場合はPHP側でhtmlspecialchars関数使ってエスケープするようにする。
こんな感じでお漏らし対策をした。間違いがあったら教えて欲しい。
ちなみに出来上がったサイトはこれ。
「プログラマー」と名乗っている人をあんまり信用しないほうがいいというのはよく言われる話だが、最近そのことを痛感している。今やってる仕事の一環として、「ほかのプログラマーにプログラムを書いてもらって、それをレビューする」という作業があるのだが、この「ほかのプログラマーが書いたプログラム」というのがひどい。クズみたいなプログラムばっかりだ。
ってな、黒夢の『C.Y.HEAD』という曲の歌い出しですけど、最近この部分がぐるぐるぐるぐると頭を回るものだよ。
ええ、わかってますよ。仕事相手の悪口を公的な場で言うなんて、問題があるって言うんでしょう。まあ、それもそうなんだけど、たいしたプログラムも書けないくせにプログラマー名乗ってる奴らに本当に腹が立つからせいぜい堂々と書きますよ。
「忙しくってコードの質が下がってる」っていうような事情もあるでしょうが、まともに納品が出来ないなら仕事なら受けるべきでないわけだし、ビジネスの世界は「結果責任」を負うものですから、「事情」なんてのは知ったこっちゃないね!
……っていうふうにね、「仕事」というのは基本的に「事情」を無視するものなんですね。だから基本的にはあんまり僕は「仕事」が好きじゃない。とはいえ、今いっしょに働いている人たちはかなり「事情」というものを意識していて、おかげでそれほど辛くはないんだけれども。ただ「ほかのプログラマー」みたいな、外部の人たちは、事情を共有することができないので、「あー! クズみたいなコード送ってきやがって!」ということにしかならない。「事情」を共有できるような、近しい距離の人たちとのみ、仕事をしていたいものですよ。
で、そのコードがどういうふうにダメなのかというと、主に2つの側面がある。
【1】文法が正しくない、プログラムが読みづらい
【1】はもう、そのまんま。文法がおかしいとか、同じ様な処理をコピペで5回かいてるとか、1メソッドが長すぎる上に変数が"hoge"とかでわかりにくく、意味を取るのに困難があるとか。「こんなプログラムに金を払わなければならないのか……」と思うとめまいがする。何せ、それを「まともなプログラム」にレビューするのは僕なのだ。で、その作業に対してお金は一銭も入ってこないのだ。
不具合・先祖返りなんかは誰にでもあるミスだし、それを点検するために僕がチェックしているわけなので、そのあたりはいい。しかし文法の狂っているプログラムを修正するというのは、時には全体を書き換えなくてはならなくて、非常に労力である。それに、受け取ったコードは「ほかのプログラマー」さんの「成果物」であるので、あまり手を加えすぎるわけにもいかない。それが「仕様書」をもとにしたコードの場合、あまり修正するとクライアントに「自分はこんなこと言っていない」と思われてしまう可能性もある。だいいち、こんな作業にあんまり時間をかけたら、ほかのもっと大切な作業をする時間がなくなってしまうのだ。こういった様々な事情を考え合わせ、うまいことバランス取りながら、修正の妥協点を探していくわけだが、これはとてつもない頭脳労働である。疲れる。
【2】は例えば、「バリデートチェック」のためのコードなのに、「intは2バイト」ということばっかり書いて来るとか。「intは2バイトはわかったけど、いつからバリデートチェックになるのだろう」と思って読み進めても、最後までintは2バイトしかチェックしていない。依頼主であるからSIerは、そんなプログラムに金を払いたがるだろうか?
もっと具体的な例。ゲーム会社が、「我が社のキャラクタ版権を利用して、凄く売れるSNSゲームを作ってくれ」と依頼してきたとする。プログラマーが打ち合わせに行くと、企画者は「動的フラッシュも使って、100万ユーザーが遊べる。。。」という話を延々とする。プログラマーは「了解しました」と言って安請負する。そのプログラムはメイン処理だけで1000行というもので、memcachedの「mem」の字もないし、「オブジェクト指向」といった概念も勿論ない。これでは仮にSNSゲームがリリースされたとしても、100人さえも遊べない。
このくらいならマシなほうで、ひどいのになるとフリーランス会社から紹介されたプログラマーで、「SQLはselect文くらいしかやった事がない」とか平気で送りこんでくる。たった一人で。
また、意味のないコメントも多い。ループ処理に、「イントのiに3を代入する」と書いて、何の意味があるのだ? せめて「処理速度改善の為にIntegerは使わずにプリミティブのintを使う!」というふうに書くのが本来だと思う、まぁ嘘なんだけど。だって、そんなコメントみて、「なるほど」って誰が思いますかね?
コメントには必ず「目的」というものがあって、次にソースを読む人は処理の概要を知りたいのだから、「プログラム」をそのまんまコメントにしてもダメなんですよ。そういう単純で、最も重要なことが意識できないで、どうして堂々と「プログラマー」なんて名乗れるのか知らん、と思うぜ。
一番、腹が立つのは「偽SE」ですね。「プログラムはだれでもできるでしょ、重要なのは業務知識でしょ!」みたいなのが偽SE。こういうのを本当に思っているのがいる。業務の画面遷移さえ理解してないSEがだよ。
上の例はさすがに大げさでも、「僕は、プログラムが好きでソフト開発者になりました」とか言ってまともにプログラムが書けない奴は、頻繁にいる。自分でサーバ建てろよ。自分で簡単なサービスつくる事もできないなら、向いてないから辞めてしまえ。
「オレはサーバエンジニアじゃないからコマンド打てない」みたいなね。
世も末だ!
ここに挙げたのは「最低限」のことで、「より読みやすく」「より自然に」「より美しく」というところを、自分の能力の限界まで突き詰めてこそ、プロってもんじゃないんかね。もちろん時間や諸々の事情と相談してのこととはいえ、「26歳の若造が吐き気を催すような拙いプログラム」を送ってくる、30代40代のプロプログラマーってのはいかがなもんでしょう?
身の程を知れというか。
なんでプログラム書けない人がプログラマーなんかやってんだろ?
んで、なんでそういう人に「仕事」があるんだろうか?
身の程を知れよ。
自分の欲望ばっかり考えやがってね。
ストアードプロシージャでビジネスロジックを実装するメリットを認めつつも、以下の点からビジネスロジックをクライアント言語で実装できる場合はできるだけそうした方が良いという結論に達した。
RDBMSによっては無料あるいは有料でソースレベルデバッガを使用できる場合もあるが、通常はクライアント言語のデバッグ機能を使う方がはるかに便利だ。何か問題があったときに、どこが問題なのかを見つけることがクライアント言語で記述した場合よりもはるかに時間がかかる。
また、Unit Testing Framework(xUnit)も使用できない場合がほとんどだ。
ストアードプロシージャ用の静的解析ツールの存在を知らない。巡回的複雑度を知りようにも知るすべはないのだ。それが行えるツールを知らないだけかもしれないが。
仮にストアードプロシージャの変更を全てAlter xx等で構成されたSQLスクリプトファイルで管理し、それをバージョン管理システムに含めたとしても(というか、最低そうすべきなんだが)、あるリビジョンのコード一式に対応するデータベーススキーマを取り出すのは難しいか面倒だ。
トリガーでビジネスロジックを実装する場合も、上記問題点が全てあてはまる。
さらにトリガーの場合は、どのような場合にどのような処理が実行されるのかを俯瞰することが難しくなるという問題もある。
一つは、Oracleで言うところのストアードファンクション、つまりSELECT等のDML内で使用する関数で、そうした方がパフォーマンス的にも良い場合。
例えばworldcupというタグがついているブックマーク全てにsoccerというタグを加えたいとする。
Setting→Rename tagsからOld tag(変更対象のタグ)にworldcupを選択しNew Tag(変更後のタグ)にworldcup soccerと入力してリネームする。
スペースが入っていると別々のタグとして認識するのでworldcupタグが付いているブックマークにsoccerタグが追加されるわけだ。
同様にして2つ以上のタグも追加できる。
worldcupとSouthAfricaの両方のタグが付いているブックマークにtravelというタグを加えたいとする。
タグリネームを使うやり方はリネームする前のタグを1つしか選択できないため使えない。
どうするかというとまずworldcupとSouthAfricaタグ両方が付いているブックマークを表示する。
そして右上のBulk Editをクリック。Bulk Editとは表示されているブックマークをまとめて編集できる便利機能だ。
Select Allで全てのブックマークにチェックを入れた後Add Tagでtravelタグを追加できる。
ただしここで注意したいのがBulk Editは1ページに表示される分だけのブックマークにしか適用されないこと。
Display Optionで100件表示しておけば100件を1回で編集できるため楽になるはずだ。
変更したいブックマークが1000件ある場合は10回同じ作業を繰り返さないといけないがそんなに頻繁に行う作業ではないため我慢して欲しい。
【普天間】 岡田外相 「腹案?…米側に伝えた『閣僚で検討してきた案』だと思う。他は考えにくい。現行案も含めあらゆる可能性ある」
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1270079331/
50 名前:名無しさん@十周年[sage] 投稿日:2010/04/01(木) 09:08:00 ID:po8KFk0i0
腹案についてコメントまとめ
ぽぽ山首相
「現行案を超える腹案がある。閣僚とも共有している。」
>「平野博文官房長官を中心に閣僚間で検討してきた考え方の
>ことだと思う。ほかには考えにくい」
ttp://sankei.jp.msn.com/politics/policy/100401/plc1004010829006-n1.htm
↓
↓
>首相の「腹案」については真意を測りかねているようで、「決定かどうか分からない。
>首相としては腹に持っておるということだ」と述べるにとどめた。
ttp://mainichi.jp/select/seiji/news/20100401ddm001010036000c.html
首相以外
誰も腹案なんて知らないのは明白じゃねえかwwwww
ttp://nihon9999.blog77.fc2.com/blog-entry-4607.html
【沖縄密約】岡田外相「(西山氏について)大変有能だったにもかかわらず、この世界から追われる形になり、お気の毒だと思う」
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1268394036/
1 名前: ◆PENGUINqqM @お元気で!φ ★[] 投稿日:2010/03/12(金) 20:40:36 ID:???0
岡田克也外相は12日の記者会見で、沖縄返還時の原状回復補償費の日本側肩代わり密約を報道した西山太吉・元毎日新聞記者について、
「個人的には、大変有能だったにもかかわらず、この世界から追われる形になり、お気の毒だと思うし、惜しいと思う。外務省がどうかかわっていくべきなのかについて、少し頭の整理がいると思う」と述べた。
外務省と有識者委員会は9日、日米間の四つの密約について調査結果を公表。
調査結果は西山氏の記事を追認する形となった。
▽毎日新聞
ttp://mainichi.jp/select/seiji/news/20100313k0000m010030000c.html
▽関連スレッド
【沖縄密約】元毎日新聞記者・西山氏「西山だけが罪に問われるのは不公正だと、『天』が真相究明の機会を与えてくれた」[10/03/09]
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1268146538/
依頼がありました
ttp://tsushima.2ch.net/test/read.cgi/newsplus/1268385846/18
2 名前:卍[] 投稿日:2010/03/12(金) 20:41:36 ID:uNfSkrLI0
西山が悪いのは取材方法じゃないの?
3 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:41:52 ID:uLd8dnJp0
4 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:41:55 ID:Ed9G/hGX0
5 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:42:47 ID:IL WvaIu0
岡田、おまえ底なしのバカだろw
14 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:47:30 ID:WO/pBKSmO
下半身だけだろ。
15 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:47:33 ID:jPBY6plK0
手法が批判されたのだ。
どこが有能なのか
19 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 20:48:12 ID:bKS9bceX0
28 名前:名無しさん@十周年[sage] 投稿日:2010/03/12(金) 20:49:03 ID:MCYN9Rio0
・情事に及んで『真実追求の【 報 道 】調査のため』(A)と資料持ち出しを懇願
↓
旧社会党(当時)の横路代議士(現・議長、民主一時離脱中)らに
なんの加工もせず(B’)手渡し
愛人として捨てられただけでなく
記者の「報道目的ウンヌン」は【野党と組んでの倒閣が真の目的】と悟り
号泣しながら白状に及ぶ
・毎日新聞、入手方法に問題があると知りながらも明るみには出ないだろうとキャンペーン続行
検察が「被告は記者との常時によりウンヌン」と読み上げて全てが白日の下に
・「公然の秘密」報道のために女性事務員に不貞&刑法事犯させた
枕営業の教唆犯な報道政治目的利用だとマスコミからまで非難を受ける
98 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 21:13:28 ID:ObjFByPq0
»28
この女の人、旦那さんと今は幸せなのかなそっとしておいて上げたいけど
この西山って色気馬鹿記者もしかして名誉回復で英雄気取りと勘違いしてない?
こんなの今だって許されることじゃないだろ、
101 名前:名無しさん@十周年[sage] 投稿日:2010/03/12(金) 21:15:23 ID:0rLdTm6A0
»98
西山にヒモ扱いされた旦那さんは、
117 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 21:22:34 ID:sbeAu8ov0
»28
126 名前:名無しさん@十周年[] 投稿日:2010/03/12(金) 21:26:57 ID:zaFJFPhu0
»28
たしかこの事件が切欠で、
— 自民幹事長:徴兵制を検討? 談話で否定 - 毎日jp(毎日新聞)
ttp://mainichi.jp/select/seiji/news/20100305k0000m010084000c.html
論点整理は「国民の権利及び義務」の項目で「ドイツをはじめ多くの国では、憲法で、国民の兵役義務や、良心的事由に基づいてこれを拒否する者の代替役務等が定められている」と指摘したうえで、「民主主義国家における兵役義務の意味や軍隊と国民との関係などについて、さらに詰めた検討を行う必要がある」と提起した。
これが「徴兵制検討」と速報されたのに慌てた大島氏は、談話で「論点整理はあくまでも他の民主主義国家の現状を整理したもの。わが党が徴兵制を検討することはない」と否定した。
うーん、そこは JUnit の使い方でなんとでもなる。
1つのテストケース動かす度にテーブル作り直すとかありえないし。
テーブルは作り直さずとも、テーブルの中身を truncate でひっくり返して、事前データをブチ込み直すくらいならば平気。
某銀行系での例。マジ怒られそうだから、若干ボカして書くけど、
ひとつのテストメソッド TestXxxDAO.testRetrieveFooBar() は、XxxDAO.retrieveFooBar() メソッドについての複数のパターンのテストを全てやる事にする。そのテストメソッドの中で
というサイクルを繰り返す。テストデータや想定結果は、全て OpenOffice calc なんかを使って、視覚的に書いておく。その ods ファイルを読み、DB に突っ込み、想定結果と比較する処理は独自フレームワークとして用意。ods ファイルは、「こういうデータを準備して、こういう引数でメソッドを呼ぶと、こういう結果になりました」というテストのエビデンスにもなる。
insert 後に select とかってのが切り離して考えられない処理ならば、それはそういう 1 単位の挙動だ。俺なら例えば、XxxDAO.insertFoo()、XxxDAO.retrieveBar() を作ってテストした上で、そいつらを XxxLogic.doSomething() に押し込むね。そしてやはり上記のようなテストが出来る。
頭の中だけだと「それって現実的じゃなくね?」と思えるかも知れないけど、実際やってみるといい。テスト順なんか気にせずにやっつけてしまえるし、案外これで効率よく厳密なテストが出来る。それでもヘタクソな野郎は、テスト順に依存したテストを作りやがって、後でメンテする俺涙目みたいな事にもなるけど。
これでテストデータを作るのが死にそうなほど大変であれば、メソッドの粒度を見直すべきかも知れない、というセンサーにもなる。・・もっとも、XxxLogic.doSomething() などを処理順に纏めた XxxAction.action() なんかのテストともなれば、やっぱ大変なんだけども。
でも、テストって普通、簡単なものから難しいものへ、順番に書いてくんじゃないの? そうなってないと品質上げていきにくいし。テスト順を不定 (ってこと) にして何がうれしいんだろ。
あるいはたとえばデータベースまわりのテスト書いてると、普通は副作用に依存したいと思うんですけど。1つのテストケース動かす度にテーブル作り直すとかありえないし。
INSERT のテストケースを動かして、次に SELECT のテストケースで読めるか確かめるとか普通やるよね。
てか、INSERT が動かないことには SELECT のテストが動くわけないのに。テスト順がないから、そういう依存関係の定義も面倒。
テスト順が明示的であれば、最初に問題が出たテストから順番につぶしていけばいいよね、ってことになるけど、順序が不定だから直感的じゃない。
ttp://mltr.ganriki.net/faq05c02o02.html#19780
●12月4日午前中
↓
>鳩山首相は同日朝,新たな移設先として地元の一部が期待を示すグアムについて,
>「妥当かどうかは検討する必要がある」と述べた.
ttp://mainichi.jp/select/seiji/news/20091204dde001010046000c.html
>米軍普天間飛行場(沖縄県宜野湾市)の新たな移設先について,
>米領グアムを一つの選択肢として検討する考えを明らかにした.
ttp://www.asahi.com/politics/update/1204/TKY200912040240.html
>鳩山由紀夫首相は4日午前,米軍普天間飛行場(沖縄県宜野湾(ぎのわん)市)移設問題に関し,
>「グアムに全部移設することが米国の抑止力ということを考えたときに妥当かは検討する必要がある」と語り,
>同飛行場をグアムに移転することも含めて検討する考えを示した.首相公邸で記者団に語った.
ttp://headlines.yahoo.co.jp/hl?a=20091204-00000524-san-pol
●4日午後
↓
ttp://www.asahi.com/special/09006/TKY200912040407.html
・・・頭がおかしいのかも・・・
「あなたとは違うんです」その通り。確かに、誰かたちとは違ったね。
377 名前:名無シネマ@上映中[sage] 投稿日:2008/10/17(金) 03:51:28 ID:RCbqhuxf
康夫ちゃんを悪く言っちゃらめえ。
康夫ちゃんは、国士だったんだよ。
あのとき、まだリーマンが破綻になる前で、アメリカからリーマンを助けるために
米国債購入経由で公的資金投入の資金よこせってゆすられてたの。
渡辺みっちーのバカ息子が「じゃあ100兆円用意しますね」って準備を進めてたの。
それに気付いた康夫ちゃんは、内閣改造して渡辺の首を切ってうやむやにしたの。
でも、アメリカはしつこくて許してくれなかったの。
そこで最後の手段、靖男ちゃんの自爆攻撃を敢行したの。
退陣して総裁選、となると、時間稼ぎできるでしょ。そうやってタイムリミットをやりすごしたの。
これは早すぎても遅すぎてもダメなの。
(だから、松子と重なってもしょうがないの。でも、あともう2時間後にやってほしかったけど。。。。)
で、向かった先が韓国。韓国が俺が面倒見る二ダって手を上げて、
だから再建関係の環境を浴するのに協力する二ダってアメリカに持ちかけたの。
アメリカは協力したの。おかげで韓国は破産を免れたんだけど、リーマンを無視したの。
アメリカに嘘ついたのね。日本にいつもやってるから、世界にも通用すると思っちゃったのね。
で、ここから世界恐慌が始まったの。
はげたかさんもどんどん集まってきたの。でも自業自得なの。
・・・まあ、そんなわけで、康夫ちゃんは、日本の金庫からアメリカが100兆円を盗もうとしたのを
だから、悪く言っちゃだめなの。
↓裏取れました。
米政府系住宅金融機関2社が経営危機を迎えていた08年8月下旬、日本政府が外貨準備を使って両社の支援を検討していたことが5日、関係者への取材で分かった。
入札不調に終わる懸念があった2社の社債数兆円を、日本政府が買い支える計画だった。世界的な金融危機に陥る瀬戸際とはいえ、公的資金で外国の金融機関を救おうとしたことは極めて異例で、
経済的に密接不可分な日米関係の特殊性を明らかにする事実といえる。
金融機関2社は、社債で調達した資金で金融機関から住宅ローンを買い取り、証券化商品に組み替えて投資家に販売しているフレディマックとファニーメイ。
両社が発行した住宅ローン担保証券の残高は約6兆ドル(約540兆円)と米国の住宅ローン残高の半分を占め、世界の金融機関も広く保有していた。
両社が経営破綻(はたん)すれば、日本を含めた世界の金融システムに深刻な影響を与えることは確実だった。
日本政府では、限られた財務省幹部が米財務省と緊密な連携をとりながら、外貨準備から数兆円を拠出して両社の社債を購入する救済策「レスキュー・オペレーション(救済作戦)」という名の計画を立案。
通常は非公表の外貨準備の運用内容をあえて公表し、日本の支援姿勢を打ち出して両社の経営に対する不安をぬぐい去ることも検討した。
しかし当時の伊吹文明財務相が慎重論を主張し、9月1日の福田康夫内閣の退陣表明で政府が機能不全に陥ったため、実現しなかったという。米政府は9月7日、公的資金を投入して両社を国有化し救済したが、
同月15日には米リーマン・ブラザーズが破綻し、結局、金融危機の深刻化は防げなかった。
伊吹元財務相は毎日新聞の取材に「大臣決裁の段階にはなかった。しかし、米国の経済危機が目前に迫る中、日本の外貨準備で損失が出かねない資産を購入すべきでないという当たり前の判断だ」と述べた。【斉藤望】
ttp://mainichi.jp/select/today/news/20091006k0000m020130000c.html