タグ別アーカイブ: 勉強会

関西Ruby会議に行ってきた


話を聞いていたから、ほとんどメモはなかった。
すごいざっくりとした感じ。。
久々にこういう大きめのカンファレンスに出て、気持ち的なモチベーションは上がった!!

関西Ruby会議2017

フリーソフトウェア開発

Rubygem開発の流儀

‘何か考えて形にしてリリースする’ ということにハードルがある

  • 困っていることを正確に把握する
    • なんのせいで不便になっているのか
  • 開発に関わる手間が少ない方がいい
  • 運用コストが低い方がいい
  • 原動力
    • 日常の怒りや不満を言語化すること
    • 何がツライのかを説明できること
  • 引き出しを増やすこと
    • 頭のインデックスに引っ掛けるようにする
    • リファレンスマニュアル
    • 抽象化にはデザパタの知識は役に立つ
    • 既存のソースコードからパクる(ライセンスは確認)

CoderDojoを支えるRailsCMS活用事例

CMSのツールとしてよさそうだなぁー

18年でRubyから学んだこと

伽藍とバザール

Scala関西ビギナーズ 第1回 に参加しました!


前から気になっていたプログラミング言語 scala を勉強してみようということで参加してきました。
初心者向けということで、言語の特色や関数型言語の説明の後にはProject Euler (プロジェクトオイラー)という数学の問題サイトをもとにScalaに触れ合って行く感じの勉強会でした。やっぱり、勉強会で実際に実装するのは楽しかった!!!!

Scala関西ビギナーズ 第1回
開催日:2012年12月22日(土)


セッション中のメモ

  • イミュータブル(状態を変えないこと)を重要視している・・・変数(var)よりも定数(val)を

  • メソッドの引数の書き方が特殊。
    以下の2つのメソッドは同じ意味のメソッド。
    引数の2つあることを表す.カッコで引数を区切ることが出来る。

