「WebSocket」を含む日記 RSS

はてなキーワード: WebSocketとは

2017-09-18

あのさあ・・

追記。自己解決しました。解決編は後編で。前編は、あたふたしたこと履歴になっております

1

$ rake setup
rake aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)

(See full trace by running task with --trace)

は?

 

$ git clone https://github.com/hanachin/rurema-kaku
Cloning into 'rurema-kaku'...
remote: Counting objects: 47, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 47 (delta 20), reused 44 (delta 17), pack-reused 0
Unpacking objects: 100% (47/47), done.
Checking connectivity... done.

$ cd rurema-kaku/

$ ls
Gemfile  Gemfile.lock  Guardfile  README.md  Rakefile  config.ru

$ rake setup
rake aborted!
/rurema-kaku/Rakefile:24: unknown type of %string
directory "public/theme" => %i(bundle_install public) do
                               ^
/rurema-kaku/Rakefile:24: syntax error, unexpected $end
directory "public/theme" => %i(bundle_install public) do
                               ^

(See full trace by running task with --trace)

あれかな。

 

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

たぶん、これ。

 

2

$ rbenv commands
--version
commands
completions
exec
global
help
hooks
init
local
prefix
rehash
root
shell
shims
version
version-file
version-file-read
version-file-write
version-name
version-origin
versions
whence
which

installがない?

 

$ rbenv --version
/usr/lib/rbenv/libexec/rbenv---version: 17 行: cd: /home/unko/.rbenv: そのようなファイルディレクトリはありません

詰み。

 

rubyやーめた

 

3 - bash on Windows

$ rake setup
-bash: /mnt/c/Ruby23-x64/bin/rake: C:/Users/Justin/Projects/rubyinstaller/sandbox/ruby23_mingw/bin/ruby.exe: bad interpreter: No such file or directory

Justinって誰だよww

 

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

こっちの環境でも古かったか・・

 

 

rubyやめるしかないな

 

 

4

# apt-get install ruby-build
# rbenv install -l
usage: rbenv install VERSION
       rbenv install /path/to/definition

Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  1.8.7-p357
  1.8.7-p358
  1.9.1-p378
  1.9.2-p180
  1.9.2-p290
  1.9.2-p318
  1.9.2-p320
  1.9.3-dev
  1.9.3-p0
  1.9.3-p125
  1.9.3-p194
  1.9.3-preview1
  1.9.3-rc1
  2.0.0-dev
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.6.5.1
  jruby-1.6.6
  jruby-1.6.7
  jruby-1.6.7.2
  jruby-1.7.0-preview1
  maglev-1.0.0
  rbx-1.2.4
  rbx-2.0.0-dev
  ree-1.8.6-2009.06
  ree-1.8.7-2009.09
  ree-1.8.7-2009.10
  ree-1.8.7-2010.01
  ree-1.8.7-2010.02
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02

古いような気がする。

 

 

# apt-get upgrade rbenv
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
rbenv is already the newest version.
The following package was automatically installed and is no longer required:
  os-prober
Use 'apt-get autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

# apt-get upgrade ruby-build
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
ruby-build is already the newest version.
The following package was automatically installed and is no longer required:
  os-prober
Use 'apt-get autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

ruby界隈もうダメだな

python流れるのがうなずけるわ

 

 

5

なんとかしてruby 2.4をパッケージマネージャからインストールソースからビルドじゃないよ。やり方は教えません。

# rake setup
bundle check || bundle install
The following gems are missing
 * progressbar (0.21.0)
 * rack (2.0.3)
 * bitclust-core (0.9.5)
 * coderay (1.1.2)
 * eventmachine (1.2.5)
 * http_parser.rb (0.6.0)
 * em-websocket (0.5.1)
 * ffi (1.9.18)
 * formatador (0.2.5)
 * rb-fsevent (0.10.2)
 * rb-inotify (0.9.10)
 * ruby_dep (1.5.0)
 * listen (3.1.5)
 * lumberjack (1.0.12)
 * nenv (0.3.0)
 * shellany (0.0.1)
 * notiffany (0.1.1)
 * method_source (0.8.2)
 * slop (3.6.0)
 * pry (0.10.4)
 * thor (0.20.0)
 * guard (2.14.1)
 * guard-compat (1.2.1)
 * multi_json (1.12.2)
 * guard-livereload (2.5.2)
 * spoon (0.0.6)
 * guard-rack (2.2.0)
 * rack-livereload (0.3.16)
