2011年3月4日金曜日

MySQLで GROUP BYにない列を SELECTした場合、グループ内のどの行の値になるかは分からない

MySQL :: MySQL 5.5 Reference Manual :: 11.16.3 GROUP BY and HAVING with Hidden Columns
When using this feature, all rows in each group should have the same values for the columns that are ommitted from the GROUP BY part. The server is free to return any value from the group, so the results are indeterminate unless all values are the same.

MySQLではSQL標準に反して、GROUP BY句にない列をSELECT句やHAVING句で使うことができる。想定しているのは上記リンク先のように、複数のテーブルを結合した場合等にGROUP BY句にあるキー列により一意に決まる(どれも同じになる)従属項目を使うこと。
これによりMySQLは処理を高速化できる。

しかし、違うデータが入っているかもしれない列を使うと、どの行のデータが使われるかは決められていない。(たぶん「物理的に」一番最初のデータとかが使われそう。)


PostgreSQLも9.1から同様のことができるようになるらしい(MySQLに合わせるため)。

PostgreSQL 9.1 の新機能 — Let's Postgres
標準SQLでは必ず GROUP BY にも列名を書く必要があるのですが、MySQL では許されているため、「なぜ PostgreSQL
では受け付けないのか?」という質問が良くありましたが、互換性が向上したと思われます。ただ、プライマリキーが必須であること、つまり省略した列がラン
ダムに選択されることはないよう制限しているのは、PostgreSQL の設計思想が反映されていると言えるでしょう。


プライマリーキーが必須っていうのは、JOINした場合の親テーブルの従属項目を使うことのみを想定しているということかな?

2011年3月3日木曜日

Webブラウザで PHP等のコーディングができるテキストエディタ

Webベースのソースコードエディタ「ecoder」 - MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ
ecoderはPHP製のソフトウェアで、Webベースでファイルの作成、編集ができる。Ajaxを使っており、操作はスムーズだ。データベースを用意する必要はなく、手軽に利用できる。PHP/HTML/CSS/JavaScriptなどのハイライトが組み込まれており、行番号も表示してくれる。

拡張子がlogとかだとファイルツリーに表示されないので、用途によってはソースの変更が必要かも。
アクセス制限には注意。

Facebook is the internetになったら

F's Garage:Facebookがインターネットになると困る
Web2.0がプラットフォームビジネスの基礎だったすれば、Facebookやtwitterこそが、Web2.0の完成系と言える。もしかしたら、Web3.0と言われる世界なのかもしれない。

今まで見たFacebookに関する文章で一番しっくりきた。
Facebookはインターネットのサブセットだと思うけど、それがスーパーセットを飲み込んだときには、いままでインターネットに住み込んでいた人たちの一部はまた別の世界に飛び出す(あるいは弾き出される)んだろうね。「Facebookの10年」が終わるまで。

2011年3月2日水曜日

jQuery UI Tabsの仕様が 1.9から変わるらしい

Tabs API Redesign « jQuery UI Blog
We know that API changes like this are not without cost to our users, so we’d like to make it clear that except where specifically noted, jQuery UI Tabs in 1.9 will support the 1.8 API as well, and the deprecated APIs will not be removed until jQuery UI 2.0.

けっこういろいろ変わるようだ。

現行の1.8までのやり方は、当面(バージョンが1.xの間)は使えるようにするとのこと。(ただしrotate()だけは1.9で削除される。)

2011年3月1日火曜日

Amazon EC2を実際に利用している人たちのアンケート

AWSで気になること4つを聞いてきた – 第1回 JAWS Osaka勉強会 - Shin x blog
せっかくAWSエバンジェリスト、さらに識者の方達が集まる場なわけですから、日頃AWSを使っていてふと気になる疑問、「自分はこうしているんだけど、他の人はどうやっているのかなー」という質問を逆に聞いてしまおうと思い、通常の発表とは逆にみなさんに質問を投げかけるという内容にしました。

なかなか興味深い。
自分の意見も書いてみる。(感想か。)

RegionがUS WestとAsiaというのは想定通り。普通のWebならUS Westでも遅いとは感じない。

