技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

LL Ring 行ったメモ

LLRing memo

第一試合 Ruby vs Perl vs PHP vs JS

Python はイベント衝突で不参加

Javascript

ECHMA Script 2015 が発表、ECHMA 6 が名称変更で、正式公開。
言語仕様の追加が行われてる。

JavaScript の仕様が変わるとみんな地獄をみる。しかし、ALT JS なんか結構出てきたんだ。
ES2015 では class, ラムダ式 なんかが入る。
Babel というプロジェクトで、新しい文法を書きつつ、ES5 以下のコードにコンパイルもできる。

モダンな書き方に移行しつつある。
let,val などもそうだが静的型に寄ってきた。
言語仕様として強制が大きい。

ここがすごい

世界で一番動いてるはず。
Acrobat reader にすら乗ってる(結構攻撃に使われるけどね)
地デジでも使われる。

全部 immutable なのはいいんだけどさ。

いまいち

数字の Number が浮動小数点なんだよね。
64bit 整数とか扱えないんだよね。
ES2015 から、整数演算のやりようができる…。

NaN に隠しデータを持たせることがテクニックとしてある。

この辺がいい

コンパイラのバックエンドをされたり、ソースマップ機能があるので、デバッグも容易。
ビット演算をすると、32bit 整数に変換される。
言語仕様を逆手に取るのが普通

PHP

PHP7 がそろそろ出る。
現在 RC2 で 11月に正式版が出る。

PHP7 で速度が倍!基本のデータ構造が変わる。
内部の構造が大きく変わったという話で、PHP コードはあんま変わんない。
C で書いた extention なんかが死ぬ可能性大。

ここ数年で、無名関数とか少しづつ入った。しかし、言語的に強制はしない。
一応 PHP7 から少しづつライブラリが変わる。

ここがすごい

ちょっと困っちゃう…。
追いついたと思うと、他のは先に行ってる…PHP は共和制だからなぁ。
カリスマ主導者ないよね

いまいち

非同期の扱いがないからなぁ。
言語仕様も貧弱だからなぁ。

この辺がいい

Perl

Perl5 が不定期更新だったが、年1度にバージョンアップに変わった。
Perl6 を今年のクリスマスに出す!(ラリー・ウォール氏)

Perl6 は完全に互換性がない。
ともかくたくさんの意味不明なオペレータがあるwww
内積をとるとか、配列のreduceをとるオペレータとか…
今回からクラスがきちんと入ってる。
文字列連結とか色々変わった。「.」から「~」に、「.」はメソッド呼び出しに変更。

基本的にバージョンアップで何も動かなくなる。 余計な言語仕様を削除していく方向も。

ここがすごい

機能が豊富。
パーサーを書く機能まで入ったし、言語仕様自体も改変可能。
Perl6 で書かれたVMで動いてる。

いまいち

Perl6 は遅いし、Perl5 はもう変化ないんだよね。
Perl5 の 100 倍遅い…。
最近 JIT 頑張ってる

この辺がいい

Perl5 でパーサーを自分のコードで乗っ取りができる。
まじ正規表現はダントツだよね〜。

正規表現で普通にパーサー書けるくらいだぜ。

Ruby

Ryby 2.0 が出たので、仕様変更は抑えめ。
クリスマスに 2.3 が出る。
最近は速度改善がメイン。
バイト列の扱いが大きく変わって一部が泣いた。

文字列リテラルが全部 immutable にするぞーとか言い部が騒いでる。

2.0 で古いのがっさーいった。
バイト列を自分で操作するのは止めましょうとかそういう方向。

ここがすごい

Rails があるところ!むしろ Rails のためのランタイムだ!
Bundler もすごいよ?

いまいち

JRuby とか羨ましい、ブラウザで動く JavaScript とかいいなぁ。
ネイティブエクステンションでひどいことになってるけどきれない

この辺がいい

C 拡張ライブラリが書きやすいし、ライブラリが一通り揃ってるからね。
PHP を dis るのに非常に便利?

質疑

JavaScript