Install missing gems with `bundle install`
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Installing progressbar (0.21.0)
bInstalling rack (2.0.3) und                                                                                           
Installing bitclust-core (0.9.5)
Installing coderay (1.1.2)
Installing eventmachine (1.2.5)
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.4.0/gems/eventmachine-1.2.5/ext
/usr/bin/ruby2.4 -r ./siteconf20170918-66-19devli.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.4.0/gems/eventmachine-1.2.5 for inspection.
Results logged to /var/lib/gems/2.4.0/extensions/x86_64-linux/2.4.0/eventmachine-1.2.5/gem_make.out
An error occurred while installing eventmachine (1.2.5), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '1.2.5'` succeeds before bundling.
rake aborted!
Command failed with status (5): [bundle check || bundle install...]
Rakefile:13:in `block in <top (required)>'
Tasks: TOP => setup => template => bundle_install
(See full trace by running task with --trace)

まらんなあ・・。

 

 

6

5はbash on Windows特殊環境下ってのは否めなかったので、やむを得ずネイティブLinuxで。

 

同じエラー発生。

# gem install eventmachine -v '1.2.5'
Building native extensions.  This could take a while...
ERROR:  Error installing eventmachine:
	ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.4.0/gems/eventmachine-1.2.5/ext
/usr/bin/ruby2.4 -r ./siteconf20170918-3352-1g6kzdu.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.4.0/gems/eventmachine-1.2.5 for inspection.
Results logged to /var/lib/gems/2.4.0/extensions/x86_64-linux/2.4.0/eventmachine-1.2.5/gem_make.out

# apt-get install ruby-dev
パッケージリストを読み込んでいます... 完了
依存関係リー作成しています                
状態情報を読み取っています... 完了
ruby-dev はすでに最新版です。
以下のパッケージ自動インストールされましたが、もう必要とされていません:
  libntdb1 linux-headers-4.2.0-27 linux-headers-4.2.0-27-generic
  linux-image-4.2.0-27-generic linux-image-extra-4.2.0-27-generic python-ntdb
これを削除するには 'apt-get autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 414 個。

# apt-get upgrade ruby-dev
パッケージリストを読み込んでいます... 完了
依存関係リー作成しています                
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています ... 完了
ruby-dev はすでに最新版です。

rubyで消耗するのやーめた

 

 


 

rubyLinux界隈が*年経っても使えないので、work aroundで自己解決しました。

 

まずは、rurema-kaku

https://github.com/hanachin/rurema-kaku

$ git clone https://github.com/hanachin/rurema-kaku
$ cd rurema-kaku/
$ rake setup

以降、うまくいく場合は、そのままで。なんかしらエラーなっちまった場合は、↓が参考になるかもよ?なお、bash on Windowsでやってる。

 

ruby、他をインストール

ruby 2.4

https://stackoverflow.com/questions/26595620/how-to-install-ruby-2-1-4-on-ubuntu-14-04>|

$ sudo apt-add-repository ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.4

複数バージョンを混在させて・・みたいなのもできるみたいだけど、クソなのでキーワードだけ:rbenv

 

rake
$ sudo apt-get install rake

コマンド履歴にあったので、一応。)

 

ruby-dev(知らん)

http://qiita.com/mrmr/items/24302bc9812c820bda91

$ sudo apt-get install ruby2.4-dev

 

↑だけでダメだったら、↓を手当たり次第試す

$ sudo apt-get install ruby2.3-dev
$ sudo apt-get install ruby2.2-dev
$ sudo apt-get install ruby2.1-dev
$ sudo apt-get install ruby-dev

 