AMIは意外にもRightscaleが人気みたい。自分で一から入れてる人が多いと思ってた。
Rightscaleは確かに楽だが、Rightscale用の要らないツールも入れられるのが嫌。
Amazon Linuxはいいんだが、情報が少ないこと(ほぼCentOSだとは思うけど)と他の環境への移行が不安かな。

EBSを使うのは当然。遅いと感じたこともない。(ストレージがボトルネックになるような処理も走らせてないが。)

2011年2月28日月曜日

IEには br要素を連続すると偶数個目の brが無視されるバグがあるらしい

スタイルシート[CSS]/テキスト・フォント/文字の間隔を指定する - TAG index Webサイト
【IEの不具合について】

このスタイルを設定した要素内でbr要素を連続させると、2つ目(偶数個目)のbr要素が無視されてしまいます。例えば、5つのbr要素を連続させた場合は、2番目と4番目のbr要素が無視され、3つ分の改行しか入らなくなります。

br要素に対して letter-spacing: 0 または letter-spacing: normal を指定すると、この不具合を回避することができます。

※IE 8では、上記の不具合は発生しないようです。

上記のようにbrのletter-spacingに0かnormalを指定することでこの現象は起きなくなる。
上記にはIE8では発生しないと書いてあるが、手元のIE8では発生した。(互換モードとかの関係?)

印刷用CSSのフォントサイズ等の単位は ptがいいらしい

印刷用CSSの文字サイズ単位はpt? | アイビーネットblog
この事からわかるとおり、ptの場合はモニター解像度(dpi)が変わっても印刷サイズは変わりませんが、pxの場合はモニター解像度が変わると印刷サイズが変わります。

mmとかはどうなんだろ?

ウィザード形式でAmazon EC2で Webアプリを立ち上げられるサービスが開始

【AWS発表】 AWS CloudFormation: 複雑なシステムもクラウドレシピからワンクリックで作成可能に! - Amazon Web Services ブログ
さて、まとめますと、CloudFormationを使うことにより、アプリケーションスタック全体を非常に簡単に、作成、管理、破棄することができます。AWSが、重要な基盤レベルについては面倒を見ますので、皆様は、素晴らしいアプリケーションを作成することに、集中することができます。

上記では難しく説明しているが、具体例を見たほうが分かりやすい。
他にも下記のサンプルテンプレートが提供されている。
  • Drupal
  • Gollum Wiki
  • Joomla
  • PHP Hello World Application
  • Rails Hello World Application
  • Tracks Management System
  • Insoshi Social Networking Platform
  • Amazon ElasticBeanstalk Hello Wolrd
Gollum、Tracks、Insoshiは聞いたことないけど海外では有名なのかな?WikiはGollumしかないのが意外。
Hello World ApplicationsはDBも入れてくれるのかな?


起動や管理はおなじみのManagement Console(Amazonが提供しているAWSを管理できるWeb画面)からできる。(Management Consoleのタブがどんどん増える...)
↓
AWS Management ConsoleのAWS CloudFormationサポート - Amazon Web Services ブログ

2011年2月25日金曜日

本当は奥深いユニコードの世界

UTF-8コード表(1)
e38bb0 ㋰ ㋱ ㋲ ㋳ ㋴ ㋵ ㋶ ㋷ ㋸ ㋹ ㋺ ㋻ ㋼ ㋽ ㋾
e38c80 ㌀ ㌁ ㌂ ㌃ ㌄ ㌅ ㌆ ㌇ ㌈ ㌉ ㌊ ㌋ ㌌ ㌍ ㌎ ㌏
e38c90 ㌐ ㌑ ㌒ ㌓ ㌔ ㌕ ㌖ ㌗ ㌘ ㌙ ㌚ ㌛ ㌜ ㌝ ㌞ ㌟
e38ca0 ㌠ ㌡ ㌢ ㌣ ㌤ ㌥ ㌦ ㌧ ㌨ ㌩ ㌪ ㌫ ㌬ ㌭ ㌮ ㌯
e38cb0 ㌰ ㌱ ㌲ ㌳ ㌴ ㌵ ㌶ ㌷ ㌸ ㌹ ㌺ ㌻ ㌼ ㌽ ㌾ ㌿
e38d80 ㍀ ㍁ ㍂ ㍃ ㍄ ㍅ ㍆ ㍇ ㍈ ㍉ ㍊ ㍋ ㍌ ㍍ ㍎ ㍏
e38d90 ㍐ ㍑ ㍒ ㍓ ㍔ ㍕ ㍖ ㍗ ㍘ ㍙ ㍚ ㍛ ㍜ ㍝ ㍞ ㍟