def hogeList(num: Int)(limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

def HogeList(num: Int, limit: Int): List[Int] = {
    println(num + limit)
    return List(num, limit)
}

お役立ちサイト
Courser(英語)
Scala Cookbook
hishidamaさんのブログ


ScalaのVim環境

実際にScalaを書いてみようということで、始める前の作業として、、
コンパイル言語でも僕の場合、IDEを使う程でもない時はVimを使うようにしています。まずはVimの環境ということで、シンタックスカラーと補完の設定を入れてみました。

  • Vim Scala統合環境の構築
    vim , scalaの統合環境として、vim-scala というプラグインを入れました。
vimrcに以下の内容を定義
% vim ~/.vimrc
Bundle 'derekwyatt/vim-scala'


インストールを実行
% vim 
:BundleInstall


Project Eulerの第一問を解いてみました

Project Eulerの日本語化されたサイトもあります!
Project Euler 日本語

  • 第一問
    2通りのやり方をかいてみました。
    Scalaでforループを使う方法、Rangeオブジェクトを操作する方法。
    この場合も2つ目のやり方が完結で、直感的で分かりやすいですねー

大阪Node学園 四時限目に参加した-


またまた、参加してから数週間たってしまいましたが、参加した記録を残しておきます!
前回の三時限目からちょうど1年ぶりぐらいの開催でした。
ただ、感想としては、、、とてもおもしろかった!!!

大阪Node学園 四時限目
開催日:2012/11/24(土)

内容としては、以下の様な流れでした!

・テストについて
・実務での実例(Slidrsについて)
・yeomanについて
・東京Node学園祭参加レポート


テストについて

@craftgearさん
サーバサイドのテストはフレームワークの紹介程度であとはクライアントサイドのブラウザテストの紹介でした。個人的にもブラウザのテストって、難しいなーと思っていたのでフレームワークの使い方などとてもわかり易かった。testacularがよさそうなのと、MVCフレームワークも色々出ているけどangular.js がよさそうだなと思った。

【サーバサイド】
テストフレームワーク:mocha, expect.js(chai.js)

【ブラウザテスト】
testacular (node 0.8 over)
Angular.jsを採用している

Testem (node 0.6 over)
実行結果をブラウザで表示できる

Angular.jsの機能テスト(e2eテスト (End to End)のテスト)が使いやすい
Angular_scenario.js(Angular.jsに同梱されている)

angular.js の実装例で用意されてる機能テスト(e2e)参考
https://github.com/angular/angular-phonecat
https://github.com/angular/angular-seed


実務での実例(Slidrsについて)

@kumatchさん スライド資料

Nodeの利用したサービス(スライド共有サーービス)での環境構築から実際の中身の実装までの結構細かい内容を説明してくれた。実際のサービスで使用している例だったので、Nodeを使う上でのnginxの設定方法やNodeのデーモン化など、本番運用でのキーポイントをいくつも挙げていただき、がとても参考になった。

【nginxの設定】

  • try_files
    (メンテナンスページなどへの切り替え)
  • X-Accel-Redirect
    (大きなファイルをユーザへダウンロードさせる時などはnodeがシングルスレッドなのでnode自身がファイル転送でロックされるのを防ぐため、ファイルを生成したあとはnginxへレスポンスを返させる)

【node.jsのプロセスの管理】
・supervisord
pythonで作られたもの。簡単に利用できる!!
※自分はPerlで利用するときは「daemontools」を使ってるなー

【アプリケーションはexpress3 で開発】
2.x -> 3.x マイグレーション情報

【Redisを利用】
キャッシュなどの保持に使っている

【MongoDBを利用】
データストレージとして使用している。
monkを使っている(MongDBを簡単に叩く時に便利な簡易的なツール)
mongooseではない

【クライアントサイド】
テンプレートエンジン:jade
クライアントJSライブラリ:knockout.js

依存するモジュールも解決できる
Node/AMD (サーバ/クライアント) 共通化モジュールを書く
AMD (Asynchronous Module Definition) は、Javascript のコードをモジュールとして定義して、非同期ないし遅延ロードするための仕組みです。

【Node,ExpressのTips】
●expressのresponseオブジェクトを拡張できる

    app.response.send401 = function (realm) {...};

●initialize function

【route.js】
module.exports = function(myapp) {
    var routes = {
        index: function(req, res, next) {...}
    };
    return routes;
}
【app.js】
var routes = require('./routes')(myapp);
app.get('/', routes.index);

●ガーベジコレクション
node.jsのガーベジコレクション 処理が落ち着いた段階でGCが走る。(アクセスが終わって数秒後に)

●nodeの起動オプションで、任意のタイミングでガーベジコレクションを発生させることが出来る

起動する時に以下のオプションをつける
% node --nouse_idle_notificatio --expose_gc app.jp
実際にGCをかけるときはプログラム上で以下のようにする.
global.gc();

http://devjar.me/post/22886448979/manually-run-gc-in-node-js

【node.jsのメモリ調査ツール】
node-memwatch

【おすすめ本】
「RESTful Webサービス」 オライリーの本
「Node.js入門」


YEOMANの紹介

yeoman公式
yeomanのソース

クライアントサイドのテスト/ビルドツール
railsのような機能がある.

強力なscaffolding
cofeescript sass compass を自動でコンパイルする
構文チェック(jshintを使った構文チェック)
画像最適化
自由なテンプレート
自動リロード(ファイルの変更を監視HTTPサーバの自動うでリロード)grunt.js
パッケージ管理(Twitter Bower)


東京Node学園祭参加レポート

この報告会の内容がいつも大阪Node学園で楽しみ。。
今回の東京Node学園祭は特にホームページを見てもわかるようにすごい豪華なメンツ。
Ustreamのビデオとスライドの資料もあるので、今後見てみようと思う!

DevLOVE関西2012Drive へ参加した


ちょっと遅くなったのですが、DevLOVE関西2012Driveに参加してきたので、メモったことやその都度思ったことをまとめてみたいと思います。

「開発現場を、駆動せよ。」
というサブタイトルに引きつけられて、DevLoveに初めて参加しました。
基本的には、今興味のあることとして技術部門のセッションを聞いてきました!
開催日:2012年11月10日(土)


乙女ゲーを支える技術 – play2.0 + Scala の開発事例 –

粕谷さん(@daiksy)
利用技術:scala、Play2.0、Squery、MySQL、Git

基本的にはScalaでソーシャルゲームを開発したという内容で、Scalaは個人的に興味深々の分野で内容はとてもおもしろかった。
ScalaでWebアプリを作成する時のWebフレームワークはPlayフレームワークの1択とのことでした。

・始業前勉強会を行った
コップ本論読(Scalaの本) 
scala,Gitなど初めて使用する技術だらけだったので、朝の始業前にメンバーで勉強会をやっていたとのことです。

・一部scalaの書き方
「var」 再代入OK
「val」 再代入NG(再代入NGってのが関数型っぽい)

if文も関数なので値を返す。
以下のようにしてif文の条件でマッチしたらtest_valueという文字列を返す。

val huga :String = if (hoge>0) { "test_value" }

保守はしやすい
コード量が減り、見通しが良い(少ないコードのほうが保守しやすくなる)

【感想】
朝にチームで勉強会していたっていうところがいいなーと思った。
自分の現場でもこういう部分は取り入れていけたらいいなーと思う。


CIの何か

@kiy0taka さん

JenkinsのJobが遅くなってきた時の対処法

−パイプラインを使う
Build Pipeline Plugin
・一連で動作させていたjobを分割する (チェックアウト・コンパイル、テスト、チェックスタイル、findbugs)
チェックアウト・コンパイルのjob、テストのjob、チェックスタイルのjob、findbugsのjobそれらを
Linuxのパイプラインでつなぐようにjenkinsを実行する
・(重要)1個目のチェックアウトでビルドしたリビジョンをその他のjobでも使用するようにする。
取ってきたリビジョンをアーカイブする。Clone Workspace SCM Plugin

Promoted Builds Plugin
・buildのチェックを可視化する。各ビルドを総合して成功している場合はスターを付ける。
(ビルド、テストに依存関係をもたせられるってことかな?! 依存する全てが成功していたらジョブの成功(チェックOK)とする)

【感想】
Jenkinsは個人的にまだ使っているわけではないけど、今のプロジェクトで一部使用しているので、いろんなプラグインがあってとても参考になったー!導入できるものとかを精査してちゃんと使っていこう。


なぜ私はソニックガーデンのプログラマに転身できたのか?

@JunichiIto77 さん
プログラマーを一生の仕事にしたかった。

【それまでにやっていたこと】
ブログを書いていた
継続的に勉強していた
特定の技術に偏らないようにしていた
どの職場でもそれなりに認められていた
美しいコードが一番と考えていた

【ソニックガーデン採用方針】
半年くらいかける・コードを見る・一緒に働く

【選考期間中にやったことを振り返る】
素早く行動に移した
毎週必ず進捗報告した(出来たという報告だけでなく、全てにおいて報告した)
「郷に入れば郷に従え」を意識した。(ソニックガーデンの流儀に合わせるように努力した)

【感想】
プログラマとしての考え方はとても近いものがあったなー
共感出来る所がとても多かった。そして、これまでに300冊以上の本を読んできたっていうのはすごい尊敬できるー


まとめ

最後のセッションは別の予定があって参加できなかったのですが、こういうアジャイル開発の大きなイベントは初めての参加だったので、とても刺激的だった。
もっと自分も本を読んだり、コード書いたりしていこうと思う。

もっと、もっと、!!!

XP祭関西2012の自分なりのまとめ


先日の2012/4/7にXP祭関西2012へ参加してきた!そのまとめとなります。

XP祭関西2012 ~技術指向で行こう!~
Togetter

アジャイルやXPなどその辺りの本を最初に読み始めたのがちょうど1年半くらい前かな。。それから色々とWebや本などで使われている用語やキーワードなどは理解しはじめてきているかなぁぁと思う。しかし、登壇されているスクラムマスターの方の話を聞くとすごいなぁと。。。

今回の勉強会では初めてXmindを使ってメモを取ってみた。いやーXmindはあんまり使い心地がよくないです。。すぐ落ちるのは自分だけか。。?今度はiMindMapのフリー版でやってみるか!?他にもいいマインドマップツールはあるのかなぁ?!フリーで♪

では、内容へ!一つ目から

「PIVOTALとSCALAとRUBY ON RAILS」川端 光義氏 /アジャイルウェア 代表

PivotalとScalaについては主に実例の話でした。そのなかでもPivotalTrackerはとてもわかりやすいXPのツールでいいと思いました!!基本的に画面遷移もなくストーリ(チケット)の一覧が見れたり、登録できたりします。んで無料会員登録して使っています。しかし、60日で期限が切れる。。。やっぱりお金を払わないといけないか。こういうものを勉強がてら作ってみようか。。XPの勉強とプログラミングの勉強2つができる!とりあえずチケット管理の部分のみを作るとかしてみようかな。あっそれを作るためにタスク管理をPivotalでやるとか

あとはRubyのデモをやってもらいました。モデルのスケルトン生成から音楽ファイルのアップロードで再生するまでの内容でした。

簡単なようにでしたが、いろいろ内容が詰まっていました。小さく小さく作る、それぞれのモデルを作ってからリレーションを張る など

 

 

「大規模なゲーム開発をスクラムで」田口 昌宏氏 /株式会社ディンプス

ゲーム開発の現場でスクラムを導入した時の事例でした。Webのソーシャルゲームなどは現場も少し見たりはしてきましたが、某有名な格闘ゲームが作られていく様子をめちゃくちゃ詳しく解説して頂きました。ゲームプログラミングってやった事無いですが、やってみたいと思いました。印象的だったのが「ゲーム開発でのテストの書き方を教えて下さい」と言っていたところですねー。やっぱりゲーム開発はインタラクティブな動きが多いので期待値を評価するテストを書くのは難しいのかなぁという感じでした。

 

 

「継続的インテグレーション環境を作れ!(JENKINS編)」神谷 厚輝氏 /株式会社ブレイン

主にJenkinsの導入事例についてでした。やはりJenkinsすごいなーという感じがします。Jenkinsを覚えるのは簡単!Jenkinsを使いこなすのは簡単!

ただ、Jenkinsを使うためにShellスクリプトを書くことやJavaだとAntやMaven、Junitなどその他、Jenkinsにお任せするタスクを設定するために事前知識が必要だ!とおっしゃっていてまさにそのとおりだなと思います。自分自身はまずテスト駆動を意識して行きたいと思いました。テストをきちんと書けるようになりたい!!!!!

継続的インテグレーションJenkins

 

 

以上です。こういうものに参加すると知らなかったことを幾つも気づけるし、刺激になるのでいいですねーということと、自分自身も早くちゃんと仕事につかないといけないのかなぁとかも思いました。まぁまだやりたい用にできる年齢かなとも言えるので、もっとやりたいようにやっていこう。と言いつつ、

プログラムをもっと効率良く綺麗に、そしてスピード感をもっと書けるようになりたい!!