bundler(まったく不明
$ sudo apt-get install bundler

(ほんとは、gemからインストールする??てか、aptgemで違うもん?だよなw これもコマンド履歴にあって、なんかしら効果があったような気がしたので・・。)

apt installしなくても、rake setup 時に必要なのがインストールされるかも)

 

愚痴

こんなの2017年にやることじゃないだろ・・。Linux終わったな。

 

ruremaに戻る

$ rake setup
$ bundle exec guard

ブラウザで、http://localhost:9292/ 開いて、「るりま書く」ってでてきた。たぶんOK・・だと・・と思う・・。

doctree/refm/api/src 配下の*.rd? あたりかなと思うけど、なんかなにやればいいかわからん感じ。

2017-09-11

https://anond.hatelabo.jp/20170910205249

まじな話をすると、N予備校プログラミング入門コースやるのがオススメ

https://www.nnn.ed.nico

一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。

月額1000円だけどしっかり勉強すれば一ヶ月の無料間中に終わると思う。

もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラム講師曰く去年はこれで二人エンジニア就職を決めたらしい。

内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職必要な環境構築やセキュリティまでみっちりやる。

http://qiita.com/sifue/items/7e7c7867b64ce9742aee#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%A8%E5%86%85%E5%AE%B9

講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。

↓みたいなことが学べる

----

Webプログラミング入門コース

Web ブラウザとは (Chrome, デベロッパーコンソール, alert)

はじめてのHTML (VSCode, HTML, Emmet)

さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)

HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)

はじめてのJavaScript (JS, ES6, エラー)

JavaScriptでの計算 (値, 算術演算子, 変数, 代入)

JavaScript論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)

JavaScriptループ (ループ, for)

JavaScriptコレクション (コレクション, 配列, 添字, undefined)

JavaScript関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)

JavaScriptオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)

はじめてのCSS (CSS, セレクタ, background-color, border)

CSSを使ったプログラミング (transform, id, class)

Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)

診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)

診断機能組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)

ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)

Linux開発環境構築コース

LinuxというOS (VirtualBox, Vagrant, Ubuntuインストール, OS, CUIの大切さ)

コンピューター構成要素 (ノイマンコンピューター, プロセス, lshw, man, ps, dfの使い方)

ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)

標準出力 (標準入力標準出力標準エラー出力パイプgrep)

vi (vimtutor)

シェルプログラミング (シバン, echo, read, 変数, if)

通信ネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)

サーバークライアント (tmux, nc, telnet)

HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)

通信をするボットの開発 (cron, ログ収集)

GitHubウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)

イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)

GitとGitHub連携 (git, ssh, clone, pull)

GitHubへのpush (init, add, status, インデックス, commit, push, tag)

Gitのブランチ (branch, checkout, merge, gh-pages)

ソーシャルコーディング (コンフリクト、プルリクエスト)

Webアプリ基礎コース

Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)

集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)

アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)

ライブラリ (ライブラリ, パッケージマネージャー, npm)

Slackボット開発 (slack, mention, bot)

HubotとSlackアダプタ (hubot, yo)

モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)

ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)

同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)

例外処理 (try, catch, finally, throw)

HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsイベントループ, リスナー)

ログ (ログ, ログレベル)

HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)

HTMLフォーム (フォームの仕組み, form, input)

テンプレートエンジン (テンプレートエンジン, jade)

HerokuWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)

認証利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)

Cookie を使った秘密匿名掲示板 (Cookie, Set-Cookie, expire)

UI、URI、モジュール設計 (モジュール設計, フォームメソッド制限, リダイレクト, 302)

フォームによる投稿機能の実装 (モジュール性, textarea, 303)

認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)

データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)

トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)

削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)

管理者機能の実装 (Web サービス管理責任, 管理者機能の重要性)

デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)

脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)

XSS脆弱性対策 (XSS, 適切なエスケープ処理, リグレッション)

パスワード脆弱性対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)

セッション固定化攻撃脆弱性対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)

より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)

CSRF脆弱性対策 (CSRF, ワンタイムトークン)

安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)

Webアプリ応用コース

Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)

