PenguinがWorkWorkする blog

ネット上で気になることや、android等について書くブログ

AngularConnect 2016 Feedbackに参加してきた(Angular 2.0まとめ)

AngularConnect 2016 Feedbackに参加してきた(Angular 2.0まとめ)AngularConnect 2016 Feedbackに参加してきた(Angular 2.0まとめ)

Angular2.0リリース時に開かれたAngularConnect 2016 Feedbackに参加された人たちのフィードバック会に参加してきました。

パネルセッションのまとめ的な感じでしたが、実際に見て聞いて触れてな感じでと理解が進む内容でした。

フィードバック会を踏まえた上で独自の視点で感想を書こうと思います。以下の点で見ていきたいと思います。

  • 保守性について
  • 生産性について
  • パフォーマンスについて

保守性について

  • メジャーバージョンアップは6ヶ月おき
  • APIの廃止は2回のメジャーバージョンアップ
  • アップデート毎にアップグレードガイドが公開

メジャーアップデートに関してのルール(保守性)があるので、計画がを立ててリファクタリングするというのは、個人的にかなり嬉しいところです。 APIの廃止は2回のメジャーバージョンアップについては、破壊的変更があっても、6ヶ月間の猶予があるというのも嬉しいところですね。

懇親会で@laco0416氏にアップグレードガイドについて質問してみたところ、そのあたりも公式よりサポートされるみたいです。

生産性について

  • Scaffoldにangular-cliがある
  • TypeScript採用により、静的解析が行える

angular-cliについては、anuglar公式で出しているスタイルガイドに基づきファイルを生成してくれるので、知見がない状態である程度のベストプラクティスを得られるのは大きいと感じました。 $ ng new my-new-projectというたったこれだけで、プロジェクトがnodeサーバ込みで開始できたり、新たなcomponent作成に$ng g c path/to/header等で、作成できるのはかなりお手軽です。

型付きについては相変わらず動的脳な人なので、改めてstaticおじさんに聞いたメリットとして 1. 型解決で安全にコーディングできる 2. 静的解析ができるのでツール、IDE等で事前にエラーを検知できる

どちらかというと2.のメリットの意味が強く実行するまでわからない言語に比べてコーディングについては * トライ・アンド・エラーの回数が少ない = 開発効率があがる ということでしょうか。