こんな(誰も使わないような)ものまであるんだ...


一番驚いたのが1文字の「㍿」。「㈱」や「㏍」ならまだわかるが...

2011年2月24日木曜日

jQueryで動的に CSSファイルを追加する方法

他の要素と同じようにappend()とかappendTo()しても、CSSファイル(link要素)の追加ができない。(IE8のみで確認。)

でも下記で紹介されているやり方ならなぜかできた!

How-To: Load Javascript and CSS dynamically with jQuery | TopSecretProject
$("head").append("<link>");
css = $("head").children(":last");
css.attr({
    rel: "stylesheet",
    type: "text/css",
    href: "/javascripts/jwysiwyg/jquery.wysiwyg.css"
});

append()の後、メソッドチェーンしないでchidleren(":last")で取得するのがポイントらしい。
メソッドチェーンでappend(..).attr(..)ってやるとうまくいかない。
なぜかは分からないが。link要素だけ特別なのか?

ちなみにchildren(..).attr(..)の方はメソッドチェーンしてもOK。

IEが width / heightを無視してボックスを拡大してしまうバグの回避方法

要素のはみ出しの処理の不具合(IE/overflow):スタイルシート(CSS)辞典 - HTMLタグボード
しかし、IEでは要素やボックスに「widthとheightプロパティ」を設定していて、かつ「overflow」プロパティが指定されていない、または「overflow:visible;」を指定している場合でも、文字が要素に収まりきらないとき、本来なら文字がはみ出て表示されるはずのボックスが勝手に拡大してしまうという不具合があります。

枠線の中に表示して、はみ出す場合はそれが分かるようにしたいのに、IEがボックスを勝手に大きくしてしまうのではみ出すはずがはみ出さない問題が発生。

今回はボックスで囲うのを諦めて、下記のような枠線を表示にすることにより回避した。
div#waku {
    width: 100px;
    height: 100px;
    z-index: -1;
    position: absolute;
    top: 10px;
    left: 10px;
    border: solid 1px black;
    background-color: white;
}

z-indexを付けてるのは枠内の背景を白にしたら他の要素が見えないように塗りつぶされたので、他の要素の後ろにするため。

jQueryで HTML文字列から DOM要素を生成する場合の注意点

jQuery(html, [ownerDocument]) - jQuery 日本語リファレンス
また、スラッシュを含むような文字列(imgタグのパスなど)を渡す場合は、これをエスケープしてやる必要があります。

$('<a href="foo">bar</a>')のようにDOM要素(jQeury要素?)を生成できるけど、文字列にスラッシュがある場合はエスケープが必要らしい。
何でエスケープ?バックスラッシュ??

JavaScriptで動的に CSSファイルを追加する方法

floatingdays: JavaScriptによって動的に CSSを追加する場合のブラウザごとの挙動の違い
var link2 = document.createElement("link");
link2.rel = "stylesheet";
link2.href = "test2.css";
document.getElementsByTagName("head")[0].appendChild(link2);

このやり方でないとIEが対応していないらしい。

JavaScriptファイルを追加する場合は → floatingdays: JavaScriptによって動的に script要素を追加する場合のブラウザごとの挙動の違い

AdSenseポンパレ祭りは終了か?

2011年2月21日月曜日

Windowsで Apache + PHP5.3が動かない場合の対処法