ExpressのAPI (app, Properties, Request, Response, Router)

GitHubを使った外部認証 (Passport, OAuth)

スティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)

継続的インテグレーション (CircleCI)

クライアントフレームワーク (Webpack, Chrome 以外のブラウザでもES6)

DOM操作フレームワーク (jQuery, jQueryアニメーション, this)

AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)

WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)

RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)

データモデリング (リレーショナルモデル, 正規化)

テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)

インデックス (インデックス, 複合インデックス, Bツリー)

集計とソート (SUM, COUNT, ORDER BY, GROUP BY)

「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計モジュール設計、MVC)

認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)

予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)

予定とユーザーの一覧の表示 (非同期処理, Promise, then)

出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)

出欠とコメント更新 (Promiseチェイン, リファクタリング)

予定の編集と削除 (要件の衝突, 関数再利用)

デザインの改善 (this, グローバルオブジェクト)

セキュリティ対策と公開 (X-Frame-Options, Heroku環境変数)

2016-08-23

cocos2d-xって作者は中国人じゃなかったっけ?

他にも色々ある気がする

中国国家自体はアレだが、レベル高い人は多い

宇宙関係とか

github漁ってても中国人面白い人は多い

韓国人ロシア人

nettyは韓国アップル社員だった気がする

ロシア人websocketjavaコードは参考になった

コンピュータ関係なく、ググってブログ自動翻訳で読みたくなる文はある

中国語フランス語ロシアドイツ韓国

INRIAでフランス語の文ってのもあった気がする

英語公用語戦勝国だし妥協で認めるが

Luaweb周り書いてた人は中国系アメリカ人だった気がする

中国系アメリカ人優れた人多いよね

2016-05-16

http://anond.hatelabo.jp/20160516194527

いや、おまえは、単に、マウスイベントを拾って、FRPストリームに流す、という接続部分、つまりFRP変数への書き込みについて、イチャモンつけてるんだよな?おまえにとっての「自動」の「同期」って何?

マウス位置と、変数自動的に同期してくれる

マウスイベントなりをラップしたFRPライブラリで、そのラップイベント宣言したら、ラップ変数自動的に流れるとかそういうこと言いたいんだろうが、そこからその変数関数なりで変換して行くのに、それがラップされてようがされてまいが、手間はまったく一緒だって理解してる?

あと、そういう既知のイベントなら、既知のマウスイベントなりを全部ラップしてやろうとおもえば、やれないことないだろうし、できるが、

既知ではない、FRPライブラリラップされてないIOイベントとかどうすんの?w あほなの?w

たとえば、HTTPイベントWebSocketイベント、全部FRPライブラリラップして、

>マウス位置と、変数自動的に同期してくれる

みたいにやるのか? 誰かが書いてくれるまで待つとか?w

あと、マウス位置から10オフセットさせたい、とかオプションも無数にありうるわな?

オプションサポートされてないラップだったらどうすんの?w やっぱアホなの?w

最初からネイティブイベントあったら、かんたんにできるだろ?ラップAPI参照せずにすむだろ?あほなの?w

あと、そういう原理的にアホな実装FRPライブラリかくあるべき!って誰が決めたの?アホなおまえが決めたの?w

2016-03-24

サーバスペックが低くても負荷の高いサイト運用したい

何を作りたいかというとマルチプレイヤーブラウザゲームが作りたいんだよね。

phpsymfonyを使ってみたけど重い。

俺の開発用のceleron 1コアのメモリ1GB環境では重すぎる。

isoファイルを10000個同時にダウンロードしてるぐらい重すぎる。

ページの読込みがなかなか完了しない。

こんなクソ重いフレームワークはそれなりのサーバスペックがないとパフォーマンスに影響が出すぎるので除外したい。

phpフレームワーク一般に言えるんだけどプロジェクト毎にプロジェクトルートなかにフレームワークのコアファイルを置くのがなんか嫌だ。

railsdjangoのように分離させてほしい。

nodejsシングルスレッドなので負荷の高いサイトで使うのは厳しそう。

