若干参考もとが古かったようです。
GOROOTはすでに不要です。
詳しくは以下を参照
shuzo-kino.hateblo.jp
【読書メモ】1000円ゲーム 5分で人生が変わる「伝説の営業法」
- 作者: 江上治
- 出版社/メーカー: 経済界
- 発売日: 2014/09/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
黄色い表紙が目につく営業論の本です。
文字密度、イラストの量からして何だか小学校高学年向けの読み物みたいな印象をうける組版。
その分頭に入って来やすい内容です。
方法論はどうであれ、相手の役に立つという大前提をもつこと。
その上で、聞き取りの中から真のニーズを拾って役に立つように行動すれば、
自ずと売上は上がってくるという話でした。
「心・技・体」なんて言葉もあるように、
まずちゃんとした動機がないと行き詰まるから、
その辺りちゃんと意識しなさいよ……というのが、この本の結論です。
私の会社はお客様側からの持ち込み企画に対して、技術で貢献するというタイプの仕事の進め方をしています。
そのためか、こういう事は自然とできていたように感じます。
今後業態を拡大するにあたって、なんとなく出来てた事をちゃんと意識してやってくべきなんでしょうね。
【読書メモ】新人デザイナーのための Webデザインを基礎から学べる本
- 作者:瀧上 園枝
- 発売日: 2014/12/25
- メディア: 単行本
タイトル通り、Webデザインについての入門書です。
章の最初に分野の基礎知識が入り、
その後は「いいケース」「わるいケース」を比較しながら、
ここではこう考える……という思考に道筋を提示してくれます。
実装につかったHTML/CSSファイルは特に用意されてないので、
そこは自分でやる必要があります。
ただ、作中の画像素材の多くは、Pixtaさんから持ってきているようです。
無料素材という訳でもないようなので、透かしが入りますが……。
あくまで自習用に拝借するのはなんとかセーフ??
pixta.jp
類似書
ストーリー仕立てで、同じ題材を段階的に改善していく本
shuzo-kino.hateblo.jp
同一生成元ポリシー(Same-Origin Policy)のお節介を防止するSafariブラウザの機能
pythonのglobal変数を関数内で利用するときはちゃんと宣言する
ちょっと横着して、グローバル変数を使おうとしたところ
UnboundLocalError: local variable 'count' referenced before assignment
なるエラーが。
調べてみると、Python公式に以下のような記述が
Python では、関数内で参照されるだけの変数は暗黙的にグローバルにです。関数の本体のどこかで値が変数に代入されたなら、それは明示的にグローバルであると宣言されない限り、ローカルであるとみなされます。
というわけで、hoge関数中でグローバル変数countを使いたい場合、関数冒頭で以下のようにします。
def hoge(): global count //...
leaflet-realtimeで「ピザ配達状況」めいたマップアプリをつくる
leaflet-realtimeは@perliedman氏が提供するleafletJsのサードパーティ拡張です。
サーバ上に置いたGeoJSONを呼び出して、「ピザ配達状況」めいたマップアプリをつくる事ができます。
実際のところ
とりあえず、公式から持ってきましょう。
$ git clone https://github.com/perliedman/leaflet-realtime.git
とれたら、サンプルを起動してみます。
$ cd leaflet-realtime/example $ open trail.html
三秒ごとにトークンが移動し、数回分の移動軌跡が残るサンプルが表示される筈。
ここで表示されるデータは
https://wanderdrone.appspot.com/
にあり、三秒ごとに一回更新されているようです。
中身はこんな感じ。
{"geometry": {"type": "Point", "coordinates": [111.19591175057819, -4.9534701779661079]}, "type": "Feature", "properties": {}}
自前のをやる
では、trailを参考に少し改造してみましょう。
trail.jsを以下のようにします。
var map = L.map('map'), trail = { type: 'Feature', properties: { id: 1 }, geometry: { type: 'LineString', coordinates: [] } }, realtime = L.realtime(function(success, error) { L.Realtime.reqwest({ url: 'http://localhost:8080/api/status', type: 'json' }) .then(function(data) { var trailCoords = trail.geometry.coordinates; trailCoords.push(data.geometry.coordinates); trailCoords.splice(0, Math.max(0, trailCoords.length - 5)); success({ type: 'FeatureCollection', features: [data, trail] }); }) .catch(error); }, { interval: 3 * 1000 }).addTo(map); L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' }).addTo(map); realtime.on('update', function() { map.fitBounds(realtime.getBounds(), {maxZoom: 3}); });
次に、localhostにGeoJSONを吐く鯖を用意します。
私はbottleでやっつけてます。
shuzo-kino.hateblo.jp
本当に最小構成でこんな感じ
from bottle import get, run @get('/api/status') def api_status(): return {"geometry": {"type": "Point", "coordinates": [111.19591175057819, -4.9534701779661079]}, "type": "Feature", "properties": {}} run(host='localhost', port=8080)
データ鯖を立ち上げつつ、CORSを無効化できるブラウザで起動します。
OS Xなら、Safariですね。
ちゃんと行けば、こんな感じでボ〜っとトークンが突っ立っている絵がでます。
動かしても3秒毎に中心が変わるので、更新が掛かっている事は確認できます。
leaflet.jsでGeoJSONデータを扱う
shuzo-kino.hateblo.jp
の続き。
ホントはコレをやりたかったのです。
GeoJSONは地理データを記述する用JSON派生です。
特定の地点に吹き出し書いたり、国土領域をポリゴン埋めしたり、旅のルートを線で書いたりできます。
また、Githubに"geo.json"でUPするとOpenMapsでレンダリングまでしてくれる優れもの。
実際のところ
本体部分のmyapp.jsは以下の通り。
他の部分は冒頭の記事と同じです。
今回の例では直接書いちゃってますが、外部から読み込むのがクレバーです。
なお、GeoJSONの経度緯度の順とLeaflet.JSの順がどうも逆のようです。
私はそこでハマったので気をつけて下さい。
//leaflet OSM map function init() { // create a map in the "mapid" div, // set the view to a given place and zoom var map = L.map('mapid'); map.setView([35.656083, 139.544056], 12); // add an OpenStreetMap tile layer var tileLayer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution : '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors', maxZoom: 18, }); tileLayer.addTo(map); var geojsonFeature = [ {"type":"Feature","geometry":{"type":"Point","coordinates":[139.544056,35.656083]},"properties":{"name":"電気通信大学"}} ] L.geoJSON(geojsonFeature).addTo(map); // add layers var baseLayers = { "OpenStreetMap": tileLayer }; var overlays = { "Marker": mapMarker, }; L.control.layers(baseLayers, overlays).addTo(map); // add control scale L.control.scale().addTo(map); }
ちゃんとできてれば、こんな感じでレンダリングされてるはず。