2013-04-28

JavaScript:Mapを実装する

(個人的にはJavaScriptは嫌いなのだが、GASで使う必要が出てきたのでメモ書き)
JavaScriptには、Mapというクラスはないが、配列の引数に任意の文字列を渡すことで、Map的なものとして使えるらしい。以下、サンプル。
ちなみに上記は、単語が格納されている配列を読み取って、頻度をMap(wordsMap)で管理するというプログラムです。

2013-04-27

GWTアプリケーションをGoogleガジェット化する

これもネタは古いですが、GWTアプリのGoogleガジェット化について。

Googleガジェットとは
Googleガジェットは、Googleが提供する以下のサービスで稼働するガジェットです。
  • Google Desktop
  • iGoogle
  • Google Site
この手のガジェットは、Windowsガジェットも存在したように一昔前は流行ってたんですが、今は上記サービスのうちiGoogleもGoogle Desktopも終了する(している)わけで、今更なフレームワークという気もします。ただ、Google Siteは健在ですし、それなりにGoogle Gadgetは公開されいるので、いまさらなくならないだろうという気もします。

GWTアプリの公開手段とする
おちラボではGoogle Siteでラボのサイトを構築していますし、その上でいろいろウェブアプリを公開していけたらなと思っていたので、ふと、この古いフレームワークに目が止まったわけです。そのガジェット化の方法ですが、

というように、GWTのベースのHTMLファイルを呼び出すだけです。
前記事のDropBoxと組み合わせれば、簡単にガジェットとして公開できるかなと考えています。
なお、GWTのGadget化については、
というのもあるように、いろいろできることがありそうです。本記事の情報はあくまでも既存のGWTアプリをそのままGadget化しただけなので、興味がある人は上記リンクをみてみるとよいでしょう。


GWTアプリをDropBoxで公開する

ネタ的にはたいしたことないのですが、意外と便利な話。

DropBoxのPublicフォルダ
DropBoxにはPublicフォルダと呼ばれる特別なフォルダが有り、ここはHTMLファイルを置くことで、通常のウェブサーバ的にHTMLページを公開することができます。
このPublicフォルダは2012/10以降の新規ユーザにはないらしいですが、
https://www.dropbox.com/enable_public_folder にアクセスすれば有効になる模様 

DropBoxでGWTアプリを公開する
GWTのアプリの公開といえば、Google App Engineや他のウェブサーバが無難ですが、上記のPublicフォルダにGWTのアプリケーションファイルを置くことで、アプリケーションを公開することができます。GWTアプリの実体はJavaScriptなんですから、HTMLファイルにアクセスできたら動くはずです。もちろん、サーバ部分の処理はできませんので、あくまでもサーバ処理のないGWTクライアント限定になります。このことにより以下のメリットがあります。
(1)低価格
Publicフォルダ機能を利用するのに特に追加料金は不要です。また、アクセスが多くなったからといって追加料金が払われることもありません。
(2)簡単なデプロイ
GWTプロジェクトをコンパイルして、warフォルダの中身をPublicフォルダにコピーするだけです。


DropBoxの無料ユーザでももちろん可能ですから、ちょっとしたGWTアプリの公開ならばDropBoxでいいのでないでしょうか。


2013-04-22

GASでGoogle Driveがウェブサービスサーバになる?

GAS(Google Apps Script)については、このBLOGで取り上げるのは初めてかと思います。GASはGoogle Doc(現在はGoogle Driveですが)で動くスクリプト言語で、雰囲気的にMicrosoftOfficeのVBAみたいなものと、軽く考えていましたがそうでもないようです。
GASを利用することでちょっとしたウェブアプリケーションを作成できることは書籍やネットをみれば気づくことです。しかしそれだけでなく、実はHTTPリクエストを受け取ってデータを返す、、といったように通常のウェブサービスのような振る舞いをさせることが可能のようです。
具体的には下記のような記述です。
といった感じで、doGetメソッドでリクエストを受け取り(この名前はname)、それを返すような処理が書けます。これって、サーブレットでやることとほとんど変わらないですよね?
詳細はまた後日書きますが、GASからはHTTPのリクエストや各種Googleのサービスを呼び出すことができます。ということは、GoogleDriveをサーバー化してサービスを提供することでできるということになります。それも無料で!!動作速度は期待はできませんが、ちょっと興味深いところです。