pythonでもgolangでもwebsocketは使えるのでnodejsにこだわる必要もないしvert.xを使う選択肢もある。

日本ではvert.xの話題あんまり盛り上がってないよね。どこかの企業さんが実践で使いましたって記事を書いたら会社の知名度が上がると思う。

scala,golang,elixirこの3つの選択肢でいいのかな。

でも負荷の高いブラウザゲームやってる会社ってrailsとかphpだよね。

railsphpでも問題ないのかな。

redisをうまく活用しとけばあんまりそれ以外でボトルネックとなるようなことって無いのかな。

艦これやってるdmmとかは何使ってるんだろうね。

スクエニさんのオンラインドラクエもどうやってるんだろうね。

あと海外ブラウザゲームってほとんどがaws使ってるのでaws使えばいいのかな。

でも怖いよね高額料金を請求されたらさ。

金儲けの為にサイトを作らないとawsは使ってられない気がする。

初めのスタートダッシュは定額制のレンタルサーバクラウドでいいか。

2015-08-27

WebSocketでなんか作りたいんだけど、アイディアがない

からない人に説明すると、WebSocketっていうのはチャットとか対戦麻雀みたいな

リアルタイム性の高いWebサイトを作るための技術で、今僕はこれについて勉強しているんだけど、

勉強がてらに何か作ろうとしてもなかなか良いアイディアが思いつかないんだよね、

ただのチャットなんて今更作っても仕方ないし

面白そうな対戦ゲームでも便利サイトでもなんでもいいから作ってほしいものとかないっすかね

今お願いされたら暇にかこつけてなんでも作るよ!

2015-04-12

WebSocket使ったゲームとかサービスが作りたいんだけどなんかアイディア

Webとか詳しくない人に説明するとすると、WebSocketっていうのはチャットとか対戦麻雀みたいな

ユーザー同士がリアルタイムで繋がれるようなWebサイトを作るための技術で、

現在これを使ってなんかそこそこに流行りそうな新しいゲームとかサービスを作りたいと思ってるんだけど、

「今更リアルタイムチャットなんて作ってもなー」とか「対戦アクションとかは個人で作るのは現実的じゃないよなー」とか、

アイディアがないのに作りたい欲だけが燻ってる状態。

そこで、なんかみんなが「こういうチャット式のSNSあったら便利なのになー」とか

「こういう対戦ゲームあったら楽しそうだなー」みたいに思うサービスとかゲームアイディアがあったらちょっと教えてほしいと思ってる。

例えば、同じ配列?のフリーセル複数人でやってタイムを競いあうような既存ゲームを利用した対戦ゲームだったり、

特定の層向けのチャットサービスだったり、既にあるようなサービスゲームちょっとしたアイディアを付け加えたものだったり、

既にゲームとしては存在するけどブラウザゲームとしてはまだ存在しないゲームとか、そういうのでもなんでもいい。

WebSocketって無限の可能性があると思うんだ。

皆様の知恵を貸してください。

2014-12-31

1年の締めとして一人ハッカソンした

去年の今頃は「今年こそはすごいWebサービス作るぞ!!!!!!!!!!!」って意気込んでたのに

なんかもう今日が最終日。

ということでこの12月から何か作ろうと考えていて、丁度年末からということで作った。


Amazon購入金額分析

前にAmazonの購入金額合計を出すブックマークレット流行ったけど、それとほぼ同じ。

Amazonの今までの合計金額と、書籍とかPCとかカテゴリごとの合計金額出してグラフにする。

適当Twitter投稿して終わり。


年末だしTwitterで「2014年Kindle購入金額内訳は...でした」とか投稿すれば

みんなつられてアクセスするはず!宣伝しなくても勝手に大ブーム間違いなし!!!!!!!!

最終日に目標達成大勝利!!!!!!!!!


って思ってたけど

投稿してもだれもアクセスしてくれない。待っても待ってもアクセス0。

e?嘘でしょ???って思ったら

EC2セキュリティグループの設定変更忘れてた。

よーし今度こそアクセス過多間違いなし!!!!!


