読者です 読者をやめる 読者になる 読者になる

node.js+TypeScript で頑張るくらいならGoでいいじゃん - Revel編

golang programming

前回の記事で、golangとMaria(MySQL)のインストールを行いました。
今回はフルスタックフレームワークRevelをインストールし、雛形を動かしてみます。

インストール

$ go get github.com/revel/revel

前回の記事でPATHを通していれば、次のコマンドで確認することができます。

$ revel
~
~ revel! http://revel.github.io
~
usage: revel command [arguments]

The commands are:

    new         create a skeleton Revel application
    run         run a Revel application
    build       build a Revel application (e.g. for deployment)
    package     package a Revel application (e.g. for deployment)
    clean       clean a Revel application's temp files
    test        run all tests from the command-line

Use "revel help [command]" for more information.

雛形作成

$ revel new test/webapp

実行

$ revel run test/webapp
~
~ revel! http://revel.github.io
~
INFO  2015/10/09 02:49:12 revel.go:329: Loaded module testrunner
INFO  2015/10/09 02:49:12 revel.go:329: Loaded module static
INFO  2015/10/09 02:49:12 revel.go:206: Initialized Revel v0.12.0 (2015-03-25) for >= go1.3
INFO  2015/10/09 02:49:12 run.go:57: Running webapp (test/webapp) in dev mode
INFO  2015/10/09 02:49:12 harness.go:165: Listening on :9000

これでhttp://localhost:9000にアクセスすれば、次の画面が表示されるはずです。 f:id:kazu1107:20151009025130p:plain

すごい簡単! 短いですが、今日はここまで。。

cinder v0.9.0 リリースまとめ

programming cinder

1年2ヶ月ぶりの新バージョンのリリースです。

今回はマイナーバージョンアップということもあり、破壊的修正が数多くなされています。
特に大きな変更だと思うのは、ベクトルなどの数学ライブラリとしてglmが採用され、ci::Vec2, ci::Vec3を廃止代わりに、glm::vec2, glm::vec3に変更されました。
よって、v0.8.6以前からバージョンアップは一筋縄にはいかなそうです。

  • OpenGL 4.5 , 4.1をサポート。(iOS ES2 , ES3をサポート)
  • WinRT、Windows環境でOpenGLES3相当の機能をDirectXにエミュレートするバックエンド機能
  • 1Dテクスチャー、3Dテクスチャー、キューブマップテクスチャー、キューブマップFBO、シェーダ機能、PBOサポート、KTX圧縮テクスチャサポート など...
  • ドキュメント一新

サンプルとして付属するアプリケーションのスクリーンショットをまとめました。
(一部、私の環境で実行できなかったアプリもあります。)

Root

ArcballDemo :球体マッピング f:id:kazu1107:20151007013916p:plain BasicApp :基本的なアプリケーションの雛形 f:id:kazu1107:20151007013917p:plain BasicAppMultiWindow :マルチウィンドウ f:id:kazu1107:20151007013918p:plain bezierPath ベジェ曲線 f:id:kazu1107:20151007013919p:plain BezierPathIteration ベジェ曲線イテレーション f:id:kazu1107:20151007013920p:plain BSpline :Bスプライサンプル f:id:kazu1107:20151007013921p:plain CairoBasic Cairoを使った描画サンプル f:id:kazu1107:20151007013922p:plain CameraPersp.png :カメラ位置関係を視覚的に表現 f:id:kazu1107:20151007013923p:plain CaptureBasic Webカメラのキャプチャー f:id:kazu1107:20151007013924p:plain CaptureCube Webカメラからキャプチャーしたサーフェイスをポリゴンにテクスチャーとして貼り付け f:id:kazu1107:20151007013925p:plain ClipboardBasic クリップボードの利用 f:id:kazu1107:20151007013926p:plain Compass :コンパス利用 ※iOS限定

ConvexHull :凸平面ポリゴンの作成サンプル f:id:kazu1107:20151007013927p:plain Earthquake 地震マップ f:id:kazu1107:20151007013928p:plain EaseGallery :イージングサンプル f:id:kazu1107:20151007013929p:plain Extrude :? ※実行失敗

FillingGears ? f:id:kazu1107:20151007013930p:plain flickrTest flickrから画像をダウンロードして表示(XML、画像ファイルのダウンロード) f:id:kazu1107:20151007013931p:plain FlickrTestMultithreaded flickerから画像をダウンロードして表示(ダウンロード用のスレッドを利用) f:id:kazu1107:20151007013932p:plain FontSample :フォントデータからパスデータを取得 f:id:kazu1107:20151007013933p:plain FrustumCulling.png :? f:id:kazu1107:20151007013934p:plain Geometory :Geometoryサンプル f:id:kazu1107:20151007013935p:plain ImageFileBasic :画像ファイルを描画 f:id:kazu1107:20151007013936p:plain ImageHeightField :画像ファイルの色から立体表示 f:id:kazu1107:20151007013937p:plain iosKeyboard iOSキーボードサンプル ※実行失敗

iosNativeControls iOSネイティブコントロールの利用サンプル ※実行失敗

