アウトプットの大事さ

久しぶりの投稿です。
最近、職種が変わり、エンジニア職からエンジニアを育てる教育担当者になりました。

今の会社では、社員教育にかなり力を入れており、研修専門施設を持っています。
私は現在、その施設でファームウェア分野の技術講師をしています。
まだ、エンジニアとして10年も満たないキャリアですが新卒や若手に様々なことを教えています。


講師となってもう1年半が経過し、教えながらも新しい知識を集めるように心がけてきました。
しかしながら、現場での業務とは違い得た知識を試せずにいました。
まあ、ただの怠慢なんですけどね。。。

とはいえ、このままではエンジニアとして腐ってしまうと思っていたわけです。
そこで「アウトプット大全」という本を読み、アウトプットの大事さを改めて感じ、再びブログを書き始めました。

これからはぼちぼちアウトプットのためにブログ書きます!!


教育者として、新卒や20代前半の若手を相手にしていると色々と思うところがたくさん出てきます。
なんで、相談しないんだ!
なんで、報告しないんだ!
なんで、確認しないんだ!
などなど、愚痴っぽく聞こえますが、おそらく様々な現場で同じことが起きている思います。

まだ、私自身の考えを整理できているわけでは無いですが、そこには理由や原因があるはずです。
これらの違和感や疑問はジェネレーションギャップとも言われます。
ギャップは確かに存在し、特に今の50代以上と40代以下には大きな差を感じます。

色々な先輩方とお話をすると、「責任の取り方」や「お金になるか?」、「失敗しても死なない」などの言葉を聞きます。
どれも言葉にすると良くどこかのオッさんが言ってそうなセリフですが、その背景や具体的なエピソードを聞くと重みが違いますね。

この話を

悩む。。。 WindowsでRedmine Gitサーバ認証統合

Windows上でRedmineを立ち上げ、同マシン上でGitサーバを立ち上げる。
Gitの認証方法はなんでもいいけど、Redmineと統合した認証を行うこと。

Linuxベースならいくらでも情報があるし、手順も簡単なんだけども、Windowsになると急にハードモードになる。。。

MFC VC++でスレッド処理

仕事でスレッド処理を追加することになったけども、VC++で経験がなかったので備忘録ついでに書いておきます。

今回の要件は
 ・メイン処理はOnTimerの中で動く。
 ・OnTimerは100ミリ秒で動き続ける。
 ・テキストファイルにログを随時書き込みしたい。
  (途中で終了してもログを保存したい。)
 ・書き出し処理でメイン処理が停止しないようにスレッド化して対応する。
といったところでしょうか。

サンプルとして作成したアプリは次のようなものです。
 ・OnTimerで現在時刻をエディットボックスに追加していく。
 ・追加した文字列をテキストファイルに追記する。

まずはメイン処理となるOnTimerのソースから


void CThreadSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
// 現在時刻を取得
SYSTEMTIME systime;
GetSystemTime(&systime);
m_writeStr.Format(_T("%04u/%02u/%02u %02u:%02u:%02u:%03u\r\n"),
systime.wYear, systime.wMonth, systime.wDay,
systime.wHour, systime.wMinute, systime.wSecond,
systime.wMilliseconds);

// テキストに描画
m_counter.SetWindowText(m_writeStr);

// エディットボックスに追記
int nLen = m_edit.GetWindowTextLength();
m_edit.SetFocus();
m_edit.SetSel(nLen, nLen);
m_edit.ReplaceSel(m_writeStr);

// 配列に時刻文字列を追加
m_strArr.push_back(m_writeStr);

// スレッド開始
AfxBeginThread(&CThreadSampleDlg::MyThreadProc, (LPVOID)this, THREAD_PRIORITY_IDLE);

CDialogEx::OnTimer(nIDEvent);
}


次にスレッド処理部のソース