のはずだったけど今度はrobots.txt見に来るクソbotしかアクセスしてくれない。

虚しさ半端ない

というかTwitterURLつぶやくと即効でどこぞやのクローラー巡回してくるんですね。


構成自体クライアントサーバサイド共にjsEC2上でnode.js

D3.jsグラフ画像svgからどうにかしてpngにしないとTwitter投稿出来ないのが微妙に面倒だった

投稿時にクライアント側でbase64canvaspngにしても良かったけど

結局サーバサイドのphantomjsやらせた。

商品カテゴリ取得するためにはProduct Advertising API使うしかなくて

コレが毎秒1商品しか取得できない厳しい制限付き。

重複なしで600商品購入してたらなら10分かかる。

redis上にキャッシュしておいたりwebsocket適当に進捗伝えたりした。


今回得た経験値としては


あたり。


今年は残念ながら目標不達成だったけど、いい最終日の過ごし方になったと思う。

お疲れ様でした。

2014-10-11

アプリ屋がRailsを初めて触ってみて感じた事

Qiitaに書こうかと思ったけど、言いたいことも言えない、こんな世の中じゃ。

発想が古臭い

モバイルファーストAPIファースト文脈ハイブリッドWebをやってきた目からすると、サーバーサイドでHTMLを生成してページ遷移させるなどという90年代調のクラシカルな発想を基本に据えるフレームワークはとても斬新に思えました。HTMLゴリゴリ生成するなんてよほど特殊最適化をしようとするのでなければそもそも発想として出てこないです。それでいてDSLメタプログラミング等のテクニカル技法宝石のように鏤められている様はまるでエジプト時代骨董品を見るかのような趣がありました。turbolinkなどは、かつて表計算ソフトに出しゃばっていたイルカを思い起こさせる味があります。かつて慣れ親しんできたSPAが星のように遠い存在になりました。

モデルMVC

Web界隈の人々がモデルだとかアクティブレコードだとか"MVC"だとかを非常に具象的に話す様を見るにつけ、お前らどんだけPofEAA読み込んでるんだよと畏怖していた時期が僕にもありましたが、どうやら彼等はRailsクラスディレクトリという特定実装について話していただけだったようです。Modelという概念もこれだけ肥大化してしまったら、オリジナル概念で彼等と会話するのは諦めるべきかなと思いましたし、Railsの"MVC"をアンクォートして語るのはもはや害悪であるとすら感じました。

レールから外れる辛さ

Rails界隈の人がよく「Rails流儀」や「正しい"MVC"」というのを口角泡を飛ばし議論しているのを目にするのですが、おそらく外に広がる不条理で火傷を負って快適なRails世界に引き篭もった結果としての一種のストックホルム症候群なのだなと思いました。いまやAjaxとかWebsocketとかWebRTCとかを組み込もうとする至極真っ当な方法論がとてつもない高難度に見えてきます。設定よりも規約、というのも一つの方向性だと思いますが、ドメインサービスレイヤ名前空間を構築しようとしたりコードジェネレーションしようとしたりしただけで地獄のようなCircular Dependency罰を受けてしまったので、自分がとても間違った事をしているような気がしてしまいました。とはいえConcernsに特別名前役割を与えられても正直しんどいので、皆が皆libゴミを放り込んでいく様子にも納得がいきました。

レイヤ?何それおいしいの

RailsAPIサーバーとして使おうとするとまずビューが無くなってMとCだけになりますが、いわゆる"MVC"の文脈で育ったエンジニアがなぜ息を吸うようにFat ControllerやFat Modelを作ってしまうのかという事が良く分かりました。多くのRailsリファクタ手法と称されているものクラスを書くファイルを分割する事以上のものでは無いように思えたので、Rails使いを大きめなAPIサーバー案件に回すときセットポジションDDD青本を投げつける必要が有るなと思いました。

TDDやれんのか