問:typescript の機能は、ES6 にいつ入る?
ES7 が検討中で、どこまで入るか不明。
型は、Babel で対応しているし、今後それが普通になる。

JavaScript

問:node って JavaScript と仕様上何か影響がある?
これまで、ブラウザ依存の処理系だったんだけど、nodejs は純粋な言語仕様の世界。
そのおかげで、言語仕様としての論議が発展した感じがある。
ES6 で import とか入ってくる。モジュール化も仕様として入ってきた。

LL で MultiThread はどうなるかね?

  • JavaScipr: nodeJSどおよ?
  • PHP: 1リクエスト1レスポンスでしか考えない。
  • Perl6 : Thread は当たり前、でも fork はないかな?
  • Ruby : JRuby やれや、マルチプロセスでってのは課題。書けるけど、ライブラリへぼいか?GO で拡張ライブラリ書けるから、それでやるんじゃね?

言い残したこと

  • JavaScript : Babel やってよー楽しいぜ?
  • PHP : あんま愛を語ってないことか…早くなるのは楽しみか?
  • Perl6 : リリース直前!触ってて楽しいぜ?
  • Ruby : クリスマスに 2.3 出ます、そろそろまた会議あるので、提案出してください!
続きを読む

「AUひかり」で買ってきたルータを使うときの注意

まず、AUの課金の仕方がひどいと思った…とはいえ、建物がAU契約なのでほかの選択肢がなかなかなかったのだが、ともかくひどい。

  • 無線LANを使うには別契約が必要(追加課金)
  • 替えの性能いいルータをレンタルするなら追加課金

ルータすら契約上「貸与」で、もっといいルータ使いたかったら追加課金…

別にルータだけの問題じゃね?と思って、本日ヨドバシカメラBUFFALO WZR-1750DHP2/N を買ってきた。
契約 so-net で、PPPoE の設定も契約書に書いてあるので、全く気にしなかった。

で、問題が発生する。

ケーブルをすべて差して、電源を入れ、PPPoE 設定をしてもインターネットにつながらない事象が発生した。