UINT CThreadSampleDlg::MyThreadProc(LPVOID pParam)
{
CThreadSampleDlg* pThreadSample = (CThreadSampleDlg*)pParam;

CStdioFile csFile;
CString cstr;
int err = 0;

// ファイルオープン&生成
if (!err) {
if (!csFile.Open(_T("Sample.txt"), CFile::modeWrite | CFile::modeNoTruncate | CFile::shareExclusive | CFile::modeCreate)) {
err = 1;
}
}

// 追記処理
if (!err) {
TRY {
// 最終行にポインタを移動
csFile.SeekToEnd();

// 区切り文字列を追記
int logLines = pThreadSample->m_strArr.size();
cstr.Format(_T("----*----*%04u*----*----\r\n"), logLines);
csFile.WriteString(cstr);

// 時刻文字列を追記
for (int i = 0; i < logLines; i++) {
CString line = pThreadSample->m_strArr[i];
csFile.WriteString(line);
}
} CATCH (CFileException, eP) {
err = 1;
} END_CATCH
}

// ファイルクローズ
csFile.Close();

return 0;
}

念のため、ボタンでOnTimerを停止させる処理を追加してあるんですが、
OnTimerを100ミリ秒で動かしているせいなのかボタンを連打しないと停止してくれません。。。

このあたりはまだまだ調査不足というか知識不足ですね。

備忘録。 Redmine, Jenkins, Gitlab, Centos

CentOS 6.4
iso
ftp://ftp.iij.ad.jp/pub/linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso
ftp://ftp.iij.ad.jp/pub/linux/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD2.iso

Desktop install

vmtools install

sudo setting
add this line
# visudo
%takahashi ALL=(ALL) ALL

# yum install screen
http://www.limy.org/program/screen.html

        • *----*----*----*----*----*----*----*----

ruby install

epel install
http://www.tooyama.org/yum-addrepo-epel.html
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

$ sudo yum install --enablerepo=epel make gcc zlib-devel openssl-devel readline-devel ncurses-devel gdbm-devel db4-devel libffi-devel tk-devel libyaml-devel

rvm install
http://morizyun.github.com/blog/rvm-install-centos-ruby-rails/

$ \curl https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer | bash -s stable

add
$ vim .bashrc
source $HOME/.rvm/scripts/rvm

$ reboot now

$ rvm install 1.9.3
$ rvm use 1.9.3 --default
$ rvm list

rvm rubies

=* ruby-1.9.3-p392 [ x86_64 ]

$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]

        • *----*----*----*----*----*----*----*----

Redmine install

http://blog.redmine.jp/articles/2_3/installation_centos/
$ sudo vim /etc/sysconfig/selinux
SELINUX=enforcing

SELINUX=disabled

$ reboot

$ sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
$ service iptables restart

$ sudo yum install mysql-server mysql-devel httpd httpd-devel ImageMagick ImageMagick-devel ipa-pgothic-fonts

MySQL Setup
$ sudo yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel
$ sudo vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8

# 任意設定
innodb_file_per_table
query-cache-size=16M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set=utf8

$ sudo service mysqld start
$ sudo chkconfig mysqld on
$ sudo mysql -uroot
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Set root user password and delete amonus user
# mysql -uroot
mysql> use mysql;
mysql> update user set password=password('********') where user = 'root';
mysql> delete from user where user = '';
mysql> flush privileges;
mysql> exit;

Create database and users
# mysql -uroot -p
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to 'user_redmine'@'localhost' identified by '********';
mysql> flush privileges;
mysql> exit;

Install
$ cd /home/user/download/
$ wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
$ tar zxvf redmine-2.3.0.tar.gz
$ su
# mv redmine-2.3.0 /var/lib/redmine
# cd /var/lib/redmine

# cp config/database.yml.example config/database.yml
# vim config/database.yml
production:
adapter: mysql2
database: db_redmine
host: localhost
username: user_redmine
password: "********"
encoding: utf8

# cp config/configuration.yml.example config/configuration.yml
# vim config/configuration.yml
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "localhost"
port: 25
domain: 'redmine.com'

rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf

# bundle install --without development test
# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate


Passenger install
# gem install passenger --no-rdoc --no-ri
# passenger-install-apache2-module
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

LoadModule passenger_module /home/takahashi/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /home/takahashi/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19
PassengerRuby /home/takahashi/.rvm/wrappers/ruby-1.9.3-p392/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

Suppose you have a Rails application in /somewhere. Add a virtual host to your
Apache configuration file and set its DocumentRoot to /somewhere/public:


ServerName www.yourhost.com
# !!! Be sure to point DocumentRoot to 'public'!
DocumentRoot /somewhere/public

# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews

And that's it! You may also want to check the Users Guide for security and
optimization tips, troubleshooting and other useful information:

/home/takahashi/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/doc/Users guide Apache.html

Apache Setup

# vim /etc/httpd/conf/httpd.conf
# Passengerの基本設定。
# passenger-install-apache2-module --snippet を実行して表示される設定を使用。
# 環境によって設定値が異なりますので以下の3行はそのまま転記しないでください。
#

LoadModule passenger_module /home/takahashi/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/ext/apache2/mod_passenger.so
PassengerRoot /home/takahashi/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19
PassengerRuby /home/takahashi/.rvm/wrappers/ruby-1.9.3-p392/ruby

# Passengerが追加するHTTPヘッダを削除するための設定(任意)。
#
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加(任意)。
# 詳しくはPhusion Passenger users guide(http://www.modrails.com/documentation/Users%20guide%20Apache.html)をご覧ください。
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0
# service httpd start
# chkconfig httpd on

Settings for running the Redmine with Passenger on Apache
# chown -R apache:apache /var/lib/redmine
# vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80

ServerName redmine.com
DocumentRoot /var/lib/redmine/public

AllowOverride all
Options -MultiViews


# /etc/init.d/httpd configtest
# /etc/init.d/httpd graceful

if this error

Developers Summit 2013 に参加してきた!【2日目】

Action!
行動するキッカケになればいい


西脇モトアキさん
Microsoft
エバンジェリスト

タイトルは釣りですw
「やれそうなら、やってみろ」
好奇心を無駄にしない

「速さが重要、スピードを身につけろ」
時間の調整はあとからでもなんとかなる

コンシューマのデジタル化

バックエンドの奥行き
両方に手をのばす、引き寄せる

若者の窓離れが激しい
Windows8
デモに向いてる➡タッチフィードバックがある

タブレットは欲しい(want)
マウス&キーボードは必須(need)
スマートデバイスを使うためにはPCが必要

エンタープライズよりコンシューマの方が最先端になってきている
企業の情報システムはショボい
➡自分たちが持っているデバイスやシステムを企業に生かしてない

デモ
windows8PowerPointで資料を作る
SkyDriveで画像をアップロード
FacebookOutLookと連携できる
Office365でブラウザでExcelを編集できる
ホワイトボードと単焦点プロジェクターと赤外線デバイスで編集
Outlookからビデオ会議をしながら、共同で編集
ビジネスアプリケーション(奉行シリーズ)から売上グラフをつくる
photosynthのブラウザ画面を埋め込む

「やってみたいと思うことはやる」
機能ではなく、何ができるかを追求する

Action! エバンジェリスト養成講座



エンバカデロ
高橋知宏

タブレットがノートPCを上回る売上
C++ or Delphiクロスプラットフォーム開発
RAD開発
➡ドラッグ&ドロップで開発する

デモ
OpenGLDirectXで自前で描画しているから可能
2D、3Dが簡単にできる

採用事例
なめこの会社

モバイル向けはUIを自動で最適化

FireMonkeyフレームワーク
実行、デバッグ用ブリッジを経由している

デモ
iPhoneTCP通信するアプリケーション
普通にやりそうなことはコンポーネントが用意されている
3D描画も簡単にできる
デバッグもできる
LLVMアセンブルコードが見れる

コンポーネントを作る
コンポーネントを使う


モバイルファースト再考
UXデザイナー
元々プロダクトデザイナー
AKQA 東京
コンサルタントアプリ開発、イベント運営など

×モバイル向けWebサイト
×スマホ対応
×モバイルアプリ

モバイルファーストとは?
➡モバイル端末を起点に開発を進めること
モバイルオンリーもある

モバイルデザインの原則
・小さな画面の効果的なデザイン
・タッチジェスチャーインタラクション
・デバイスに依存しない画面遷移
・OSに依存した画面遷移
・プラットフォームに依存した画面遷移

MOBILE FIRSTの洋書もある

モバイル制約
・小さい画面
・パフォーマンス
・アクセスする時間と場所