ビューとコントローラを結合させた場合結合テストはCapybaraとかのBDDマークアップサイドとの干渉を恐れながら強い気持ちでメンテしていくしか無いのかなと思いました。おそらく脳に電極を埋め込んでいるか緑色のランプを見るだけでハイになれる特殊な人にしか生き抜けない闇が垣間見えました。コントローラを薄くしてサービスレイヤを挟めばその辺りもうまくいけそうな気がしましたが、ビューからヘルパーモデルがいくらでも透けて見えてしまうという状況では裏側の完全性に自信を持つ事は難しそうでした。

分業とか出来るんだろうか

ビューがRubyを叩いて永続化レイヤと直接コミュニケーション出来るというのはとても生産性が高いのだろうとは思いましたが、こうして出来たパーシャルやら何やらをデザイナーとどうやって共有するかを考えると頭痛が痛くなりました。おそらく適当に切り出して綺麗な空間をassets以下に構築した上でpublicにRPCのような窓口を備えたゴミを量産していくのかなと思いましたが、もっと綺麗な方法はあるのかもしれません。でもきっとRails案件に関われるデザイナーRubyバリバリ書けるに違いないはずなので、ここが問題になる事は無いのだろうなと思いました。

RESTとかきついです

RESTはとても美しいパラダイムではありますが、そもそもHTTPがさほど美しくないので歪んだ空間には目を背けるか勝手解釈を与える事で人は初めてRESTfulを名乗る事が出来るのだと思いますGETbodyを(公式には)持たないという事について美しい説明を与える事は出来ないでしょう。サーチAPIはどうしますか。ステータスコード足りなくないですか。401エラーはどうしますか。そしてRESTあくまリソース抽象化する美しい概念なので、アクション副作用については貧弱です。動詞が足りないですし、一般動詞に狭義の意味を与えてドキュメントするのは二度手間しか見えません。PUTには冪等性があるべきみたいなこだわりは家の猫にでも説教してればいいと思います。というわけで、REST的な設計拝借することはよしとしても、「○○はRESTでは無い故云々~」みたいな注文はやめて頂きたいものです。

そんなに嫌なら他に行けば

とか言わないで欲しいです。こういう時にセットでPHPをディスって悦に浸るのは知る限りRubiestとPythonistaと中学生だけです。それにこれはあくまサーバーサイド初心者感想なので、想像するにこれ系のFWは多かれ少なかれ似たような不満を抱えるものなのかなと思います。というわけで、おそらくこれから選択肢がある限りはRailsを使い続けると思います

だってRuby楽しいんだもの

2014-09-21

PerlからPythonに乗り換えようかと思う

steamとかゲームサービスをつなぐツールgithubにあってpythonjavascriptなどが多い

perl製がほぼない

これからwebで生きていくにはpyothon,javascript(node.js)なんだよなぁ

perlモジュールがそういう最新技術っぽい部分がおいつてなくてしょぼい

websocket,非同期,xmpp,rtmpとかperl資料が増えてほしいわ

Mojolicious使わないと無理らしい、めんどくせー

2014-05-23

WebSocketNode.jsが出た頃に流行ったような記憶をふと思い出す

結局どういう活用が出来たんだろうあれ

2014-05-21

プログラミング勉強したけどアイデアがないから誰かちょうだい

今年に入ってからプログラミング勉強し始めて、phpjavascriptpythonでとりあえず動くものを作れるようになった。各言語メジャーwebフレームワークも使えるようになったし、過去株価ダウンロードしてmysqlに突っ込んでta-libシストレのバックテストして遊んだり、ニコ動タグ検索結果のクローラー作って新着があればメールで知らせてくれたりするの作ったり、websocketためしてみたりbackbonejsで遊んだりもしてる。ニートから時間無限なのもあるけど、5か月弱でずいぶんできることが増えてきたなと思う。そろそろ何か作って公開してアフィで稼ぎたいなと思い始めた。でも何も出てこない。今月入ってからずっと考えてるのに作りたいものが浮かばない。いくら勉強してもアイデアがなければ無意味なんだと気付いた。誰かアイデアちょうだい

2012-06-23

キスで学ぶPush実装技術

彼女MacBookを並べてコーディング

ようやくRailsの開発を一人で出来るようになった彼女が、俺に突然質問を投げかけた。