あとこれだから動的言語ばっかやってる人は┐(´д`)┌ヤレヤレと罵られましたが(^q^)

パフォーマンスについて

  • AoTにより事前コンパイルが可能
  • LazyLoading PreLoadingが扱える

対規模なプロジェクトになるとファイルサイズが膨大になり最初の起動時間が増えがちですが、このあたりはAoTだったりLazyLoadingを組み合わせることで起動時間を短くすることが可能になります。 PreLodingについてはBundleされるjsの分割単位のお話ではあるので、プロジェクトの設計次第かなと思います。

その他(個人的に気になった部分)

  • SEO対策に対して有効な手段がちゃんと用意されている。

Angularのメリット

  • 他のフレームワークに比べて単一のパッケージングで始められる。
  • 生産性が高い
  • TypeScriptの使用に則っているため、静的言語かつC#ライクに癖の強い方言的な事が無い。
  • パフォーマンス面において強い。
  • SEO対策に対して有効な手段がちゃんと用意されている。

Angularのデメリット

  • 公式のドキュメントが脆弱
  • 学習コストが他のフレームワークに比べやや高い

Reactとの比較がありますが、個人的にはAngularはフルスタックフレームワークと歌っているとおりサードパーティ(一部除く)との組み合わせをほとんど必要とせず、Reactの場合はReduxだとかBabelを使うとか、色々なライブラリを組み合わせを覚えることが多いです。

AngularはシンプルにTypeScriptとAngularのみ覚えればとりあえず使えるのはいいですよね。 ただReactiveプログラミングの初挑戦では覚える概念も多い、TypeScriptを覚える等を考えるとそこそこ学習コストは高いと思います。

最後に

他にはRxJSのお話とかありましたが、C#などや他で言語でも触れられている内容だったので、このあたりは割愛します。(Observerパターン)

あと、作るプロダクトによって向き不向きがあると思います。 やたらと動的に画面が増えるとか、Input要素にごちゃごちゃしたデータの変化を与えるとかあまり複雑なことはそれなりのコストを払うのかなと思います。 このあたりはSPAを作るということはどういうことかっていうことで、設計段階に整合性を見いだせるといいですね。

以上

Re:ゼロから始める転職生活(株式会社リューノスを退職しました)

バイアスがかかった記事になったので、その辺は留意して読んでほしいです。


半年間と短い間に勤めていた掲題の会社をやめました。

あんただれ?

5年目突入したWebアプリエンジニア。
前半2年くらいはオンプレのインフラエンジニアしてその後、ダーマ神殿にいってRailsエンジニアに転職。
受託案件を担当しながら、更に転身してPHPを使ったソシャゲのAPI開発した後に、業務系システム開発している会社にjoin。
Railsエンジニアとして入ったのにAngularを使ってフロントエンド担当していたです。

なぜ、そこに入ったの?

主に教育向けとウェディング関連の会社で、BPS時代に一緒だったid:kikeda1104 (以下池田)さんに誘われて行ったのが経緯。
話はズレるが、フロントエンドが世の中的に盛り上がってる中で、自身のもつスキルセットにフロントエンドの知識と知見で弱かったので、流行りのSPA開発をさせて頂いたプロダクトでした。
教育関連の方にはかなり名が通っているらしい。

良かった所

豪華なパーティが定期的に無料で参加

全社会という名の支社と本社含めた盛大な飲み会が定期的にあった。
青山のオシャンティな会場とか、新宿の豪華な所で結婚式二次会で使われるような部屋を貸し切りの中いい感じの料理とお酒を社員はタダで食事できるなんて、オタク人生だけだったら一生入れないんじゃないか位素敵な機会でした。
場所はコレ↓
CONCEPT | クルーズクルーズ新宿

ただ、これにも一部問題を感じていたので後述で説明します・・・。

技術向上、イベント参加等に理解がある

Rubyカンファレンスとか、イベント時間が就業時間にかぶっていても申請したら業務に支障さえなければ通ります。
あと、本も業務に関係していれば購入できたし、面白かったのがamazonで注文したものが会社宛てに送れたりとか。

悪かった所

文化が営業面に統一されている(エンジニアの文化が無い)

これがやめた一番の原因です。
開発業務で利用するPCが選べずWindows固定であったこと。
入社前の面談ではビジネストークで、OS(Linux系,Unix系,Windows)はなんでもいけますと言ったが、Web系の開発するならLinux/Unixの方が断然都合が良いと思ってる。
困ったときにはgoogleで検索すれば知見はいくらでもあるし、Vagrant環境では遅い(会社ではHDD)、権限周りでコケる。(Windowsファイルシステム関連)
ありとあらゆるオーバーヘッドを抱えながら開発する必要って無いよねっていう意見です。

Windowsである理由が釈然としなくて、Officeソフト関連で客先資料や別部署との連携がしづらいと困るとのこと。(半年間一度もないですが)
使っても連携に対して知見が無い云々等、合理的な理由ではなく別部署(デザインチーム)は使っているのに所属部署ではダメだった。

挙句には、『提案書を出せ』『費用対比効果は?』と言われて、最終的に権限を持つ部長からは『PC変えてもいいけど、リーダーが選ぶからね』と半ば高圧的な感じで言われて流石に自分も諦め。
組織改革したいんじゃなくて、開発効率高めたいだけなんですけどね・・・。


辞める直前の環境ではWindows10のInsiderBuildでいち早くWindows 10 Anniversaryの内容を入れてBash on Windowsでやってた。

開発体制の不成立

エンジニア文化がないせいで、言語はみんな一緒であるが開発スタイルがバラバラ。
テストも書かない(ケースバイケースであるが)、Ruby規約は守るはずなのに、規約を守るためのツールが導入できない人が出てきて結果、体系化してないプロジェクトがある。
このあたりは、自身も未熟でうまく言葉にできないが少なくとも環境差異、または望まれてない環境で同じ品質と速度を求められるので人によってはかなり不利な状況である。

プロダクトの品質=個人のスキルの構図 で、なんのための組織作りでありチームなのかがよくわからなくなっている。

CTOが不在

経営陣にエンジニア経験した居ないおかげで今の状況を生む結果じゃないだろうか。
技術的理解の不足、偏った評価軸等問題点は尽きないですが少なくとも、経営の文化、エンジニアの文化、営業の文化はキッチリ分けるべきだと感じた。
一日の業務で8時間はPC作業していて、環境が悪いと工数にも影響することはわかりきっている。
組織改善は常に必要であるが、改善してほしいと思って声をあげると睨まれる組織はどうなの?とは思う。

無駄なMTGが多い

支社にいるエンジニアをあわせた定例MTGがあるが参加した時に、なぜ定例があるのかを聞いたら『コミュニケーションだから』と聞いて愕然とした・・・。
決めた曜日までに議題をあげて、必要であればMTG開けばいいと思うし、プロダクトのMTGは2時間超え等疑問を感じる。

キャリアップが見えない

どう見ても、優秀なエンジニア(私じゃないですよ?)がリーダーじゃなくて裁量のない普通のメンバーやっていて、営業系の人が上に立っているのを見るとエンジニアとしてキャリアアップが全然見えて来なかったので、辞めるきっかけにはなりました。

会社イベントはサビ残

全社会と言う名の飲み会で、ゲームまたは見せ物があるんですが、これには担当があり、担当者は準備が必要。
拒否権が無いので、業務命令だと思うのですが、業務中に進めてはいけない暗黙のルールだというらしい。
自分は上長に確認を取ってやって良いと言質を取ったのでやってました。
ただ、それを暗黙のルールだと言ってしまう辺りが黒い臭いが・・・。

意外とケチ

ティッシュとか会社で利用する消耗品はまさか自分で買うとは思ってなかった。
このあたりはどうでもいいんですけど(; ・`ω・´)

