by shigemk2

当面は技術的なことしか書かない

Angular.jsをメインに開発したnoteに関して #lldiver

Directives

属性つけるだけでいろいろと使いまわせる

DirectiveをマスターすればAngularをマスターしたような感じになる

controllerとdirectiveのscopeをうまく共有するには引数をうまく使うこと

独自のタグが使える

HTMLを部品化出来る

みんなChrome使ってて、FirefoxとかSafariとか、あんまり他のブラウザ使っていないね IEってなんだっけか

  • HTML + JSの開発は早い
  • 2 way data bindingは幸せになれる
  • 学習コストは突然高くなる
  • PhantomJSでOGPは荒業

DHHはMVCフレームワークが嫌い

Googleさん

Polymer Dart HTTP2.0 Wearなど

CoffeeScriptを使ってる Railsとの兼ね合いで マークアップはデザイナが書いてテンプレートはエンジニアが書く

ピースオブケイクの人

それでもNode.jsでやる #lldiver

日本Node.jsユーザーグループ代表

最近こんなこと言われる

日本でのNode.jsはオワコン

TJとExpressの作者がGolangに逃げた

Node.jsって結局なんなのか

2009 Node.js is born Ryan Dahl Joyent

さかのぼって2001

C10K問題

  • 「Web2.0の先にあるC10K問題の話」みたいな記事がバズる
  • ちょーたくさんのクライアントが一度に接続したらサーバ死ぬよね問題
  • 当事のフロントはApache
  • クライアントが接続するたびにプロセスとかスレッドがあがるとメモリが使われて…

1台で10Kもさばかねーしwwwwwwwwwww→ところが、xhr-long pollingが流行った(2006)

Nginx

シングルスレッドなのでコネクションがあたくさんあってもworkerは起動しないので、リソースは効率的 (Apacheはworkerがいっぱい出来る)

C10K問題が出てきてからイベントループモデルが流行り出す

EventMachine Twisted AnyEventなど

時間かかかる処理(ファイルIOとかネットワーク系)はできる限り非同期にすべきという考え方がイベントループモデル

Ryan Dahl

イベントループモデルは良いが、既存のIO同期系の処理はなくしたい

非同期ライブラリとしてlibevが採用され、後にlibuvになる

V8 is born in 2008

これまでのJS → 構文解析 → 実行 故に、遅い

V8→動的にマシン語に変換

  • C10Kを解決するイベントループモデル
  • 高速な非同期I/O
  • 強制可能な言語
  • 超絶早い処理系

2010-2012 socket.io expressあたりが騒がれて普及へ

Node.jsとはなんなのか

  • 非同期ライブラリとイベントループモデルで動く高速かつ省リソースなJS実行環境
  • socket.ioなど、コネクションを貼りっぱなしにするものと親和性が他界
  • Node.jsだけで無理はしないことが重要

分散環境で複数サーバと協調する仕組みにNodeは向かなかった。だけで、TJとしてはWebアプリを作るなら相変わらずNode.jsを使い続けるぜ、っていう壮大な釣り

適用されるは範囲によっては不利なだけ。。。

11/15 東京Node学園祭2014

GMOペパボのエンジニア新人研修 #lldiver

前もってオリエンテーションをやってみよう

あんちぽくんさん

エンジニア研修をこれから受けるひと(学生、転職者) エンジニア研修を実行するひと

新人研修ってなに

経営戦略があって、ビジョンにどうやって到達するか

ビジョンを達成するために人材を育てる。それが研修

単に研修やりますってだけだと何をやればいいのか分からなくなる

エンジニア職位制度

シニアエンジニア アドバンスドシニアエンジニアなど

ここでいう新人とは

  • 新卒採用
  • 第二新卒採用
  • 中途採用

キャリアとスキルがあって、必要なスキルの基準が存在する。

一般的に新人は必要なスキルの基準足りていないので、その差を埋めるのがエンジニア新人研修

キャリアプランと、期待する水準と、研修

新卒を採用するということ

  • 社会への入り口
  • 長い人生の端緒を開く
  • 新卒の若者を採用する企業は、適切なスキルを身につけるよう導く社会的責任をおっている

そういうのは最初にやらないと身に付かない場合があるので、適切に教える必要がある

研修について

  • 理想的な開発についてまずは教授する
  • そのうえで、会社固有の特性、現場のもろもろを身に着けていく

スキルの内訳

  • 知識スキル エンジニア一般に期待される知識と、各現場固有の業務知識
  • 行動スキル 社会人一般に期待される行動 組織固有の文化的特性に基く行動

