PHP gettext
gettextで多言語対応サイトを作る場合
コード・.po・.moファイルの作成は
http://el.jibun.atmarkit.co.jp/kaigaiengineer/2010/08/i18ngettextphp-.html
を参考にしつつできたが、サーバ側の設定でハマった。
以下、ubuntu + nginxで日中英対応の場合にやったことです。
% cat /usr/share/i18n/SUPPORTED |grep -i "zh_CN" > /var/lib/locales/supported.d/zh . . . 使用するlocaleを追加していく % dpkg-reconfigure locales % locale -a -> 使用するlocaleがあるか確認 // ここ重要 // .moファイルをキャッシュしているらしい % sudo service php5-fpm restart
Nginx + PHP + php5-fpmでX-Powered-Byを表示しないようにする
% sudo vi /etc/php5/fpm/php.ini ----- expose_php = On ↓ expose_php = Off ----- % sudo service php5-fpm restart
Geographic Data
Getting Started With GEO, CouchDB, and Node.js
- 作者: Mick Thompson
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2011/08/03
- メディア: ペーパーバック
- クリック: 6回
- この商品を含むブログ (1件) を見る
"Getting Started with GEO, CouchDB and Node.js"を読んでいて、homebrewでGDALをインストールしようとすると失敗したので手動での準備のためのメモ。
GDAL Complete
http://www.kyngchaos.com/software:frameworks
からGDAL Completeをダウンロード>インストール。
~/.zsh_rc等にパスを通す
export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
% source ~/.zshrc // サンプルデータ % git clone https://github.com/dthompson/example_shapefile_to_geojson.git % cd example_shapefile_to_geojson/110m_lakes/ 110m_lakes.dbf 110m_lakes.prj 110m_lakes.shp 110m_lakes.shx % ogrinfo 110m_lakes.shp INFO: Open of `110m_lakes.shp' using driver `ESRI Shapefile' successful. 1: 110m_lakes (Polygon) % ogrinfo -so 110m_lakes.shp 110m_lakes INFO: Open of `110m_lakes.shp' using driver `ESRI Shapefile' successful. Layer name: 110m_lakes Geometry: Polygon Feature Count: 26 Extent: (-124.953634, -16.536406) - (109.929807, 66.969298) Layer SRS WKT: GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137.0,298.257223563]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]] ScaleRank: Integer (10.0) FeatureCla: String (32.0) Name1: String (254.0) Name2: String (254.0) % ogr2ogr -f "GeoJSON" 110m_lakes.json 110m_lakes.shp % cat 110m_lakes.json { "type": "FeatureCollection", "features": [ .....
C++入門
最近、OpenframeworksやCinderでグラフィックやアニメーションを趣味でやり始めたものの、C++に関する基礎体力が皆無なので、0から勉強することにしました。
教科書
- 作者: ロベール
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/11/15
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 24,544回
- この商品を含むブログ (126件) を見る
目標
紙とペンの代わりに、やりたいことをコードに落とせる程度にはC++を書けるようになる。
大体の流れ(目次から)
- まずは使い方
- Hello World~簡単な計算
- C++の基本
- 変数、関数、スコープ、条件分岐、ループ
- ほんの少し深く
- 型とキャスト、参照、文字列、数学関数
- ポインタ天国
- ポインタ、配列とポインタ、const
- クラスの前に
- 多次元配列、構造体、列挙体、分割コンパイル
- クラスの基礎
- 基本、メンバ関数、コンストラクタ、private、デストラクタ
- クラスの本領
- 継承、オーバライド、仮想関数
- ファイルとストリーム
- ファイル操作、ファイルポインタ、名前空間
- テンプレート
- 関数テンプレート、クラステンプレート、vector
- エラー処理と例外
- goto、例外
- もっと高く
- 静的メンバ変数、メンバ定数、テンポラリオブジェクト
- もっともっと高く
- ビット操作、インライン関数、シノニム、マクロ、モードチェンジ
- もっと深く
- 多重継承、仮想継承、インタフェース、関数ポインタ
- もっともっと深く
- ショートサーキット、#if、mainの戻り値、コマンドライン引数
- データ構造
- 単方向・双方向リスト、イテレータ、スタック・キュー、再帰関数、ツリー、2分探索木、ハッシュ
- C++の落ち穂拾い
- 共用体、無名構造体、ビットフィールド、可変長配列メンバ
Backbone.js アプリのモジュール化
Organizing your application using Modules (require.js)
require.jsでBackboneのView,Model,Routerやらを分けたい場合
underscore.js v1.2.1を使っていると動かないので
若干変えてみました。
Nginx on Ubuntu 11.04
http://wiki.nginx.org/Nginx-init-ubuntu で公開されているInit Scriptが11.04では動かなかった。
openFrameworks 入門#01 install ~ Hello World
openFrameworks http://www.openframeworks.cc/
openFrameworks is an open source C++ toolkit for creative coding.
1. download
2. 準備
以下、v0.062 + Mac OSX 10.6 + Xcode4環境です。
プロジェクトテンプレートをインストール
Xcodeが起動している場合には、終了しxcode templates/Project Templates/openFrameworksを
Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/ に配置します。
% mv xcode\ templates/Project\ Templates/openFrameworks/ ~/Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/.
Xcodeを起動すると新規プロジェクト作成時にテンプレートを選べるようになるらしいですが
Xcode4ではテンプレートフォーマットが異なるので使えないぽい。
ので、結局 "apps/examples/emptyExample"をコピーして使うことにします。
3.Hello World!
文字列を描画するにはdrawStringという関数を使うらしいので、apps/examples/fontsExampleを参考にhelloWorld.h/helloWorld.cpp/main.cppを編集
helloWorld.h
#ifndef _HELLO_WORLD #define _HELLO_WORLD #include "ofMain.h" class helloWorld : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed (int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); ofTrueTypeFont myriad; }; #endif
helloWorld.cpp
void helloWorld::setup(){ myriad.loadFont("MyriadWebPro.ttf", 32); ofBackground(255, 255, 255); } void helloWorld::draw(){ ofSetColor(0, 0, 0); myriad.drawString("Hello World!", 130, 155); }
main.cpp
#include "ofMain.h" #include "helloWorld.h" #include "ofAppGlutWindow.h" //======================================================================== int main( ){ ofAppGlutWindow window; ofSetupOpenGL(&window, 500,310, OF_WINDOW); // <-------- setup the GL context // this kicks off the running of my app // can be OF_WINDOW or OF_FULLSCREEN // pass in width and height too: ofRunApp( new helloWorld()); }
使用するフォントをhelloWorld/bin/data以下にコピー
% cp /Library/Fonts/MyriadWebPro.ttf ./helloWorld/bin/data/.
Hello World!をいじってみる
キー入力によって文字色を変える
r = 赤、g = 緑、b = 青のように文字色を変えてみる。初期文字色は白
helloWorld.cpp
#ifndef _HELLO_WORLD #define _HELLO_WORLD #include "ofMain.h" class helloWorld : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed (int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); ofTrueTypeFont myriad; int color; }; #endif
helloWorld.h
void helloWorld::setup(){ myriad.loadFont("MyriadWebPro.ttf", 32); ofBackground(255, 255, 255); color = 0xffffff; } void helloWorld::draw(){ ofSetColor(color); myriad.drawString("Hello World!", 130, 155); } void helloWorld::keyPressed(int key){ if(key == 'r') { color = 0xff0000; } else if(key == 'g') { color = 0x00ff00; } else if(key == 'b') { color = 0x0000ff; } }
ドラッグで動かす
emptyExampleからコピーすると、.cppファイルに予めイベントハンドラが定義されているのであっさり作れる(雑ですが)
helloWorld.h
#ifndef _HELLO_WORLD #define _HELLO_WORLD #include "ofMain.h" class helloWorld : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed (int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void windowResized(int w, int h); ofTrueTypeFont myriad; int posX; int posY; }; #endif
helloWorld.cpp
void helloWorld::setup(){ myriad.loadFont("MyriadWebPro.ttf", 32); ofBackground(255, 255, 255); posX = 130; posY = 155; } void helloWorld::draw(){ ofSetColor(0x000000); myriad.drawString("Hello World!", posX, posY); } void helloWorld::mouseDragged(int x, int y, int button){ posX = x - 110; posY = y; }