以後、いろいろ調べてみようと思います。

2013-04-20

DynamoDB: ローカルセカンダリインデックスを使ってみた(DynamoDBMapper利用編)

早速話題のDynamoDBのローカルセカンダリインデックスを、高レベルAPIであるDynamoDBMapperクラスから利用してみました。以下はJavaDocを見ながら試行錯誤で試してみた速報的なものですので、若干勘違いもあるかもしれません。

なお、ローカルセカンダリインデックスを使うためには、ライブラリのパッケージは
com.amazonaws.services.dynamodbv2.*
以下を使用することになるので注意してください。

ローカルセカンダリインデックスを持つテーブルの作成
テーブル作成時にローカルセカンダリインデックスを定義する必要があります。事後にインデックスを追加することはできないので要注意ですね。


Index Name名というのがよくわからないので、Attributeの名前を同じにしました。

データクラスにアノテーションを記述する
アノテーションの記述方法ですが、ローカルセカンダリインデックスに相当するAttributeについては、
@DynamoDBIndexRangeKey(localSecondaryIndexName ="age")
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
というようにします。

ローカルセカンダリインデックスで検索をかける
従来のRangeKeyに対する検索の方法と同じです。
上記は、年齢(age)をセカンダリインデックスとして20才のデータを探している例です。

ローカルセカンダリインデックスの特徴
個人的にポイントと思っているのは下記の点です。
  • テーブル毎に最大5つのローカルセカンダリインデックスを作成可能
  • あくまでも従来のレンジキーに対する代替 
  • 複数のローカルセカンダリインデックスを組み合わせた検索は不可
  • 従来のレンジキーとの組み合わせも不可
  • 紐付けるAttributeによってコストが増える?
従来よりも便利になることは間違いないですが、どういった検索をするかを考えた上でインデックスを定義しておかないといけないわけで、意外と設計の難易度が高いという印象です。

APIの仕様が若干変化している点に注意
パッケージがcom.amazonaws.services.dynamodbv2に変わるとともに、微妙にAPIの仕様が変わってます。今までのコードが動かなくなる可能性が高いので注意が必要でしょう。現状すでにDynamoDBで運用している場合は、移行の際は注意した方がいいです。

DynamoDBのmapperクラス関係がdeprecatedになっている件

DynamoDBにsecondaryインデックスが定義できるようになったというニュースを聞いて、ではちょっと試してみようかと、久しぶりにDynamoDBのプロジェクトを起動してみると、mapper系のクラスやメソッドがdeprecatedになっている。これは焦るわけですが、とりあえず、
//旧
import com.amazonaws.services.dynamodb.datamodeling.DynamoDBMapper;
//新
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
とすればいいらしいですが、なんだかなぁ。

まだあんまり話題になっていないのが気になるところ。

2013-04-16

WordPressのadminアカウント名の変更

WordPressは知られたBLOGソフトウェアの1つですが、当然、いろいろ狙われるわけで、下記のようなことが起きることがあります。
デフォルトユーザー名の変更やパスワード強化を推奨:標的は「admin」のユーザー名、WordPressを狙う攻撃激化
デフォルトの管理者アカウントは admin ということは、周知の事実。この事は、アカウントアクセスの第一の壁がないということに久しく、上記の記事のようにブルートフォース(総当り)攻撃をされて、ログインされてしまうという危険性が出てくるわけです。