モバイルの可能性
・カメラ
・音楽機能
GPS
ジャイロスコープ
NFC
・ネットワーク
Bluetooth
などなど

「モバイルでできること、できないこと」
「モバイルの特性を活かしたサービス」

コンテンツファースト?
➡プラットフォームに依存しないコンテンツ
➡コンテンツ重視

利点?
閲覧環境を選ばない?
ブラウザに依存しない?
情報構造がシンプル?
データが小さく軽い?
➡現実は違う!

ex)DELTAのアプリ
モバイルの特性を活かしている

エスノグラフィー調査
➡実際のユーザーを観察する
ex)なぜか壁を背にして調べ物をすることが多い

デザイン思考(デザイン シンキング)
➡プロトタイプから実験、検証を行う

ex)中学生向けのアプリを作るために実際に週末の学校を見に行く

モバイルでしか実現できないこと
特性を活かした機能

「書を捨てよ、町へ出よう」
寺山修司

「デスクを捨てよ、モバイルを使おう」
・本当のユーザーを知ろう
・実際にモバイル端末を使い倒そう
・端末は自分で買おう
・モバイル端末を使う日を週4日、最低でも週3日、設定しよう

企業でもモバイルで仕事をする日があったりする
ex)YAHOOとか

参考書
MOBILE FIRST
The Mobile Frontier
➡モバイル向け開発の普遍的なことが多い
モバイル・デザインパターン
オライリー
リサーチデザイン、新100の法則


無償でここまで使えるアドビのWeb制作ツール
轟さん
アドビのデベッロッパーマーケティング

HTML5
勉強してますか?
➡いろんなことができそう
➡生産性は?

Adobe Edg ツール&サービス
今朝アップデート
1.xは無料!!
Edge Animate
HTMLアニメーションツール
タイムラインアニメーション
Javascriptスペニット
アニメーションバナー
既存サイトへのアニメーション追加
デモ バナー作成
CSSのグラデーション、フィルターが使える
警告でIE9に対応していないことを教えてくれる
デモ 既存サイトサイトにアニメーションを追加

事例
押井守 ちまみれマイ・らぶ

Edge Code
簡易コードエディタ
デモ
リアルタイムでHTML、CSSを変更反映する
クイック編集機能でHTMLからCSSへすぐ編集できる
Javascriptでも可能
自分で拡張もできる
5月以降にハッカソンも企画してる
BraketsというOSSエディタを元にしている

Edge Reflow
レスポンシブWebデザイン

情報デザインの壁
➡デバイス、シチュエーションが違う
レイアウトデザインの壁
➡イメージの乖離がある
イテレーションの壁
アジャイルで回すのは厳しい

デモ
Mac版は一回目に起動しませんw
バイスの切り替えが簡単ににできる
チラチラしてるのはPleview版だからですw
実機でもすぐにデバッグできる
まだまだCSSの吐き出しはできないけど
コンセプトやプロトタイプには使えるかも!


人が作るソフトウェア
今、組織パターンを読む意味
和智さん

書籍翻訳
ドメイン駆動開発
実践テスト駆動開発
継続的デリバリー

組織パターンとは
2004年刊行
スクラムアジャイルラクティスのベースとなっている

なぜ今読むべきなのか
パターン言語
スクラムが流行っている
でも、始められる自信はないことが多い
➡3つのロール、4つの儀式、3つの成果物
価値を届けながら実践しなければいけない

じゃあ、どうする?
➡そこでパターン言語!

パターンとは?
・あるコンテキストにおける問題を解決する
上司:スクラムやろう! (コンテキスト)
自分:でも、すぐには難しいですよ(問題)
そこでパターンを使う

パターン言語とは?
パターンを一定の順序で組み合わせる規則
4つのパターン言語

ウォーターフォールアジャイル
プロセスを超えて
コンウェイの法則

人のつながりがソフトウェアを生み出す

Action! :学びを共有しよう!


キネクトから始まったスタートアップ
中村さん
フリーランス
TFSとか

Depthセンサーの動向
センサーの得意、不得意を活かす
例)アミューズメント、仮想試着、空中ディスプレイ、インタラクション(プロジェクションマッピング)

