- Home: http://solar-energy.no32.tk
- Space Apps Challenge Project Home: http://spaceappschallenge.org/project/where-to-put-solar-panels-/
- Facebook (sometimes private!): http://www.facebook.com/groups/435555353200281/
- Wataru Ohira (Lead)
- Ryota Ayaki
- Hiroki Matsue
- Takashi Nishibayashi (github:haginon3000)
- Eric Platon
- Hajime Sasaki
- Shun Shiramatsu (github:siramatu)
- TAKANO Mitsuhiro a.k.a. takano32 (Lead Engineer / Big Data Administrator)
Assuming Ubuntu 12_04
See also web_client/README.md for more detail on the client code
Package requirements
# As root apt-get install build-essential libcurl4-openssl-dev apache2-prefork-dev apache2 nodejs git <必須なパケージを追加してください!> \curl -L https://get.rvm.io | bash -s stable --ruby=1.9.3
If you want to install latest nodejs, see here: https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager#ubuntu-mint
Get the code the first time
cd /srv && \ git clone git://github.com/International-Space-Apps-Challenge-Tokyo/WhereToPutSolarPanels.git # As needed cd /srv/WhereToPutSolarPanels/web_server BUNDLE_PATH=vendor/bundle bundle install && \ BUNDLE_PATH=vendor/bundle bundle exec passenger-install-apache2-module -a cd /srv/WhereToPutSolarPanels/web_client bower install
Get code updates (very primitive, but the way to date!)
cd /srv/WhereToPutSolarPanels git checkout master && git pull cd /srv/WhereToPutSolarPanels/web_server && BUNDLE_PATH=vendor/bundle bundle install cd /srv/WhereToPutSolarPanels/web_client && bower install
Install virtual hosts
# As root ln -s /srv/WhereToPutSolarPanels/etc/apache2/sites-available/wtps-api /etc/apache2/sites-available/wtps-api ln -s /srv/WhereToPutSolarPanels/etc/apache2/sites-available/wtps-web /etc/apache2/sites-available/wtps-web a2ensite wtps-web a2ensite wtps-api
Start/Restart Apache
sudo apache2ctl start || sudo apache2ctl graceful
- HDF
- HDF Java
- HDF4 to HDF5
- HDF5 to XML Format
CommonSpec
- Ubuntu 12.04 LTS 64bit
- Disk 215GB (/ : 15GB, /mnt/work : 200GB)
- Memory 8GB
- CPU 1.7GHz * 2
- SSH Port 22, Key Authentication only
SSH keys are shared in the private Facebook group.
Getting to the main server:
ssh root@210.129.195.213 -i ~/.ssh/id_rsa_wtps
- Global IP address: 210.129.195.213
- Hostname: i-1603-29752-VM
- Private IP address: 10.1.1.82
- Hostname: i-1603-29759-VM
- Private IP address: 10.1.2.94
- Hostname: i-1603-29760-VM
# apt-get update # apt-get upgrade # apt-get dist-upgrade # fdisk /dev/sdb # mkfs.ext4 /dev/sdb1 # blkid /dev/sdb1 # vi /etc/fstab # reboot
at 210.129.195.213, foreach new worker's hostname.
# scp -i ~/.ssh/id_rsa_wtps{,} hostname:~/.ssh # apt-get install git # cd /mnt/work # git clone https://github.com/International-Space-Apps-Challenge-Tokyo/WhereToPutSolarPanels.git
return to worker.
# apt-get install python-h5py python-pymongo
let's get started to insert data!
install hdf5-tools
apt-get install hdf5-tools
use h4toh5.
insert_cloud_mask.py
using h5py and pymongo.
$ sudo apt-get install python-h5py python-pymongo
usage
$ insert_cloud_mask.py [shard_index] [shard_num] [HDF5 File Name]
multiple file insert.
ex. from 2000-01-01 to 2000-12-31 data.
$ echo MOD35_L2.A200[0]*.h5 | xargs -n1 insert_cloud_mask.py [shard_index] [shard_num]
ex. from 2001-01-01 to 2012-12-31 data w/ concurrency 4.
$ echo MOD35_L2.A200[12]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12 $ echo MOD35_L2.A200[34]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12 $ echo MOD35_L2.A200[56]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12 $ echo MOD35_L2.A200[78]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12 $ echo MOD35_L2.A20[01][09]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12 $ echo MOD35_L2.A201[12]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py 0 12
ex. and batch insert.
$ i in `seq 0 11`; do echo MOD35_L2.A200[12]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done $ i in `seq 0 11`; do echo MOD35_L2.A200[34]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done $ i in `seq 0 11`; do echo MOD35_L2.A200[56]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done $ i in `seq 0 11`; do echo MOD35_L2.A200[78]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done $ i in `seq 0 11`; do echo MOD35_L2.A200[01][09]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done $ i in `seq 0 11`; do echo MOD35_L2.A201[12]/*.h5 | xargs -P4 -n1 ./WhereToPutSolarPanels/insert_cloud_mask.py $i 12; done
- Current Data Structure
> db.cloud_mask.ensureIndex({loc: '2d'})
> db.cloud_mask.count({query: { lat: {$gt: 35, $lt: 35.001}, lon: {$gt: 134, $lt: 134.001} }})
> var _m = function() { emit(this._id, {score: this.score}); }; > var _r = function(key, values) { var result = {count: 0, score: 0}; values.forEach(function(value){ result.count++; result.score += value.score; }); return result; };
> db.cloud_mask.mapReduce(_m, _r, {out: {inline: 1}, query: { lat: {$gt: 35, $lt: 35.01}, lon: {$gt: 134, $lt: 134.01} }})
- GET /api/v1/rank
- Request Parameters
- lat: latitude
- lan: longitude
- Response
- Content-Type:application/json
{ rank: 5, total_score: 3600, // Total over 10 years series: { from: "2000-01", to: "2010-12", data: [100, 105, 100, 30] // Number of sunny days each month over 10 years. } }
- Example
http://xxxxx.com/api/v1/rank?lat=35.666666&lan=135.333333333
- GET /api/v1/rank/range
- Request Parameters
- type1
- lat_s: latitude start of range
- lat_e: latitude end of range
- lon_s: longitude start of range
- lon_e: longitude end of range
- type2
- lat_r: latitude range
- lon_r: longitude range
- type1
- Response: Array of 400 data points (lat, lon, rank), where the rank is the number of sunny days on average at that position.
------- |1|2|3| ------- |4|5|6| -------
- Content-Type:application/json
[ { "lat": 32.123, "lon": 139.123, "weight": 123 }, ... { "lat": 38.123, "lon": 142.123, "weight": 321 }, ]