優勝は中学1年の女の子!

昨日、U-16旭川プログラミングコンテスト | 思考と達成が未来へ!!が旭川市科学館サイパルで行われました。
正直なところ盛り上がりにかけるのではないかと思っていたのですが、予想に反して会場は歓声や笑いが飛び交っていてみんな楽しそうでした。
優勝したのは中学1年の女の子でした。プログラミング自体は今回が初めてのようなことを言っていましたが、良い経験になったのではないでしょうか。是非とも旭川・北海道を代表するようなプログラマーになってほしいですね。

えすぱーぶろぐ

最近、wordpressのネタが異常に溢れ出てる感じがして、みんなすげーーー!、と感心してはいるものの、自身のブログに投稿すらしていないのでどうでもいいですよね。

でも、無い時間を工面して仕入れた情報をevernoteにぶっっこんでるんですが、
溜めっぱなしで出力しないのでゴミ箱と変わりません。

そこで、

evernoteに書きためたメモを勝手にきれいに清書してくれて、
きゃっちーなタイトルとか
タグとかカテゴリーとかつけて
wordpressに投稿してくれる

そんなwordpressノウハウが出回るのを心待ちにしています。

まぁ、そのノウハウもevernoteにいれるんですけどね。

ゆーあい

ひろゆき日記@オープンSNS。 のコメントだったと思うけど、UIに関するリンクがいくつか書いてあったので読んでみた。
単純に面白いっちゃー面白いのだけど、自分が作るシステムのことを考えると笑えない。

楽しいBADUIの世界
使いやすさ日記: 街でみかける、いろいろなモノの使いやすさをレポート。
山中俊治の「デザインの骨格」 » あらためてSuicaの話でもしようか その1

AOSC勉強会 google map

先週の話ですが、旭川オープンソースコミュニティの勉強会で「google map」について話がありました。
その中で、iphoneから緯度経度を取得する方法について聞いてみたのですが、わからないとのことでしたので調べてみました。

まぁ、調べたと言うか、検索しただけですが。

html5のGeolocation APIを使うとイイ!

 サンプルが転がってるだろう、ということで、Google Maps API Referenceのデモギャラリーを探してみたところ、案の定あっさりでてきました。

-> Where Am I?

位置情報の取得

 デモのソースを見てみると、下記コードで緯度経度を取得していそうです。

抜粋
[javascript]
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(positionSuccess, positionError);
} else {
positionError(-1);
}
[/javascript]

navigator.geolocationとは

 上記コードで使われている「navigator.geolocation」はHTML5のGeolocation APIです。
  -> Geolocation API Specification
 HTML5なので、ブラウザが実装していなければ動作しませんが、主要ブラウザは実装済みのようです。
 -> 位置情報をブラウザで活用! Geolocationを使いこなそう - @IT
 スマートフォンではない携帯では、「位置情報・GPS情報の取得方法 – [携帯 + 携帯] ぺんたん info」に書かれている方法で取得できるようです。

サンプルを作ってみる

 簡単なサンプルをGAEで作ってみました。
 位置を取得してマーカーを追加していくだけのものです。
 GAEにデプロイしてiphoneでアクセスすると、マーカーがどんどん追加されることが確認できました。
 ちなみにGAEで作った意味はとくにありません。普通にサーバーに置いてよいと思います。

-> google map sample
-> source:planset/google_map_sample – GitHub

index.html
[html]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>google map sample</title>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>
<script type="text/javascript">

var gmap = null;

function createMap() {
var myOptions = {
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
return new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}

function updateLocation(pos) {
var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);

if (gmap == null){
gmap = createMap(latlng);
} else {
var marker = new google.maps.Marker({
position: latlng
});
marker.setMap(gmap);
gmap.setCenter(latlng);
}
}

function handleError(a) {
alert("error: " + a.code + "");
}

window.onload = function(){
if (navigator.geolocation) {
var options = {
timeout: 10000
};
navigator.geolocation.watchPosition(updateLocation, handleError, options);
}
};

</script>
<style type="text/css">

html, body { height: 100%; margin: 0; padding: 0; }
#map_canvas { width: 100%; height:100%; }

</style>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>

[/html]

参考:Google Maps JavaScript API V3

高機能で高速なウェブサーバ!?cherokee

cherokeeってのを見かけたのでメモ。
nginxよりも高速だとかなんとか。

Cherokee Web Server

インストール