種類
キネクト
PrimeSnse(OpenNI)
SoftKinetic
→指が綺麗に取れる
Intel PCSDK
今年の目玉
Leap(指先)
PrimeSense Capri(小型化)

接触インターフェース
接触インターフェース

モバイルでも使われるかも
ウェアラブルにも

メリット
触らなくてもいい
触れないモノに触れる
デメリット
疲れる
ゴリラ腕
SDKとライブラリの連携は簡単

デモ
touch deginer
プロジェクションマッピング



スタートアップ
全員には進められない

本を書いて、武器が出来た。
震災の経験

はじめの一歩を踏み出そう
を読もう
開発者
マネージャ
スクラムのタイムボックスの考え方で自分を制御できた
経営者
お金
営業
事務→以外と楽しい

メリット
自由な時間
通勤時間ゼロ
子供との時間が増える
家事もできる
デメリット
入金が不安定
保険、年金、税金が高くなる
トラック番号1

遠隔コミュニケーション
→co-meeting
→TFS

Business Model You
パーソナルキャンパス

Action!アウトプットしよう!
ブログは備忘録と思って始めるといい

人脈は自分が何をしているか知っている人達である



アジャイルサムライって当たり前になるのかな?
前説 ショウエイシャ岩切さん
アジャイルの風
1周目 輸入
2周目 和製を実践
3周目 広める→経典が必要

本編
西村直人 永和システムの人

あたりまえって?
→隣のしま、関連会社
現状
アジャイルサムライ もうすぐ2万部
→クグると97万件
仕事
アジャイル指定が増えた
僕達は恵まれている
→イベント
→優秀な人
→コミュニティ
導入を妨げるもの
→ビジネス構造的にダメとか

そんなに難しい???
1.現場で導入する
1人でアジャイルやった
1人でペアプロやったw

上司や職場は障害にならない!!

2.成果を出す
話を聞いて貰えるようになる

でも、失敗はコワイ。。。
成果を出すため

3人の話
楽天
失敗もした
あたりまえが難しい

MTI 竹林
モバイルとか
アジャイルは我流
アジャイルハンドブックを作る
押し付けない、布教活動
得たもの
楽しさ、創造、
大事なこと
共感、理解、信頼できる仲間

上田
NECビックローブ
ユーザー企業だって、内製したい
2回失敗してた

成果
開発経験ゼロのチーム
2ヶ月でリリース
プチウォーターフォールだった
伝えたいこと

詳しく聞いて行こう
1番うまく行かなかったとき
ゼロに戻ったとき
→共感、共有がたりなくて進捗が見えないと言われた
竹林:敵対関係ができてしまった
→和解
上田:全部のプラクティスをやってしまった
→効果が見えない

成果が出たと実感した瞬間
逆順
上田:リリースすること?
→売上だけでなく、チームが成功すること
竹林:やってよかったとメンバーから言われるとき
楽天:自転車みたいな漕ぎ方を初めて覚えたとき

やってみて失敗したプラクティス
オススメのプラクティス
上田:
ペアプロ、説明する時間になった
→全部いい!
竹林:
ペアプロ、やり方もわからない
失敗して絶望する
→振り返り、ダウンアップな言葉が得られる
楽天:
→振り返り、アイスブレイク、アニメ出したらスベった
→振り返りと個別飯
西村:
→朝会がいい

自分以外の反応は?
上田:
竹林:前職はフルボッコ
若いくせに
楽天:アジャイルは〜とかキーワードだけだと、印象が悪い

アジャイルの間違った解釈の人との向き合い方、対処法
楽天:別の敵を作る
竹林:否定せずにディスカッションする。質問し続ける。
上田:アジャイルの理解が浅い人が多い。説明、共有してから始める。

普通の人でもできる?エースだからでしょ?
竹林:技術があるから?諦めないこと
→失敗じゃなくて、うまくいかない方法を見つけたと思う
楽天:出来ない人だから、アジャイルで仲間と協力した
上田:試した結果に出来ただけ


学び続ければ上達する
やってみる→考える→次に活かす→
繰り返す

アジャイルは学ぶ為の仕組み!
→コレが本質

永和だって5年かけてここまできた

3.お互いに学びあう

行動するだけ!!!
しなければ、当たり前にならない。