結論

他人にオススメできる会社かというとエンジニアの立場からしてオススメはできません。
半ば自分もブチ切れていてかなり対応が悪かったですがエンジニアは生きづらい会社でした。
あくまでエンジニアとしてjoinするには上記のことがあるだけで、別事業のことはノータッチなのでわかりません。

ただ、エンジニアを【投資】と見てアサインするのか、【労働】として雇ってるのかがすごくわかったので、良い経験になりました。

今後は?

今後は、もうちょっと裁量のあるレイヤーに上がってプロダクトを勧めていく人間としてどこかの会社にjoinしていきます。
リモート有り、副業ありの所を探していてもしかしたらお手伝いできるかもしれないので、単発のお仕事あったら振ってくださいな。
(何社かお声を頂いているのでまだ会社員です)


P.S.
ちょっと前にバズった記事。改めて照らし合わせるとNo多いな・・・。
派遣先を選ぶ際の「バカ避け」としての質問項目

代表的なProxyサーバリスト

docker向けのプロクシサーバの選定をしていて、まとめ情報が思った以上に無いので探してみた。

代表的なオープンソースのプロキシサーバー・リバースプロキシ

プロクシサーバ単体で建てるならSquid一択だと思ったら、意外とあることに驚き。
あとは、DNSサーバの選定したら家の中でドメインが扱えるようになるので、ipとポート指定の直打ちが無くなる。

Mac for ChromeでWindows Media系が再生できない問題

macでflip player入れているのにchromewmaが再生できなくなった・・・。
調べてみると、単純にchrome側でAPIがDeprecated対象になっただけで有効化すればいい。support.google.com

これで仕事中に響Radioが聴ける(^q^)

Ansibleで実現できる機能リスト

ansibleで何ができるのかわからなかったので、モジュール(コマンド)ベースで便利な一覧のメモ
これを見ればansibleでやりたいことベースで何が出来るか想像しやすい。

All Modules — Ansible Documentation

例えば、aptとか
apt - Manages apt-packages — Ansible Documentation