Andante PHP、Windows+PHP5.2.6以降でPostgreSQLに接続できない
Apacheを再起動後、
と記述したスクリプトにアクセスし、pgsql(PostgreSQL)の欄があるか確認します(駄目な場合はOSを再起動して再確認)。

Windows環境変数のPathにPHPのフォルダのパスを追加して、Apache再起動、それでも駄目ならWindowsを再起動。

Twitter検索の Topsyに待望の 公式Widgetが登場!

Topsy ウィジェットの設定について | Unformed Building
Topsy で検索すると、検索結果の詳細ページの右側にウィジェットが表示されています。
この下にお持ち帰りコードがあるので、ちょっと使うだけならそのまま貼れば OK です。

これはよいかも。
Twitter本体でやればいいのに。@Anywhereなんて中途半端なのやってないで。

Topsyの検索結果が少ないと思ったらメンテナンス中だった

Index maintenance and fresh results only mode from Feb 18th to Feb 22nd. - Topsy Service Status
This maintenance operation that will start Feb 18th at 9AM PST and is expected to finish within 96 hours. During this maintenance window, search queries will be answered by a fresh index that is based on tweets posted after Feb 17th 2011.

日本時間の2011/2/19深夜2時に始まり、予定通りなら2/23の深夜2時に終わるということか。

2011年2月20日日曜日

表示しているページを含むTweetを表示する例

デジモノに埋もれる日々: Topsy APIで「言及tweet」をブログに表示 - ブログへの言及はブログ外で行われる時代
今回はこのAPIの 「trackbacks」 というメソッドを使い、
URLを渡してその言及tweetをjsonp形式で取得、それをそのまま
表示用のjavascript functionに喰わせて表示するようにしました。

TopsyのAPIはKEYが要らないのか。これはシンプルでよさそう。

2011年2月9日水曜日

Eメールの終わりの始まり

ティーンはもうメールを使わない–メッセージングに賭けたFacebookは正しかったかも
“高校生たちはメールを使わない。SMSを大量に使っている。お互いにメッセージを送り合いするためには、SMSやIMのような軽いものがよいようだ。”

そもそもEメールは(もともとは)内輪で使う程度の仕様しかなくセキュリティに無防備で、その場凌ぎの仕様追加が歴史的に積み重なって仕様はもはや後戻りできず、かつ実際の現状としてはその過半がSPAMであるという出来の悪いシステムであるにも関わらず、その代替がないため今まで生き残ってきたものだ。
(Google Waveがそれに立ち向かおうとして砕け散ったのは記憶に新しい。)

アメリカでは以前からBlackberryのSMSが主流で、Facebookのメッセージングを使うという素地はできていた。かつAndroidの普及により、PC FreeでFacebookが使える(のだろう多分。知らないけど)。
日本では携帯キャリアの都合で異なるキャリアとのショートメールができないためSMSはいまいちだが、その垣根をFacebookが打ち破ってくれたらうれしい。

ただ問題は、Facebookのメッセージングが結局Eメールのように仕様追加を繰り返してスパゲッティになってしまう恐れがあることと、もう1つは(そして最大の問題は)既にミニ・インターネットであるFacebookに、さらに社会的インフラを預けても大丈夫かという問題がある。
(Googleに替えがない以上に、Facebookに替えはないかもしれない。いや、やってみれば他のものが充分に替えになるかもしれないが。)

まあ米Yahooが退場しつつあるように、10年後にはFacebookもないかもしれないけどね。

Google Maps API V3についに AdSense登場

Google Geo Developers Blog: Monetize your Maps API v3 application with AdSense for Maps
In response to this we are happy to bring AdSense for Maps to Maps API v3. The Maps Ad Unit overlays a set of AdSense ads on the map, in any of the supported formats.

地図上にAdSenseを表示できるようになった。

これにともない、V3にV2のGoogleBarを付けて欲しいという要望は却下された。(Issue 1697 - gmaps-api-issues - GoogleBar & AdSense - Project Hosting on Google Code)
これはまた論議を呼びそう。GoogleBarは独特な検索だけど割りきって使えばそれなりに便利だからなあ。

ブログ アーカイブ

カテゴリー