アジャイルサムライの次はない。
→自分で書く

アジャイルは教えるものじゃなく、教えたくなるもの」


Action!
楽天
ビジネス価値に繋げる
竹林
大きく広げる
上田
作る!造る!創る!
西村
これから始める人にうまくいって欲しい
学びの場
アジャイルアカデミー
経験を共有するイベントを


2日間を思い出す
隣の人に伝える
隣の人から聞く
アクションを書く
「やりたいと思ったら、やる!アウトプットを継続する!」

Developers Summit 2013 に参加してきた!【1日目】

とりあえず、備忘録としてメモを貼り付けておきます。
あとでインデントとか整理します!

テーマ「Action!」<<3つの世界:エンタープライズ、ソーシャル/ゲーム、スタートアップ>>
エンタープライズ ソーシャル スタートアップ

玉川憲
三谷慶一郎
伊藤直也
孫泰蔵

エンタープライズ
・大資本
・高品質
・高品質可用性
・高コスト

ソーシャル
・新技術

スタートアップ


漠然と抱いていた常識を
変化に目を閉ざすな
未来を後回しにしない


『自己紹介』
三谷慶一郎
NTTデータ経営研究所
伊藤直也
ココログはてなGREE
孫泰蔵
スタートアップ
ベンチャーの立ち上げ

エンタープライズ
エンタープライズの今までとこれから
今まで
・省力化、自動化
・信頼性、安全性を重視

重要インフラには利用され続ける
グローバルな開発が始まる

民間IT投資の伸びが異常
80年代
投資⬆
効果⬆

2000年代
投資➡
効果少し

日本は省力化、自動化は上手い
2000年代以降は違う
バックエンドからフロントエンドへ
給与システムから、営業システムへ


これから
付加価値を創出する
新サービス
迅速性
ユーザとともに構想する「デザイン型人材」
言語化されていない課題の発見
広義のアジャイルのような考え方


【ソーシャル】
二つのB2Cサービス
既存のビジネスをITで提供する
ITそのもので価値提供をする

Google➡Web2.0➡FaceBook➡PostPC

開発のトレンド

現状の課題
アプリストアの飽和
Webの大衆化

スマートフォンによるインターネットユーザーが爆発的に増えている

エンタープライズとの合流が必須になってくる
コンシュマライゼーション

Instaggram
700万人のユーザーを4人でまわしていた

オバマの選挙集金サイト

これから
建前のないベストプラクティス


【スタートアップ】
アメリカよりも投資額も起業件数もちがう

日経平均株価は10年下落
でも、57%の企業は増加している

誰でもスタートアップできる時代

 起業➡大衆化➡M&A
 ベンチャー生態系


 パネルディスカッション
 ウルトラエコシステム

 グローバル化の影響は?
 最初から英語で開発する
 ➡言語に依存しないUXになる
 ➡暗黙の共有がなくなる<>
1993年2月24日 開発開始
Hello world を出そうとする
すべてをオブジェクトとして捉えるため、芋蔓式にやることが増えた
半年後にやっとHello Worldがだせた

1995年12月0.95
だいたい盆かクリスマス前にリリースしている

2.0にふさわしいのかと自問自答して、ストッパーが自分の中でかかってしまう
RubyConf2001で2.0について言及していた
・新VMとか
YARV
・新GC
1.7で世代別GCを実装を諦める
bitmap Marking
・ネイティブスレッド
1.8はグリーンスレッド
1.9からネイティブスレッド GIL(Giant Interrpreter Lock)を実装
➡まだまだマルチコア対応ではない
JRubyはスレッドセーブ
・埋込API
互換性重視のため不採用

コア実装の置き換えを重視

現代の2.0
RubyConf2003
・キーワード引数
・新ハッシュリテラル
・メソッドコンビネーション
セレクターネームスペース


新機能
・キーワード引数
名前付きオプショナル引数
記述性が高い
順序不定
記憶想起

APIの柔軟性
読みやすさ
書きやすさ

・メソッドコンビネーション
既存クラスの装飾
➡既存のメソッド、クラスを書き換えることができる
alias method chain
➡名前衝突、名前管理が必要
CommonLisp Object Systemから引用した機能
beforeフック
afterフック
フック
純化メソッドコンビネーションを実装
Module#prepend
includeは後ろに追加
prependは前に追加する
名前重複問題解決