Kaleidoscope :万華鏡風エフェクト f:id:kazu1107:20151007013938p:plain LocationManager :位置情報取得サンプル f:id:kazu1107:20151007013939p:plain Logging :ログ出力サンプル f:id:kazu1107:20151007013940p:plain MandelbrotGLSL :GLSLを利用したフラクタル f:id:kazu1107:20151007013941p:plain MotionBasic :? ※実行失敗

MultiTouchBasic :マルチタッチサンプル(タッチデバイスでない場合、クリック判定) f:id:kazu1107:20151007013942p:plain ParamsBasic :パラメータ設定UIサンプル f:id:kazu1107:20151007013943p:plain PerlinTest :? f:id:kazu1107:20151007013944p:plain Picking3D :? f:id:kazu1107:20151007013945p:plain PolygonBoolean :ブール演算 f:id:kazu1107:20151007013946p:plain QuaternionAccum :アニメーションサンプル f:id:kazu1107:20151007013947p:plain QuickTimeAdvanced QuickTimeビデオ再生 f:id:kazu1107:20151007013948p:plain QuickTimeAvfWriter QuickTime画面録画サンプル f:id:kazu1107:20151007013949p:plain QuickTimeBasic QuickTimeビデオ再生 f:id:kazu1107:20151007013950p:plain QuickTimeIteration QuickTimeビデオ再生 f:id:kazu1107:20151007013951p:plain RDiffusion :? f:id:kazu1107:20151007013952p:plain Renderer2dBasic :2D描画サンプル f:id:kazu1107:20151007013953p:plain RetinaSample Retinaディスプレイ対応サンプル f:id:kazu1107:20151007013954p:plain SaveImage :画像保存 f:id:kazu1107:20151007013955p:plain SerialCommunication :? ※実行失敗

slerpBasic :立体曲線 f:id:kazu1107:20151007013956p:plain StereoscopicRendering :ステレオスコープ描画サンプル f:id:kazu1107:20151007013957p:plain SurfaceBasic :サーフェイス基礎 f:id:kazu1107:20151007013958p:plain TextBox :テキストボックス f:id:kazu1107:20151007013959p:plain TextTe :フォントをテクスチャに描画 f:id:kazu1107:20151007014000p:plain TextureFo :フォントをテクスチャに描画 f:id:kazu1107:20151007014001p:plain Triangulation :パスを三角分割 f:id:kazu1107:20151007014002p:plain Tubular :チューブ描画 f:id:kazu1107:20151007014003p:plain VoronoiGpu :GLSLボロノイ図描画サンプル f:id:kazu1107:20151007014004p:plain Wisteria :花っぽい描画 f:id:kazu1107:20151007014005p:plain

Audio

BufferPlayer f:id:kazu1107:20151007021527p:plain DelayFeedback f:id:kazu1107:20151007021528p:plain InputAnalyzer f:id:kazu1107:20151007021529p:plain MultiChannelOutput f:id:kazu1107:20151007021530p:plain NodeAdvanced f:id:kazu1107:20151007021531p:plain NodeBasic f:id:kazu1107:20151007021532p:plain NodeSubclassing f:id:kazu1107:20151007021533p:plain VoiceBasic f:id:kazu1107:20151007021534p:plain VoiceBasicProcessing f:id:kazu1107:20151007021535p:plain

OpenGL

ClothSimulation f:id:kazu1107:20151007021941p:plain Cube f:id:kazu1107:20151007021942p:plain CubeMapping f:id:kazu1107:20151007021943p:plain DeferredShading f:id:kazu1107:20151007021944p:plain DeferredShadingAdvanced f:id:kazu1107:20151007021945p:plain DynamicCubeMapping f:id:kazu1107:20151007021946p:plain FboBasic f:id:kazu1107:20151007021947p:plain FboMultipleRenderTargets f:id:kazu1107:20151007021948p:plain GeometryShaderBasic f:id:kazu1107:20151007021949p:plain HighDynamicRange f:id:kazu1107:20151007021950p:plain ImmediateMode f:id:kazu1107:20151007021951p:plain InstancedTeapots f:id:kazu1107:20151007021952p:plain MipMap f:id:kazu1107:20151007021953p:plain MotionBlurFbo ※ どうもうまく動いてない気がします

f:id:kazu1107:20151007021954p:plain MotionBlurVelocityBuffer f:id:kazu1107:20151007021955p:plain NormalMapping f:id:kazu1107:20151007021956p:plain NormalMappingBasic f:id:kazu1107:20151007021957p:plain NVidiaComputeParticles
※実行失敗(nVidiaグラフィックボードを搭載したPCが必要)