Adminのアカウント名を変える
Adminのアカウント名を変えることが、こういった攻撃を防ぐ1つの方法ですが、WordPressでは下記の点を理解しておくと良いでしょう。

  • adminのアカウント名を変更することはできない。
  • 新規の管理者アカウントを作成し、そのアカウントでログインした後、adminのアカウントを削除する。
  • adminで作成されたコンテンツの権限は、新管理者アカウントに譲渡する(adminのパスワードを削除するときに聞いてきます)

つまり、新規に作成してadminは消せってことです。以上。

2013-04-05

KVM:ネットワークのブリッジ設定

KVMで仮想環境を実現し、各種サーバー類をゲストOSで動かす時に必要なのがネットワークのブリッジ設定です。で、この設定でハマったのでメモ書き。環境はScientific Linux 6.4です。

NetworkManagerをOFFにする
これが動いているとうまく動かないらしいです。サービスで無効化にしておきましょう。

ブリッジ用ネットワークインタフェース(br0)の追加
/etc/sysconfig/network-scriptsディレクトリには、ifcfg- で始まるファイルがあります。これらがネットワークインタフェースです。br0を追加するというのは、ifcfg-br0というファイルを作成し下記のような記述にします。
DEVICE=br0
TYPE=Bridge
IPADD=192.168.0.20    
NETMASK=255.255.255.0
GATEWAY=192.168.0.1       
ONBOOT=yes DELAY=0
デフォルトネットワークインタフェース(eth0)の修正
eth0というネットワークインタフェースが元々あると思います。これをブリッジ対応にします。
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
DELAY=0

以上の設定で、ブリッジインタフェースは出来上がりました。あとは、ゲストOS側からもbr0にたいしてBridge接続をすればOK。その手順は、
  1. KVMのNICの設定で br0(Bridge)を選択 ←その項目が挙がっているはずです。
  2. ゲストOSの音とワーク設定は従来通り
という感じです。

以上でネットワークに繋がるはずですが、iptablesの設定が必要な場合もあるようです。


2013-04-04

WordPress:URLを変更する

WordPressの小ネタです。
WordPressの稼働しているサーバを新マシン等に移行をする際、いきなり移行するのではなくて仮のサーバを動かして動作検証したいものです。例えば、www.hogehoge.org という本番サイトが動いている状況で、とりあえず新サーバをwww2.hogehoge.org で動かしておいて、動作検証の後、ドメイン名を変更するという方法です。WordPressには稼働しているサーバのURL情報が記述されていますから、その情報を変更する必要があります。で、その方法ですが、WordPressの場合はURL情報がデータベースに書かれているので、すこし厄介です。方法は2つあります。

(方法1)WordPressの一般設定画面で変える
この方法が一番確実ですが、ミスは許されません。というのも、設定画面でURLを変更するとその瞬間から新しいURLにアクセスできる環境にマシンを設置しないかぎりWordPressにアクセスできなくなりますので。


(方法2)データベースを書き換える
WordPressが利用しているデータベースに直接アクセスし、

  • siteurl
  • home
の値に書かれているURLを変更するという方法です。ちょっと専門知識が必要そうですが、phpMyAdminを使って、検索をかければ意外と簡単にできます。

どちらも結局データベースを書き換えるわけで、個人的には方法1でいいと思います。ただ、万一ミスしたりうまくいかない場合、方法2のやり方を知っておくと直せますから、方法2を理解した上で方法1でやるのがオススメです。




Moodle:URLを変更する

Moodleの小ネタです。
Moodleの稼働しているサーバを新マシン等に移行をする際、いきなり移行するのではなくて仮のサーバを動かして動作検証したいものです。例えば、www.hogehoge.org という本番サイトが動いている状況で、とりあえず新サーバをwww2.hogehoge.org で動かしておいて、動作検証の後、ドメイン名を変更するという方法です。Moodleには稼働しているサーバのURL情報が記述されていますから、その情報を変更する必要があります。で、その方法ですが、
Moodle ディレクトリ内で、「config.php」ファイルの $CFG->wwwroot 変数をサーバに合わせて変更
とするだけでOKです。