既存クラスの拡張
メソッドの追加
メソッドのラップ

既存の機能
オープンクラス
クラス再定義
mathn、jcode
実際の問題
➡スコープの問題、誤動作を引き起こす
スコープ限定のオープンクラス
Refinements
➡まだ実験的実装

Selector namespase
メッセージの多重化
挙動が難しい

ローカルリバインディングは不採用

プロファイル

Enumerablle#Lazy
遅延評価
遅延(Lazy)を求めるものは
怠惰(Lazy)であるw

デフォルトでUTF8

高速化


今後は?
言語としてはほぼ完成
性能改善
適用分野の拡大
マルチコア
アクター?<>
Simo Kinnunenさん
サイバーエージェント
ccufonを作った

コミュニティアプリのアドバイス

なぜ?
フロントエンドエンジニアへのアドバイスは多すぎる

基本
スマホアプリ
ブラウザアプリ
ホーム画面に追加したアプリ
ネイティブアプリ
Occtaneベンチマークソフト
iOSのネイティブは遅い

イベントデレゲーション
新しい技術ではない
正しく使われていないこともある
HEADで使うとページ読み込みが遅くても
レスポンスが早く感じられる
二つの選択がある
HEADで必要なものをロードして、domreadyを使わない
すべてjsで作る
ただし、ゲームならローディング画面があってもよい


CSSの3Dアクセラレーション
挙動が遅くなる

Androidはちょっと3Dに弱いからちゃんとテストしないといけない


レスオンシブ・タッチ
clickはtouhendより約300ms遅い
ただし
スクロール、ズームで誤動作する可能性がある
touchstartの座標を使って判断する
@sorccu

Gunther Brunnerさん
HTML5 の描画処理
バトルスロットというアプリ開発
スマホブラウザ自体のバグも多い
DOM
jQueryで実装する
CSS3
OpenGLが使える
GPUを使うと速度向上
ただし、マジックブラックボックス
CSS3 FILTER
iOSのみ
CSS3 CUSTOM FILTERS
Adobe CSS3 FILTER LAB
CANVAS
自由度は高いが、自分でやることも増える
WEBGL
これから来る技術

ライブラリ

表現力はブラウザによる
ブラウザはゲーム機と同じ
SafariPS2
Androidスーファミ
Corome ➡ 64 から PS3<<現場で役立つUX>>
仙波さん
Architect、Designeer、UX Engineer

はじめに
productには必要なこと
ennterpriseでも必要になってくる

UXとは?
ニールセン・ノーマンの定義
1 ニーズを満たすこと
2 所有、使用する楽しさ、優雅さなど

Enterrprise UX
1. 見た目のデザイン
素人が作ったように見えるサイトは信頼性が低い
レイアウト
整列と余白

一貫性
メリハリ

デザインのパターンを使うといい感じになる
ポスターなら、真ん中にタイトルやメインイメージ

アプリケーションは?
基本的には一緒

2. 行動のデザイン
ユーザーの行動を観察する

行動をデザインするには?
コンテキストを考える
どういうユーザー?
どういう状況?
何をする?
ストーリーがある

これまでは機能をモデリングしていた
これからは行動をモデリング
➡家具のショッピングサイト

コンテキストに応じて変える
PCなら100%の機能
モバイルなら30%で十分

どう感じるかを自分で体験する
試行錯誤を繰り返しながら作る


3. 現場への適用
経営的な視点からの実行リスト
これまで

これから
UXの必要性を認識
開発者、お客様、デザイナー、経営陣、ユーザー
アジャイルと相性が良い
UXの担当者を設置

ユーザビリティテスト<<サスティナブルなSIを実現する開発基盤のあり方>>
SIオワコン?

SIerの内部での世代間のギャップがある
マネジメントと技術のどちらかを重視してしまう

ITサービスの米国化
内製化の促進
クラウドの活用
技術の標準化
オフショアの促進

でも、米国ほど進まない 労働環境の違いのため
でも、SIは続く

ITは益々重要になる
顧客を通じて社会と繋がれる。それがSIの良さ