ubuntuあたりだとPPAリポジトリ追加すると簡単にインストールできるみたいです。
ソースからインストールする場合は、ここのSource code archiveからダウンロードします。
ここをみると、MacOSX用のdmgもあるけど試してません。
ソースからコンパイルしてインストール
デフォルトだと/usr/local/以下にインストール

ウェブサーバー

/usr/local/sbin/cherokee
設定ファイルは /usr/local/etc/cherokee/cherokee.conf

ポート80が他で使われている場合は、以下を適当なポートに変更する。
server!bind!1!port = 80

管理画面

これが便利
/usr/local/sbin/cherokee-admin
起動すると、admin用のサーバーが起動されワンタイムパスワードが発行される。
cherokee-adminに指定されたアドレスにアクセスすると管理画面が表示される。
appsからwordpressなどメジャーなのを管理画面からインストールできちゃう。
レンタルサーバーみたい。
pythonでできてる。

macへのインストール+adminからdrupalインストール動画

dotcloudでサクっとpython/flask/mongodbデプロイ

久しぶりに楽しそうなのがあったので更新です。
dotcloudというherokuの色々な言語版みたいなもんです。DBまで色々使えます。
private beta中みたいです。登録しとけばそのうちメールくると思います。

DotCloud

試しにpython、flaskで動かしてみました。

[bash]
mkvirtualenv –python=/opt/local/bin/python2.7 py27dev
pip install dotcloud
dotcloud
# (API Key入力)
dotcloud create plansettest
dotcloud deploy -t python plansettest.www

# flaskでお試し作成
mkdir plansettest
cd plansettest
pip install flask
vi wsgi.py
pip freeze > requirements.txt

dotcloud push plansettest.www .
[/bash]

wsgi.py
[python]
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()

application = app
[/python]

これで http://www.plansettest.dotcloud.com/ デプロイ完了。動いてくれます。
らくちんー!

ついでにmongodbも。

[bash]
dotcloud deploy -t mongodb plansettest.mongo
dotcloud info plansettest.mongo
# config: mongodb_password: のパスワードをコピる。
# あと、サーバー名とポートもあるのでメモっとく。mongodb://root:なんちゃら〜の方ね。
dotcloud run plansettest.mongo mongo
# 3回くらい失敗?した。シェルになるまでがんばる。
> use test
> db.getSisterDB("admin").auth("root", "コピったパスワード");
> db.message.save({"message":"uho"});
> db.message.find()
> db.addUser("username","password");
> exit

pip install pymongo
pip freeze > requirements.txt
vi wsgi.py
[/bash]

wsgi.py
[python]
from flask import Flask, g, abort, redirect, url_for
app = Flask(__name__)

from pymongo import Connection

def connect_db():
try:
connection = Connection("mongo.plansettest.dotcloud.com", 6477)
return connection["test"]
except:
return None

@app.before_request
def before_request():
g.db = connect_db() or abort(500)
g.db.authenticate("username", "password")

@app.route("/")
def hello():
messages = ""
for item in g.db.message.find(limit=10):
messages += item["message"] + "n"
return "Hello World!" + "n" + messages

@app.route("/say/<message>")
def say(message=""):
g.db.message.save({"message": message})
return redirect(url_for("hello"))

if __name__ == "__main__":
app.run()

application = app

[/python]

これでmongodbを使って簡単にデプロイー!

instagramタグ検索とjquery-mobile

(´ぅω・`)

instagramのタグ検索とjquery-mobileで作ってみました。

これ
pcからjquery-mobileのレイアウト見るときはこっち
そ〜す

110415-0001.jpg

110415-0002.jpg

とりあえず、忘れないうちにってことで。
・pythonでflaskを使ってみた。
・nginx、gunicornを利用して動かしてみた。
 よくわからないけど、meinheldも使ってみた。
・jquery-mobileを使ってiphoneから見れるように。

気になること

・pythonでアプリを作って実稼働させるときってどうすりゃいいんだろ。
 nginx+gunicornで動かしてみたけど、これでよいのかなぁ。
・必要なライブラリなんかは、開発でvirtualenv使って、pip freezeとかで揃えるのかな。
・jquery-mobileは適用するとさっそくおしゃれになってくれるけど、iphoneのブラウザでページ遷移するときに、(ロードしなきゃいけないときに?、)上からメニューが降ってきたりして邪魔臭いし、動きがきもい。