ObjLoader f:id:kazu1107:20151007021958p:plain ParticlesBasic f:id:kazu1107:20151007021959p:plain ParticleSphereCPU f:id:kazu1107:20151007022000p:plain ParticleSphereCS f:id:kazu1107:20151007022001p:plain ParticleSphereGPU f:id:kazu1107:20151007022002p:plain PBOReadBack f:id:kazu1107:20151007022003p:plain PickingFBO f:id:kazu1107:20151007022004p:plain PostProcessingAA f:id:kazu1107:20151007022005p:plain ShadowMapping f:id:kazu1107:20151007022006p:plain ShadowMappingBasic f:id:kazu1107:20151007022007p:plain StencilReflection f:id:kazu1107:20151007022008p:plain SuperformulaGPU f:id:kazu1107:20151007022009p:plain TessellationBasic f:id:kazu1107:20151007022010p:plain TessellationBezier f:id:kazu1107:20151007022011p:plain TransformFeedbackSmokeParticles f:id:kazu1107:20151007022012p:plain VboMesh f:id:kazu1107:20151007022013p:plain

SVG

AnimatedReveal f:id:kazu1107:20151007022816p:plain EuroMap
※ 実行失敗

GoodNightMorning f:id:kazu1107:20151007022817p:plain SimpleViewer f:id:kazu1107:20151007022818p:plain

Timeline

BasicAppendTween f:id:kazu1107:20151007023119p:plain BasicTween f:id:kazu1107:20151007023120p:plain CustomCallback f:id:kazu1107:20151007023121p:plain CustomLeap f:id:kazu1107:20151007023122p:plain DragTween f:id:kazu1107:20151007023123p:plain ImageAccordion f:id:kazu1107:20151007023124p:plain PaletteBrowser f:id:kazu1107:20151007023125p:plain TextInputTween f:id:kazu1107:20151007023126p:plain VisualDictionary f:id:kazu1107:20151007023127p:plain

サンプルもずいぶん増えたので、助かりますね!
ではまた!
https://libcinder.org/

node.js+TypeScript で頑張るくらいならGoでいいじゃん

programming golang

ずいぶんご無沙汰になってしまいました。

仕事でJavaScriptに触れておりますが、もともとはC/C++で育ってきた身ゆえ、型にうるさい言語が好きです。 なのでTypeScriptで組むことが多いです。

最近になってサーバーサイドを組む相談が増えてきたこともあり、node.jsを試しておりましたが、素のJavaScriptは型処理や引数の曖昧さに嫌気がさし、サーバーサイドでTypeScriptを使う方法を模索。

しかし、なかなか面倒くさい。 Gulpをサーバーサイドで使うのにも、ためらいがあります。

結局コンパイルしてるのだから、いっそコンパイル言語つかってよくない?ということでGoをつかってみたところ、node.jsばりに簡単にHTTPサーバが立てられることに感動し、Revelを使えばスクリプト言語と変わらないレベルで即結果がみれるところで一気に恋に落ちた次第です。

そんなわけで、Mac環境でGolang + Revel + MariaDB(MySQL)環境を構築してみました。

homebrewでGolang セットアップ

$ brew install go --cross-compile-all

--cross-compile-allコマンドをつけることで、後々デプロイする場面でクロスコンパイルが手間なく行えます。

homebrew 設定時に/usr/local/bin/にパスを通していれば、すでにgoコマンドの呼び出しができる状態です。 そのほかにGo Toolsは任意の場所にライブラリなどダウンロードしてくれるエコシステムがあります。(node.jsのnpmと同じですね)
ビルド先も含まれるので一緒にPathを通します。

export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH

MariaDBのセットアップ

$ brew install mariadb

(省略)
To have launchd start mariadb at login:
  ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents
Then to load mariadb now:
  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
Or, if you don't want/need launchctl, you can just run:
  mysql.server start
==> Summary
(省略)

Mac起動時にDBも起動するよう、launchctlに登録します。 インストール時のメッセージとして出てきたとおりに、以下を実行します

$ ln -sfv /usr/local/opt/mariadb/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist

ためしにコマンドを叩いてみます

$ mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.0.21-MariaDB Homebrew

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

コマンド受付状態になればOKですので、exitコマンドで抜けます。

Maria DB初期設定

基本的なセキュリティ設定を行うため以下のコマンドを実行

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 

現在のrootパスワードを聞かれますが、未設定なので、そのままEnter。

Set root password? [Y/n]
New password: 
Re-enter new password: 

rootパスワードの設定を行うか聞かれるので、そのままEnter (Yes実行) Yesの場合、新しいパスワードを2度入力する。

Remove anonymous users? [Y/n] 

Anonymousログインをできなくする場合はそのままEnter (Yes実行)

Disallow root login remotely? [Y/n] 

リモート環境でrootログインできなくする場合はそのままEnter (Yes実行) 今回はローカル環境の構築なのでYesを選択。

Remove test database and access to it? [Y/n] 

初期設定で入ってるtestデータベースを削除する場合はそのままEnter (Yes実行)

Reload privilege tables now? [Y/n] 

これまでの設定を反映させる場合はそのままEnter (Yes実行)

Thanks for using MariaDB!

ここまでメッセージが到達すれば設定完了。

とりあえず、今日はここまで。。

github pagesを試してみた

f:id:kazu1107:20141028042035p:plain

GitHub Pagesを試してみた。 githubさえ登録していれば、そのほか何もすることなしにリポジトリ毎のページが作れる。 命名さえちゃんとすれば、username.github.ioの形のページが作れる! これは簡単すぎる・・・!

Privateな環境が構築できるなら、こんな環境で仕事したいですね。