これからのSI
プティック型SI (専門分野に特化したSI)
↔デパート型の逆
もっと顧客よりのサービスをしたい
➡価値あるITサービスを提供し続ける

サスティナブルなSI
➡なくなったら困る人を増やす

サスティナブルでないSI
➡価値がなくても作る
➡自分の成果物にだけ興味を持つ

どうしたらサスティナブルなITサービスを提供できる?
➡ソフトウェア開発の視点+ITサービスの提供
SERVQUAL
有形性、信頼性、保証性、応答性、共感性

開発環境の改善
JIRAで顧客とのコミュニケーションツールにしていた
Git
➡分散開発が増えた
CI
➡リリースサイクルの高速化
SSO
➡導入するときの管理コストを減らす

デモムービー

まとめ<<こわくない関数型言語>>

関数型言語ってこわい?
中野さん
OCaml
関数型の基準は?
関数型が値でわたせっる?
参照透過性がある?
形推論がある?
関数型はプログラミングスタイルの一つ

そもそも関数とは?
数学的な関数の定義

入出力の集合
言語に関係なく実現できる

関数の何がいいの?
モジュール化しやすい
再利用性の向上
最新の研究の恩恵が受けられる


こわくないSML#
上野さん
SML#
関数型言語を実用的な言語にしたい!
C言語との高い互換性

こわくないScala
for Java Programers
水島さん

関数型の概念を理解する必要がある?
少しずつ考え方を変えよう
タイプ数が少ないJavaになることを恐れない
ループ➡再帰再帰高階関数
implicitなんとかを使う必要がある?
読む時になってから勉強すればいい
使えると超便利
関数型なコードを書かないと叩かれる?
普通に教えてくれる
言葉遣いが端的になることはある

シン・東京Ruby会議10 劇場版 ||= 行ってきた!!

行ってきました!
その後の懇親会にも参加したかったですが、
先週インフルエンザにかかっていた影響もあって、
本調子ではなかったので直前で辞退しました。。。
行きたかったなぁー

内容は非常に楽しかったです!
モチベーションあがりましたw

開会トーク
大和田Ruby会議
・acts_as_rubyistバンド
→るびすととして振舞うという心構え

19:23
開会挨拶

19:30
joker1007
Railsプログラマーの日常」
システム開発について話す
要件
大事なこと→メンタルモデルと実装の一致
開発
自動化の準備が重要
名前付け超大事!
active recordに囚われすぎない
テスト
cucumber
まとめ
知識のリンク


19:45
安川要平
沖縄に集まって Rails Hackathon をやってみた。
#台風そん
 →台風が暴風域に入っている間に行う
上位3作品
Gistar
ScreenX TV


20:00
ursm
Introduction to Ember.js
ennber.js

クライアントサイドMVCフレームワーク
backbone.jsとかと同じ
デモとそのソースコードを見ながら行う
DOMを一切触らずにChatツールが作れたりする


20:18
海老沢 聡
RubyMotion ではじめる!楽しい iOS アプリ開発
P4D デザイナー向けイベントとかやってる。
RubyMotion
RubyiOSアプリが作れる
ライブコーディング
ちゃんとサーバサイドのTodoリストをアプリケーションで表示させる
Rubyというよりも対応するライブラリを使いこなすことが重要
ところどころRubyっぽい記述があって面白い

20:34
すがまさお
巻き込まれ型人間のボッチ脱出計画
ぼっち脱出のためにどうすれば?

コードを書こう
HHIBARIYAさんの「自分のためにCodeを書く」
俺得なものを作ればいい
勉強会に行こう
100人規模の勉強会は避けた方がいい
アルコールがあれば、なんとかなるw
ブログを書こう
圧倒的王道
自分のメモが他人の助けになる
今ならQiitaとかもいいかも
自分のためにしていることを形にすることが大事


20:48
ryopeko
自分の道具を知る
言語とライブラリについて
サバンナを生きるイメージ
・なにができる
・なにをしっているのか
・なにがたりないのか

ドキュメントは当てにできない
自動生成されたドキュメントは信頼出来る
Codeが一番のドキュメント
スーパーハカーの書いた生きたコードが読める

一歩踏み込んで、コードを読もう


閉会挨拶