知識スキル

  • LL
  • フレームワーク
  • Linux

などなど

行動スキル

  • みんなと仲良く(遠慮はしない)
  • ファンを増やす
  • アウトプットする

Webアプリ開発の基礎 1

Rail Tutorial原書を読んでもらう。和訳はあるけど英語読めないと話にならないよ

Webアプリ開発の基礎 2

サーバサイド 入門Puppetを読んでもらう

Webアプリ開発の基礎 3

DC見学 開発見学 デザイナとの協働

学習モデル

  • 徒弟制
  • 正統的周辺参加
  • トロいの木馬
  • 式年遷宮

学習転移と経験学習

学習転移モデル

創造→伝達→習得→応用

確率した知識

プログラミング言語 フレームワーク Linux

経験学習モデル

経験→省察→概念化→実戦 行動特性 エディタの操作 コーディング 設計の勘所

単に本やマニュアルを読めばいいわけでもコードを書けばいいわけでもなく、コミュニケーションをとりながら学習することが肝要

徒弟制

モデリング コーチング スキャフォルディング フェーディング

アプレンティスシップ

スキルの伝承

新卒チェーン 自分達が教えられたことを後輩に伝える。教えるという体験によって、成長する

周辺参加

学習/仕事という対立を解消する

共同体への参加 仕事の中での学び

トロイの木馬

現場に送り込み、質問させる

式年遷宮

20年に1回建物を作り替え、宮大工の技術を継承させる

まとめ

  • エンジニア新人研修は経営ビジョンのもとにある
  • 研修から始まるキャリアプランを支援する
  • 知識スキル、行動スキルをともに開発する
  • 知識の伝達と経験による学習をミックスする

質疑

教える側も伸びないと説得力が得られないので、勿論教える側もエンジニアとして成長する必要がある

HerokuでGauche (あるいは、好きな言語何でも) #lldiver

  1. Heroku
  2. Docker
  3. Gauche

Y Combinatorにかぶれる

HerokuとかDropboxとかに出資したひと

この本を読むとHerokuを使わないのは有り得ないという流れ

  • App(開発者が実際にごにょごにょする部分)
  • Cedar Stack
  • Dyno
  • Inner Core

The Celadon Cedar Stack

  • Herokuのデフォルトスタック
  • ベースOS はUbuntu10.04
  • ライブラリ
  • 言語実行ランタイム

Slug

ドキュメントに書いてあって、これをつくれって書いてあった

実行可能なCedarアプリケーションをtarアーカイブしたもの

作成時の約束は一応ある

Program Data → app → tar → slug

Herokuにのせるとうごく

リリース時にGitは使わない

glibcのバージョンが違うとかバイナリの形式が違うとかで、動かない

heroku run bashはまどろっこしいので、

Docker

Dockerを使うと簡単。

ビルド→slug→heroku

Dockerfileを作るだけ。作るだけ。

Dockerfile

Ubuntuベースですね。

RUN apt-get update -y
RUN apt-get install -y wget gcc
RUN apt-get install -y zliblg-dev slib
RUN apt-get install -y make autoconf

.....

RUN wget http://prdownloads.sourceforge.net/gauche/Gauche-0.9.4.tgz
RUN tar xzvf Gauche-0.9.4.tgz

WORKDIR Gauche-0.9.4
./configure

.....# あらかじめGitHubからクローンしておく

ADD Gauche /tmp/Gauche

....

WORKDIR /opt
ENTRYPOINT 

イメージのビルドと起動

GaucheでWebアプリ

  • Gaucheの開発版
  • Gauche-makiki(Sinatraぽいウェブフレームワーク)
  • Gache-gl

リリースまでの道程

  • Dockerで作ったappディレクトリ
  • アプリケーション

コピーしてアーカイブ

Slugをアロケート

環境変数

リリース

Guraプログラミング言語の紹介 #lldiver

イテレータ + イテレータ = 足し算をするイテレータ
強化・発展させたイテレータ演算機能によって繰り返し処理を効率化するプログラミング言語 Gura の紹介をします。

プログラミング言語の紹介

テキストファイルを読み込み、行番号つきで表示

printf('%d: %s',
  1.., readlines('hello.c'))

要素ごとに関数を実行するイテレータ

イテレータからイテレータを生成して演算と評価を行う

  1. 繰り返し処理が簡単に書ける
  2. 並列処理が容易になるかも

  3. イテレータ生成の負荷は軽い

  4. 負荷が重いのは評価の段階

基本的な仕様

Gura Programming Language (グラ プログラミングランゲージ) プロジェクト日本語トップページ - SourceForge.JP

関数

  • block式を関数オブジェクトで受け取る
  • {block?}ならオプショナル

オブジェクト指向

コレクション リストと辞書が使える

スコープ管理 クロージャ 関数内はレキシカルスコープ

イテレータ処理

イテレータ処理 マッピングと生成

イテレータからイテレータを作るのがマッピング 暗黙的マッピングとメンバマッピング

リスト 要素がすべてメモリ上に用意 ランダムアクセスが可能

イテレータ 要素をひとつずつ生成

イテレータとリストは交換可能

イテレータを評価してリストを生成する。リストを評価してイテレータを生成。

暗黙的マッピング

普通の関数

マッピング対応関数 アトリビュート :mapをつける

暗黙的マッピング

  • 数値
  • リスト
  • イテレータ
  • 数値とイテレータ

いろいろなルールがある

メンバマッピング

関数

リストが欲しいときはアトリビュート:listをつけて呼出し

繰り返し制御構文

:iter アトリビュート

繰り返し処理の評価値がイテレータの要素値になる

for文を書いても何も実行しないで、printlnとかをはさむと実行される

拡張モジュール

  • インタプリタ本体はOSに依存しない
  • importで呼び出す

Gura Shot

www.gura-lang.org

PythonによるWebスクレイピング入門 #lldiver

PythonでWebスクレイピングを行うためには、いろいろなアプローチが存在します。このセッションでは、Webスクレイピングを行う場合に、有用なライブラリの紹介、クローリング、データの取得方法などについてお話しします。

Webスクレイピングとはなにか

  • WebサイトからHTMLデータの収集
  • 特定データを抽出、加工
  • 抽出したデータを再利用
  • クローラー、スパイダー

English 削る ページから必要な内容を抽出する

用途

  • 検索エンジン
  • 価格比較
  • 気象データの監視
  • マッシュアップ

など

方法1

  • kimono
  • import.io
  • Yahoo Pipes

方法2

Ruby

Perl

Pythonでのスクレイピング

  • 標準ライブラリ
  • BeautifulSoup
  • pyquery
  • Scrapy(読み方が結構揺れてるけどスクレピー)

Python=バッテリー付属言語

標準ライブラリ

ネットワーク、正規表現

処理系だけあればいいので、簡単なスクレイピングであれば結構実用的なものが標準ライブラリだけで出来るくらいライブラリが充実している

BeautifulSoup

  • 2004年からあるライブラリ
  • HTMLやXMLからデータを抽出して取得できる
  • 複数のパーサに対応してて、パーサを指定できる
  • 最新バージョンは4系

pyquery

  • jQuery風にHTML/XML操作が可能
  • パーサーはlxmlを仕様(高速)
  • jQueryのセレクタが使える
  • スクレイピング

Scrapy

  • Scrapyは早くて、ハイレベルなスクレイピングクローラーのフレームワーク

  • クローリング スクレイピング

  • シンプル、拡張性がある
  • バッテリー付属
  • ドキュメント テストが充実
  • コミュニティが活発
  • 3系には未対応

  • Webページから情報抽出

  • Robots.txtのパース
  • IPアドレス単位のクロール間隔を調整する

Scrapy Engine

  • 全てのコンポーネントを制御

手順

  • Scrapyプロジェクトの作成
  • 抽出するアイテムの定義
  • アイテムの抽出とクローリングのためのSpiderを生成

matome

  • Pythonでスクレイピングをやる場合は様々なアプローチがある
  • 要件にあわせて使用すればよい
  • LLにはスクレイピングライブラリが沢山ある

Emacsの紹介 #lldiver

Emacs歴8年

quickrun.el開発

coffee-modeとかemacs-jediのメンテ

pecoの共同オーサー

など

Emacs

Editing MACroS

  • 設計 コア部分は小さい
  • 大部分はEmacs Lispで実装
  • ゆえにほぼすべてがカスタマイズ可能

Vim >>>>>>>>> Emacs

Lisp系言語のユーザが多い

Emacsユーザは少ないのか

Common Lisp Scheme Clojure

rebuild.fmで扱われる

Emacsの好きなところ

最もプログラマブルなエディタ

Scratch BufferでEmacs LispをかいてEvalして…

VimとかAtomとかだとこうはいかない