家にある録画サーバーをML115G5からMicro Serverに更新する時、面倒な構築作業を二度とやりたくない・・・、と思いansibleで格闘中。

【PHP】 FuelPHPとおしゃべりしながらデバッグしたい 【MVC】

FuelPHPとおしゃべりしながらデバッグしたい

rubyにあるirbやrubygemのpryのようなヤツをphpでもできないか調べてみた。

phpには

$ php -a

みたいなコマンド叩けば済むけど、自分で書いたコードをbinding.pryのように任意のステップでブレイクポイント置きたい。

PsySH

pryに相当するPsySHを発見。 これをFrameworkのFuelPHPで動かしてみる。

まだ、試してないのでたぶん、こうすれば動く妄想。

$ php composer.phar global require fabpot/php-cs-fixer:dev-master

特定のソースコードに対してphpyshをrequireしてevalするらしい

# 特定のソースに対して
require('~/.composer/vendor/bin/psysh');

# ブレーク置きたいところへ
eval(\Psy\sh());

# プロジェクトディレクトリ配下に移動してビルドイン
cd /var/www/production-app
php -S localhost:3000 -t public

じゃあな!

参考URL

ubuntu14.04 Twitterをワンライナーコマンドで読む

最近、クライアントによっては見づらいインターフェイスが多くなってきたので、
一掃のことターミナルの文字だけでいいやって人向けにいかがでしょうか。

今回はgemからtwをbundle installします。
Tw: Twitter client on Ruby.

作者に感謝!

【環境】
Linux/ubuntu 14.04 (64bit)
ruby
rbenv
bundler (gem)
tw (gem)
ブラウザ環境(GUI)

ruby環境でrbenv導入やrvmの人は自分で調べてね!(情報が充実しているので一発で導入方法が出る)

自分はシステム側に影響与えないためにも、必要最低限のgemしか入れたくないので、
bundle installするときは、--pathでlocalフォルダ入れるのが好き。
それでもという方はお好みで皆さんどうぞ。

タイトルに嘘がないように準備もワンライナーでないとね!!

$ mkdir ~/tw; cd ~/tw; echo -e "source 'https://rubygems.org'\n\ngem 'tw'" >> Gemfile; bundle install --path vendor/gems && bundle exec tw;

ブラウザが立ち上がって来るので、PINコードをtw側で入力して完了。
Windows(クライアント) - linux(サーバ)の環境だとwindows側にxming入れたほうが無難。

【追記】
tw --user:addでoAuth認証URLが出てくるので、
そのURLをw3mなどのテキストブラウザに読ませれば、認証は行けると思います。


コマンドを叩くとTwitterに実装されているひと通りの機能が使える。
(ストリームもあるからリアルタイムでもTL取得できる)

自分は、一分置きに取得してます。

watch -n 60 "bundle exec tw @Penguin_Works/リストの名前 --format='@#{user}: #{text}'"

json形式で出せるからツイートを好きな表示にできる。
(上の例は '@Penguin_Works: ハラ減った' という感じに出てきます。)

helpを叩くと使用例が具体的かつシンプルに書いてあるので結構わかりやすい。
これならググらなくても安心設計。

$ bundle exec tw --help

e.g.
tweet tw hello world
echo 'hello' | tw --pipe
tw 'yummy!!' --file=food.jpg --yes
read tw @username
tw @username @user2 @user2/listname
tw --search=ruby
tw --stream
tw --stream:filter=ruby,java
tw --dm:to=username "hello!"
id tw @shokai --id
tw @shokai --id=334749349588377601
reply tw "@shokai wow!!" --id=334749349588377601
tw --fav=334749349588377601
tw --rt=334749349588377601
tw --format=json
tw --format="@#{user} #{text} - http://twitter.com/#{user}/#{id}"
delete tw --del=334749349588377601

これで、俺仕事してるわーと言いつつ、小窓にしながらTwitterが見れるね!!!
読み上げAPIとかあれば、窓見なくても初音ミクやゆっくりの声できけるんじゃないかな。
というか、botとかは大体これで作成されてるっぽい。