("゚д゚)ポカーン

そこで解決のために行った変遷は以下の通り。

  • ともかくいろんな設定項目も見直す → どれも標準的に PPPoE 設定がされている
  • 同じルータでPPPoEした人の資料見る → ほぼ一致
  • 前のルータ(au から貸し出されてるやつ)の WebAdmin を調べる → PPPoE 設定が項目としてない(!?)ってことはルータ自体がカスタムされてる?
  • ルータの型番からググって、ドキュメント見つける → どうもベンダー側で設定してレンタルに出している模様
  • ルーター自体 au ひかりにくっついてる? → 検索ワードに「au ひかり」を追加

そして見つかった答え。

www.iesod.com

そしてそこにあった原因を見て呆然とした。

ルーターMAC アドレスを認識して、弾くようになっている」

俺、引っ越したら絶対 au 使わないんだ…。

そう言いたくなる作りである。
ただでさえ挫折する人が多いルーターの、MAC アドレスまで見て、指定以外のルーターを蹴ってる(屋内端末のほうだと思われ)ようだ。

幸い、「BUFFALO WZR-1750DHP2/N」は MAC アドレスを変更する機能があったから良かったようなものの、まさかルータの機能どころか、ルータ自体まで人質にして金をせびる体質だとは恐れ入る。

尚、デフォルトルータにはセキュリティホールがあり、こんな告知 がされている。
どう見ても CSRF 攻撃です、本当にありがとうございました。

なんかもう紹介せざるを得なかったScala記事「バカ向け言語Scala」

まともにモジュール化設計もできていない保守不能糞コードの設計者を「エリート様」と皮肉って、「バカな私は、シンプルさを求めたScalaを使う」と言う記事。

センスに溢れて「いいぞーもっとやれー」と応援したくなってしまいました。

rirakkumya.hatenablog.com

では、ここで真面目に補足もしておきたい。

シンプルに書くのはバカにはできません

シンプルに書けるよう設計するというのは、実は相当難しい。
以前紹介した「ReadableCode」なんて書籍が書けてしまうくらい、可読性を高く、可能な限り多くの人が保守できる設計というのは実はかなり難しい。

KISSの原則 - Wikipedia

では逆に「シンプルにしていない者こそバカ」と言い切ってる。

タイトルに反してScalaはバカ向けなのか?

もちろんここの「バカ」は 「Coboler のようなエリート様」と対比するための皮肉なのは百も承知だが、それを脇に置いておいたとしても、Scala を真面目に理解してそれらしく書くのはきっとバカには無理じゃないかと思う。

よく入門書として使われている、コップ本 なんかは有名なのだが、これもなかなかの厚さを持っている。

つまり学習コストはそれなりに高い。

  1. JVM システム同様に、オブジェクト指向を強要する
    何を今さらと言われるかも知れないが、業界で働いていても「オブジェクト指向の3点セットは?本質は?」で躓く人は結構多い。
    技術ブログ書いてたり、勉強会行く人間には「何を今さら」なレベルなのだが、現実問題一つのハードルと考えていいハズだ。
    まして ScalaJava よりもオブジェクト指向が徹底している。
  2. 関数型の思考もそれなりに要求する
    関数型の思考で最たるものは、「関数」が第一級オブジェクトであるという考え方だ。
    「関数というオブジェクトを作成して、定数、変数、引数、返値にしたうえ、その先で実行できる」という事を理解すること。
    実は JavaScript もその意味では関数型なのだが、この思考も一つのハードルになる。
  3. 豊富なコレクションメソッド
    どちらかというと関数型言語の真価の一端といった方がいいかもしれないが、
    Scalaコレクションメソッドメモ(Hishidama's Scala collection method Memo)
    使いこなせ…というのは酷だとは思うが、何かに触れ「そういやこんな事ってできたような…」と思って調べようと思えるくらいの全容把握にどれくらいかかるか?

基礎レベルですらこれだ
また、省略可能な規則の把握、DSL の設計等も含めて、果たしてそれがバカにできる事だろうか?

それにより、海外の企業向けソーシャルを行っていた Yammer (現Microsoft傘下)は、Scala の採用をやめてJavaに移行し始めた。

言語としてのScalaは興味深い特徴を持っている。しかし、とても複雑な言語でもある。 Scalaがもたらす概念や実装に加えて、自然なScalaを書こうとする文化がある。これを突き詰めるとある時点でベストプラクティスが現れる。それは、コミュニティを無視することだ。 後になって気付いたことだが、私はScalaを学ぶこと(教えること)の難しさと重要さを低く見積もりすぎていた。というのは、Scalaの経験のある開発者を雇うのは不可能だからだ。これは思ったよりも遥かに大きな問題だ。

内容は 2011 年のもので、今と情勢が違うのは間違いないが、要するに

  • 学習コスト高くて、きちんと使うのはなかなか難しい
  • そもそも Scala エンジニアは数が少なすぎて雇えないから、チームの習熟には余計にコストがかかる

という話だ。

求人を見ると Scala エンジニアの募集は速攻で見つかる。国内なら尚更だ。
逆を言えば

それだけ Scala が使えるエンジニアが足りてない

という事の裏返しとも言える。

バカでも使えなくはないScala

正確にはこう言うべきかもしれない。
Java っぽく書こうと思えば書けるし、関数型っぽく書けると言えば書ける。

独習 Scalaz — 独習 Scalaz

とも書く、書いて動かすだけなら、(静的型の割には)凄まじく自由に書ける。

しかし、使いこなそうと思ったら、本にして人を殴り殺せそうな量の仕様を把握する必要がるということだ。

でもやってみればそこまで恐れる程でもないよ?

とってつけた(ホントそう)ようで申し訳ない。散々脅しておいてなんだが、言うほど怖い話でもないんじゃないかと思う。

要は、毛嫌いせずにやってみればきっと気に入る言語だってレベルの問題でしかない。

学習コストといっても、言語使用の数は Ruby の学習コストとそう変わらない。
むしろ静的型の制約が入る分、Ruby より楽かもしれない。

Java/Scala 比較。一定期間の曜日ごとの購買集計

単純なお題。

標準出力から、日数と、その日数に応じた日々の購買金額が入力されたとき、曜日ごとの集計額を計算しなさい。 ただし日数は 7 の倍数であることが保証され、曜日の先頭は日曜日である。

入力例:

14 日間を指定、各日付の購買数は、下記の通りの場合 7,8,9,10,11,12,13 3,9,8, 7, 7, 1, 4

14
7
8
9
10
11
12
13
3
9
8
7
7
1
4

出力例:

10
17
17
17
18
13
17

これを満たすプログラムを書く。

続きを読む

Play2.4 の DI を弄ってみる

まず適当に Singleton アノテーションをくっつけて使用する。

package utils.modules

import javax.inject._

/**
 * アクセスカウンター
 */
@Singleton
class AccessCounter {

  @volatile private var price = 0

  def add(p: Int) = price += p
  def get = price
}

そしたらコントローラでそれを Inject で利用する。

class Application @Inject() (accessCounter: AccessCounter) extends Controller {
  def index = Action {
    accessCounter.add(1)
    Ok(views.html.index(s"CurrentCount is ${accessCounter.get}."))
  }
}

凄まじく単純な使い方だ。

続きを読む

Playframework 2.4.x でセキュリティヘッダの設定など

まず前提として、Playframework にはフィルタという機能がある。

Playframework 2.3.x 以下の場合は、Global オブジェクトにミックスインする形式をとっていた。

ScalaHttpFilters

だが、Playframework 2.4.x 以降は、DI も含めて形式が変更となり、root パッケージに、Filters クラスを配置する形式に変わった。
名称の変更方法などは、公式を見て欲しい。

ScalaHttpFilters

そもそもが 2.4 のロードマップに、Global を廃止して、Plaggable である事を謳っているので、この方針変更は移植の時注意すべき点だろう。

で、実装方法については、下記の操作を行う。

標準で用意されているヘッダーを使う準備

まずは、./build.sbt の libraryDependencies に filters を追記する。これには Cross-Origin Resource Sharing Filter, GzipFilter, SecurityHeaderFilter 機能が入っている。

libraryDependencies ++= Seq(
  filters,
  jdbc,
  cache,
  ws,
  specs2 % Test
)

Filters.scala の実装

次に、Filters を作成して、フィルタの実装を行う。
今回は Gzip と Security だけ適用してみる。

import javax.inject.Inject

import play.api.http.HttpFilters
import play.api.mvc.EssentialFilter
import play.filters.gzip.GzipFilter
import play.filters.headers.SecurityHeadersFilter

/**
 * Example filters.
 * Created by azalea on 2015/08/23.
 */
class Filters @Inject() (gzipFilter: GzipFilter,
                         secure: SecurityHeadersFilter) extends HttpFilters {

  val filters: Seq[EssentialFilter] = Seq(gzipFilter, secure)
}

なんとこれで設定は完了。

続きを読む

LoT LT行ってみた(追記)

iotlt.connpass.com

みっけたのでリンク

メモだけざっくり。 整理はしない。

キーワードだけ拾えればいいかな的な発想。

前段

IoT Letter というサイトがある。 IoT 関連書籍やイベント、記事ソリューション等を中心に情報を集約してる。

dots.

会員制で、8月中は無料らしい。

イベント会場、もしくは working space としての貸し出し。 飲食可能で、wifi 電源完備。 ホワイトボード、モニターの無料貸し出しをしている。 コミュニティや有志の勉強会時の貸し出しは無料。

IoTメーカーに求められること:サービス化 佐藤 氏 @ Qrio

ものだけではなく、物事も含まれると考えられる。 人にできない事を、もの同士のつながりを経て自律的に動くべきだ。

ホームオートメーションの会社です。

Qrio :スマートロック。スマートフォンで鍵を開ける。LINE や Facebook で鍵を共有できるとか。

ソリューションを提供できる。例えばGEがジェット機のエンジンをサブスクリプションで販売したりとか。 離陸から着陸までを課金してる。

IOT はサービス提供の時代ではないか?

モノのMASHUPで作る ✄ ちょっぴり未来の生活 五十嵐 氏 @ Ladicle

ガジェットオタ!

朝Hueが部屋をゆっくり明るく RassberryPi が勝手にカーテンを開ける VoiceText + WebAPI で予定を読み上げ IR Kit + Lift で出社と同時に家電が消える

17:00 にエアコンが自動起動 netatmo + IFTTT Wifi の SSID 検出で居室に入った瞬間に電気がつく

Fitbit で血圧見て、0 時過ぎに寝落ちしてたら消灯

いろいろできる

CDNのマルチプロトコル対応にして 鍋島 公章 氏

IoMT という言葉。 Internet of multimedia things. IoT のマルティメディア対応。 カメラやマイク、映像や音を扱う。

Medical とかいろいろあるけどね〜

カメラ 画素数が一気に進化、マルティメディア分析(声紋とか。個体数認識とか)、ユースケースとしても、気象認識とかもできる。 防犯カメラも、カメラタグでモーションJPEG変換して、トランスコードでH264にでもして、gateway経由で、BaaS に投げるとかできる。

やろうぜ!おうちハック 木村 氏 @ リノベる / 大和田 氏 @ SONY CSL

「萌え家電」出した。 いろいろネットでできるように家電を改造する=おうちハッカー

Kadecot なんてものも出してる。

やろうずおうちハック!

入ってください「おうちハック同好会」

JS Board Shibuya立ち上げました(仮) 川野 氏 @ テクニカルロックスターズ

milkcocoa やってるひと JavaScript で動くデバイス = JSBoard

JSBoard-Shibuya = みんなで集まって javascript でいろいろいじってみる勉強会

全てのデバイスが JS で動けばいいと思う。

8pino とか弄ってる最中。 hako.js とか。 johnny-five とか

助け合うコミュニティです。

Tech in Asia IoT Business Campについて(仮) 伊澤 氏 @ ハタプロ

シンガポール拠点の IoT 共同イベント。 初心者歓迎 定員 50人までの少人数制。 2day の IoT 起業を体験。

IoT 推進企業が金出してる。

続・NFCおじさん(仮) 山本 氏 @ バニーホップ

nfcpy 0.10.0 ではまった話。

オムロン体温計とか NFCで通信できるらしいという声で試してみた。 でも、通信内容が非公開。逆汗は法的にアウトだからね。

nfcpy のマイナーバージョンが変わった。 Suica 履歴を取得するとかだいぶ変わった。

NFCタグのパスワード認証に対応したとか、Type4B (運転免許所)とかに対応。

がっつりソースが変わってる…。 代わりにかなり細かい制御ができるようになったけどね。

なんでバージョンアップですげーはまります。

9軸センサー+BLEを搭載したArduino互換のスポーツセンサーボード Q.board のご紹介 平野雄一 氏@リクルートマーケティングパートナーズ

3cm x 2cm サイズのボードで、9軸センサー。 スポーツ関係でよく使える。

Arbuino 環境をそのまま使える。

BLE でデータを飛ばせる。CPU に浮動小数点演算ユニット持ち。

CPU 64MHz 8MB Strage

義足に組み込んだり、リハビリアシスト装置に突っ込んだりしてる。 バーチャル人形とか、ゲームに使ったりとかしてる。

フリスクでBLEアプリを作ってみた 呉屋寛裕 氏@ニフティ株式会社

FRISK に REBL600FR 突っ込んで使える。 BLE インターフェースがある。

組み込みはいがいとやってみりゃできる。

感情インタラクション のびすけ 氏@LIG / TOLABL

Hue 弄ってる。プログラムできる ライト。 「こころコンパス」というテンポ、音程等から感情を分析する。

これを使って、発音、音量、ツイート、熱気を使っていろいろできそう。 ともかく可視化は楽しい。

この勉強会、次回:9/15 に第7回をやる予定