「ねぇ、WebサービスPushってどうやって実装するの?」

「一般的には3つの方法がある。」と俺は答えた。

クールな順にWebSocket、次にコメット最後ポーリングだよ」

彼女は目を輝かせながら「それでそれで?!」と説明を求めてくる。

ポーリングは、一定時間ごと、たとえば3秒ごとにAjaxサーバリクエストを送って新着の情報が無いか問い合わせて、もし新着があれば処理を、なければスルーして次の問い合わせに備えるPush通知の実装だ。手軽に実装できる反面、新着がない多くの時間常にリクエストを送り続けることになるので無駄が多い。大規模なサービスで実装すれば、それだけでDDoSっぽくなっちゃう。また、リアルタイムも厳密には実現できなくて、MAXポーリング間隔分のラグが発生してしまう。小規模なサービスで、とりあえず実装するにはオススメかな。」

なるほどなるほど、と彼女は頷く。


コメットは?」

コメットポーリングを改良したもので、ブラウザからリクエストが送られてきた時点ではサーバはすぐにレスポンスを返さずに、処理中ってことでコネクションを張ったまま一定時間つんだ。それで、なにか新着があったタイミングで、昔送られてきてたリクエストレスポンスを返す。そうすると、新着があったタイミングレスポンスを返すタイミングになるので、レスポンスはほぼリアルタイムになる」

「なるほど!すごい!!!

「頭の良い実装だよね。Facebookの通知なんかはコメットだよ。ただ、コメットも万能じゃない。まず、レスポンスはいつまでも待てるものではなく、待たせすぎちゃうとタイムアウトなっちゃうんだ。だから一定時間ごとには何もなくても"進捗はなかったよ”というレスポンスを返してあげなきゃいけない。また、サーバコネクションを常に割り当てないといけないので、IOをブロックするようなサーバだとリソースを食い過ぎて耐えれ無くなっちゃうから大規模な運用には金がかかっちゃうんだ。所詮HTTPを使ったごまかしでしか無い。オーバーヘッドが大きいんだよ。」

「な、なるほどー」

少し話が小難しくなったためか、一生懸命理解しようと彼女が頑張っている。かわいい

「そこでWebSocketの登場だ。WebSocketは厳密には違うんだけど、HTML5関連の新しい技術で、ネトゲで使うTCP/IPセッションのようなコネクションをサーバ側と張ることができる技術なんだ。しかNATとかも超えてくれる便利な技術。これがあればリアルタイムWebの実装はすごく簡単になるんだけど、まだ新しい技術というのもあるし、対応してるサーバライブラリの不足や、プログラミングスタイルイベント駆動になるという変化もあって、まだまだ一般的にはなってない。対応してるブラウザ最近まで多くはなかったしね。やっとiPhoneでも使えるようになったし、スマフォWebでも普通に使えるようになってきた。これからが楽しみだね。」

「うーんと、うーんと、つまり

彼女今日得た知識のまとめに入ったようだ。一生懸命Web技術を学ぼうとしている健気な彼女に、僕は心がキュンとなった。

「そう、つまり…」

僕は彼女の頭に手を回し、クイっと自分の顔を近づた。

びっくりして目を見開いている彼女

そんな彼女に向かって、連続5回キスをした。


「チュッ、チュッ、チュッ、チュッ、チュッ、」

「これがポーリング。」


今度は自分の顔を少し傾け、舌を入れる深いキス


「チュポッ…」


彼女の頬は少しだけ赤く染まっていた。


「これがWebSocket、そして…」


最後に僕は彼女の顔を両手でホールドし、8秒くらいの長い、とても長いキスをした。

彼女の顔は真っ赤に染まり、目は少しだけトロンとしていた。


「これがコメット。わかったかな?」



彼女はとても恥ずかしそうに「はい…////」と返事をした。


「よし、じゃあコーディングに戻ろう。」



コーディングを始めた5分後、彼女がおもむろに呟いた。



「私、コメットがいいな。。。////」


東京は快晴、今日も絶好のペアプロ日和だ。

 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん